V 2.2.9 自动匹配,手动排序
This commit is contained in:
parent
3774e9fe55
commit
79a1929e79
@ -2,7 +2,6 @@
|
|||||||
import { resolve } from "path";
|
import { resolve } from "path";
|
||||||
import { defineConfig, externalizeDepsPlugin } from "electron-vite";
|
import { defineConfig, externalizeDepsPlugin } from "electron-vite";
|
||||||
import vue from "@vitejs/plugin-vue";
|
import vue from "@vitejs/plugin-vue";
|
||||||
import Jsx from "@vitejs/plugin-vue-jsx";
|
|
||||||
var electron_vite_config_default = defineConfig({
|
var electron_vite_config_default = defineConfig({
|
||||||
main: {
|
main: {
|
||||||
plugins: [externalizeDepsPlugin()]
|
plugins: [externalizeDepsPlugin()]
|
||||||
|
|||||||
55
package-lock.json
generated
55
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "laitool",
|
"name": "laitool",
|
||||||
"version": "2.2.8",
|
"version": "2.2.9",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "laitool",
|
"name": "laitool",
|
||||||
"version": "2.2.6",
|
"version": "2.2.8",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@alicloud/alimt20181012": "^1.2.0",
|
"@alicloud/alimt20181012": "^1.2.0",
|
||||||
@ -35,6 +35,7 @@
|
|||||||
"node-reg": "^0.2.4",
|
"node-reg": "^0.2.4",
|
||||||
"npm": "^10.7.0",
|
"npm": "^10.7.0",
|
||||||
"paddle": "^1.0.0",
|
"paddle": "^1.0.0",
|
||||||
|
"pinia": "^2.1.7",
|
||||||
"sharp": "^0.33.2",
|
"sharp": "^0.33.2",
|
||||||
"systeminformation": "^5.22.10",
|
"systeminformation": "^5.22.10",
|
||||||
"tencentcloud-sdk-nodejs": "^4.0.821",
|
"tencentcloud-sdk-nodejs": "^4.0.821",
|
||||||
@ -9281,6 +9282,56 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/pinia": {
|
||||||
|
"version": "2.1.7",
|
||||||
|
"resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.1.7.tgz",
|
||||||
|
"integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@vue/devtools-api": "^6.5.0",
|
||||||
|
"vue-demi": ">=0.14.5"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/posva"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@vue/composition-api": "^1.4.0",
|
||||||
|
"typescript": ">=4.4.4",
|
||||||
|
"vue": "^2.6.14 || ^3.3.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@vue/composition-api": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"typescript": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/pinia/node_modules/vue-demi": {
|
||||||
|
"version": "0.14.8",
|
||||||
|
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.8.tgz",
|
||||||
|
"integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"bin": {
|
||||||
|
"vue-demi-fix": "bin/vue-demi-fix.js",
|
||||||
|
"vue-demi-switch": "bin/vue-demi-switch.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@vue/composition-api": "^1.0.0-rc.1",
|
||||||
|
"vue": "^3.0.0-0 || ^2.6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@vue/composition-api": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/pixelmatch": {
|
"node_modules/pixelmatch": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "laitool",
|
"name": "laitool",
|
||||||
"version": "2.2.8",
|
"version": "2.2.9",
|
||||||
"description": "An Electron application with Vue",
|
"description": "An Electron application with Vue",
|
||||||
"main": "./out/main/index.js",
|
"main": "./out/main/index.js",
|
||||||
"author": "example.com",
|
"author": "example.com",
|
||||||
@ -43,6 +43,7 @@
|
|||||||
"node-reg": "^0.2.4",
|
"node-reg": "^0.2.4",
|
||||||
"npm": "^10.7.0",
|
"npm": "^10.7.0",
|
||||||
"paddle": "^1.0.0",
|
"paddle": "^1.0.0",
|
||||||
|
"pinia": "^2.1.7",
|
||||||
"sharp": "^0.33.2",
|
"sharp": "^0.33.2",
|
||||||
"systeminformation": "^5.22.10",
|
"systeminformation": "^5.22.10",
|
||||||
"tencentcloud-sdk-nodejs": "^4.0.821",
|
"tencentcloud-sdk-nodejs": "^4.0.821",
|
||||||
@ -85,8 +86,6 @@
|
|||||||
"resources/scripts/model/**",
|
"resources/scripts/model/**",
|
||||||
"resources/scripts/Lai.exe",
|
"resources/scripts/Lai.exe",
|
||||||
"resources/scripts/_internal/**",
|
"resources/scripts/_internal/**",
|
||||||
"resources/scripts/lama/lama_inpaint.exe",
|
|
||||||
"resources/scripts/lama/model/**",
|
|
||||||
"resources/scripts/discordScript.js",
|
"resources/scripts/discordScript.js",
|
||||||
"resources/tmp/**",
|
"resources/tmp/**",
|
||||||
"resources/icon.ico"
|
"resources/icon.ico"
|
||||||
@ -95,4 +94,4 @@
|
|||||||
"icon": "./resources/icon.ico"
|
"icon": "./resources/icon.ico"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
298
resources/scripts/requirements.txt
Normal file
298
resources/scripts/requirements.txt
Normal file
@ -0,0 +1,298 @@
|
|||||||
|
accelerate==0.30.1
|
||||||
|
addict==2.4.0
|
||||||
|
aiofiles==23.2.1
|
||||||
|
aiohttp==3.8.6
|
||||||
|
aiosignal==1.3.1
|
||||||
|
alibabacloud-bailian20230601==1.6.1
|
||||||
|
alibabacloud-credentials==0.3.3
|
||||||
|
alibabacloud-endpoint-util==0.0.3
|
||||||
|
alibabacloud-gateway-spi==0.0.1
|
||||||
|
alibabacloud-openapi-util==0.2.2
|
||||||
|
alibabacloud-tea==0.3.6
|
||||||
|
alibabacloud-tea-openapi==0.3.9
|
||||||
|
alibabacloud-tea-util==0.3.12
|
||||||
|
alibabacloud-tea-xml==0.0.2
|
||||||
|
aliyun-python-sdk-core==2.15.0
|
||||||
|
aliyun-python-sdk-kms==2.16.2
|
||||||
|
altair==5.3.0
|
||||||
|
altgraph==0.17.4
|
||||||
|
annotated-types==0.6.0
|
||||||
|
anthropic==0.26.1
|
||||||
|
antlr4-python3-runtime==4.9.3
|
||||||
|
anyio==4.3.0
|
||||||
|
APScheduler==3.10.4
|
||||||
|
arxiv==2.1.0
|
||||||
|
astor==0.8.1
|
||||||
|
asttokens==2.4.1
|
||||||
|
async-timeout==4.0.3
|
||||||
|
attrdict==2.0.1
|
||||||
|
attrs==23.2.0
|
||||||
|
av==11.0.0
|
||||||
|
azure-cognitiveservices-speech==1.37.0
|
||||||
|
Babel==2.15.0
|
||||||
|
backports.tarfile==1.1.1
|
||||||
|
baidu-aip==4.16.13
|
||||||
|
bce-python-sdk==0.9.11
|
||||||
|
beautifulsoup4==4.12.3
|
||||||
|
bidict==0.23.1
|
||||||
|
blinker==1.8.2
|
||||||
|
broadscope-bailian==1.3.1
|
||||||
|
cachetools==5.3.3
|
||||||
|
certifi==2024.2.2
|
||||||
|
cffi==1.16.0
|
||||||
|
cfgv==3.4.0
|
||||||
|
chardet==5.2.0
|
||||||
|
charset-normalizer==3.3.2
|
||||||
|
chatgpt-tool-hub==0.5.0
|
||||||
|
cheroot==10.0.1
|
||||||
|
click==8.1.7
|
||||||
|
colorama==0.4.6
|
||||||
|
coloredlogs==15.0.1
|
||||||
|
comtypes==1.4.2
|
||||||
|
contourpy==1.2.1
|
||||||
|
controlnet-aux==0.0.3
|
||||||
|
crcmod==1.7
|
||||||
|
cryptography==42.0.5
|
||||||
|
cssselect==1.2.0
|
||||||
|
cssutils==2.11.0
|
||||||
|
ctranslate2==4.1.0
|
||||||
|
curl_cffi==0.6.4
|
||||||
|
cx-Logging==3.1.0
|
||||||
|
cx_Freeze==6.15.16
|
||||||
|
cycler==0.12.1
|
||||||
|
Cython==3.0.10
|
||||||
|
dashscope==1.19.2
|
||||||
|
datasets==2.18.0
|
||||||
|
decorator==4.4.2
|
||||||
|
diffusers==0.27.2
|
||||||
|
dill==0.3.8
|
||||||
|
dingtalk-stream==0.18.1
|
||||||
|
distlib==0.3.8
|
||||||
|
distro==1.9.0
|
||||||
|
dnspython==2.6.1
|
||||||
|
dulwich==0.22.1
|
||||||
|
easydict==1.13
|
||||||
|
edge-tts==6.1.12
|
||||||
|
einops==0.7.0
|
||||||
|
elevenlabs==1.0.3
|
||||||
|
email_validator==2.1.1
|
||||||
|
et-xmlfile==1.1.0
|
||||||
|
exceptiongroup==1.2.1
|
||||||
|
executing==2.0.1
|
||||||
|
fastapi==0.108.0
|
||||||
|
fastapi-cli==0.0.2
|
||||||
|
faster-whisper==1.0.1
|
||||||
|
feedparser==6.0.10
|
||||||
|
ffmpy==0.3.2
|
||||||
|
filelock==3.13.1
|
||||||
|
fire==0.6.0
|
||||||
|
Flask==3.0.3
|
||||||
|
flask-babel==4.0.0
|
||||||
|
flatbuffers==24.3.7
|
||||||
|
fonttools==4.53.0
|
||||||
|
frozenlist==1.4.1
|
||||||
|
fsspec==2024.2.0
|
||||||
|
future==1.0.0
|
||||||
|
gast==0.5.4
|
||||||
|
google-ai-generativelanguage==0.6.4
|
||||||
|
google-api-core==2.19.0
|
||||||
|
google-api-python-client==2.130.0
|
||||||
|
google-auth==2.29.0
|
||||||
|
google-auth-httplib2==0.2.0
|
||||||
|
google-generativeai==0.5.4
|
||||||
|
googleapis-common-protos==1.63.0
|
||||||
|
gradio==4.21.0
|
||||||
|
gradio_client==0.12.0
|
||||||
|
grpcio==1.64.0
|
||||||
|
grpcio-status==1.62.2
|
||||||
|
gTTS==2.5.1
|
||||||
|
h11==0.14.0
|
||||||
|
HTMLParser==0.0.2
|
||||||
|
httpcore==1.0.5
|
||||||
|
httplib2==0.22.0
|
||||||
|
httptools==0.6.1
|
||||||
|
httpx==0.27.0
|
||||||
|
huggingface-hub==0.23.2
|
||||||
|
humanfriendly==10.0
|
||||||
|
identify==2.5.36
|
||||||
|
idna==3.6
|
||||||
|
imageio==2.34.0
|
||||||
|
imageio-ffmpeg==0.4.9
|
||||||
|
imgaug==0.4.0
|
||||||
|
importlib_metadata==7.0.2
|
||||||
|
importlib_resources==6.4.0
|
||||||
|
install==1.3.5
|
||||||
|
IOPaint==1.3.3
|
||||||
|
ipython==8.24.0
|
||||||
|
itsdangerous==2.2.0
|
||||||
|
jaraco.context==5.3.0
|
||||||
|
jaraco.functools==4.0.1
|
||||||
|
jedi==0.19.1
|
||||||
|
Jinja2==3.1.3
|
||||||
|
jiter==0.4.0
|
||||||
|
jmespath==0.10.0
|
||||||
|
jsonschema==4.22.0
|
||||||
|
jsonschema-specifications==2023.12.1
|
||||||
|
kiwisolver==1.4.5
|
||||||
|
langid==1.1.6
|
||||||
|
lazy_loader==0.4
|
||||||
|
lief==0.14.1
|
||||||
|
linkai==0.0.6.0
|
||||||
|
lmdb==1.4.1
|
||||||
|
loguru==0.7.2
|
||||||
|
lxml==5.2.2
|
||||||
|
markdown-it-py==3.0.0
|
||||||
|
MarkupSafe==2.1.5
|
||||||
|
matplotlib==3.9.0
|
||||||
|
matplotlib-inline==0.1.7
|
||||||
|
mdurl==0.1.2
|
||||||
|
modelscope==1.13.1
|
||||||
|
more-itertools==10.2.0
|
||||||
|
moviepy==1.0.3
|
||||||
|
mpmath==1.3.0
|
||||||
|
multidict==6.0.5
|
||||||
|
multiprocess==0.70.16
|
||||||
|
networkx==3.2.1
|
||||||
|
nodeenv==1.8.0
|
||||||
|
Nuitka==2.1.2
|
||||||
|
numpy==1.24.2
|
||||||
|
omegaconf==2.3.0
|
||||||
|
onnxruntime==1.17.1
|
||||||
|
openai==0.27.8
|
||||||
|
opencv-contrib-python==4.6.0.66
|
||||||
|
opencv-python==4.6.0.66
|
||||||
|
opencv-python-headless==4.9.0.80
|
||||||
|
openpyxl==3.1.2
|
||||||
|
opt-einsum==3.3.0
|
||||||
|
optionaldict==0.1.2
|
||||||
|
ordered-set==4.1.0
|
||||||
|
orjson==3.10.3
|
||||||
|
oss2==2.18.4
|
||||||
|
packaging==24.0
|
||||||
|
paddleocr==2.7.3
|
||||||
|
paddlepaddle==2.6.1
|
||||||
|
pandas==2.2.1
|
||||||
|
parso==0.8.4
|
||||||
|
pdf2docx==0.5.8
|
||||||
|
pefile==2023.2.7
|
||||||
|
peft==0.7.1
|
||||||
|
piexif==1.1.3
|
||||||
|
pillow==10.3.0
|
||||||
|
platformdirs==4.2.0
|
||||||
|
pre-commit==3.7.1
|
||||||
|
premailer==3.10.0
|
||||||
|
proglog==0.1.10
|
||||||
|
prompt-toolkit==3.0.43
|
||||||
|
proto-plus==1.23.0
|
||||||
|
protobuf==3.20.2
|
||||||
|
psutil==5.9.8
|
||||||
|
pure-eval==0.2.2
|
||||||
|
pyarrow==15.0.1
|
||||||
|
pyarrow-hotfix==0.6
|
||||||
|
pyasn1==0.6.0
|
||||||
|
pyasn1_modules==0.4.0
|
||||||
|
pyclipper==1.3.0.post5
|
||||||
|
pycparser==2.21
|
||||||
|
pycryptodome==3.20.0
|
||||||
|
pydantic==2.5.3
|
||||||
|
pydantic_core==2.14.6
|
||||||
|
pydub==0.25.1
|
||||||
|
Pygments==2.18.0
|
||||||
|
pyinstaller==6.5.0
|
||||||
|
pyinstaller-hooks-contrib==2024.3
|
||||||
|
PyJWT==2.8.0
|
||||||
|
PyMuPDF==1.24.5
|
||||||
|
PyMuPDFb==1.24.3
|
||||||
|
pyOpenSSL==24.1.0
|
||||||
|
pyoxidizer==0.24.0
|
||||||
|
pyparsing==3.1.2
|
||||||
|
pypiwin32==223
|
||||||
|
pypng==0.20220715.0
|
||||||
|
PyQRCode==1.2.1
|
||||||
|
pyreadline3==3.4.1
|
||||||
|
pytesseract==0.3.10
|
||||||
|
python-dateutil==2.9.0.post0
|
||||||
|
python-docx==1.1.2
|
||||||
|
python-dotenv==1.0.1
|
||||||
|
python-engineio==4.9.1
|
||||||
|
python-multipart==0.0.9
|
||||||
|
python-socketio==5.7.2
|
||||||
|
pyttsx3==2.90
|
||||||
|
pytz==2024.1
|
||||||
|
pywin32==306
|
||||||
|
pywin32-ctypes==0.2.2
|
||||||
|
PyYAML==6.0.1
|
||||||
|
qrcode==7.4.2
|
||||||
|
rapidfuzz==3.9.3
|
||||||
|
rarfile==4.2
|
||||||
|
referencing==0.35.1
|
||||||
|
regex==2024.5.15
|
||||||
|
requests==2.31.0
|
||||||
|
rich==13.7.1
|
||||||
|
rpds-py==0.18.1
|
||||||
|
rsa==4.9
|
||||||
|
ruff==0.4.7
|
||||||
|
safetensors==0.4.3
|
||||||
|
scenedetect==0.6.3
|
||||||
|
scikit-image==0.23.2
|
||||||
|
scipy==1.12.0
|
||||||
|
semantic-version==2.10.0
|
||||||
|
sgmllib3k==1.0.0
|
||||||
|
shapely==2.0.4
|
||||||
|
shellingham==1.5.4
|
||||||
|
simple-websocket==1.0.0
|
||||||
|
simplejson==3.19.2
|
||||||
|
six==1.16.0
|
||||||
|
sniffio==1.3.1
|
||||||
|
sortedcontainers==2.4.0
|
||||||
|
soupsieve==2.5
|
||||||
|
SpeechRecognition==3.10.4
|
||||||
|
stack-data==0.6.3
|
||||||
|
starlette==0.32.0.post1
|
||||||
|
sympy==1.12
|
||||||
|
tenacity==8.2.3
|
||||||
|
termcolor==2.4.0
|
||||||
|
tifffile==2024.5.22
|
||||||
|
tiktoken==0.4.0
|
||||||
|
timm==1.0.3
|
||||||
|
tokenizers==0.19.1
|
||||||
|
tomli==2.0.1
|
||||||
|
tomlkit==0.12.0
|
||||||
|
toolz==0.12.1
|
||||||
|
torch==2.1.2+cu118
|
||||||
|
torchvision==0.16.2+cu118
|
||||||
|
tqdm==4.66.2
|
||||||
|
traitlets==5.14.3
|
||||||
|
transformers==4.41.2
|
||||||
|
typer==0.12.3
|
||||||
|
typer-config==1.4.0
|
||||||
|
typing_extensions==4.10.0
|
||||||
|
tzdata==2024.1
|
||||||
|
tzlocal==5.2
|
||||||
|
ujson==5.9.0
|
||||||
|
uritemplate==4.1.1
|
||||||
|
urllib3==2.2.1
|
||||||
|
utility==1.0
|
||||||
|
uvicorn==0.29.0
|
||||||
|
virtualenv==20.26.2
|
||||||
|
visualdl==2.5.3
|
||||||
|
watchfiles==0.21.0
|
||||||
|
wcwidth==0.2.13
|
||||||
|
web.py==0.62
|
||||||
|
websocket-client==1.2.0
|
||||||
|
websockets==11.0.3
|
||||||
|
wechatpy==1.8.18
|
||||||
|
Werkzeug==3.0.3
|
||||||
|
wikipedia==1.4.0
|
||||||
|
win32-setctime==1.1.0
|
||||||
|
wolframalpha==5.0.0
|
||||||
|
wsproto==1.2.0
|
||||||
|
xlrd==2.0.1
|
||||||
|
xmltodict==0.13.0
|
||||||
|
xxhash==3.4.1
|
||||||
|
yacs==0.1.8
|
||||||
|
yapf==0.40.2
|
||||||
|
yarl==1.9.4
|
||||||
|
zhipuai==2.1.0.20240521
|
||||||
|
zipp==3.18.1
|
||||||
|
zstandard==0.22.0
|
||||||
@ -87,15 +87,7 @@ export class DiscordAPI {
|
|||||||
if (typeof res_data == "string") {
|
if (typeof res_data == "string") {
|
||||||
res_data = JSON.parse(res_data);
|
res_data = JSON.parse(res_data);
|
||||||
}
|
}
|
||||||
if (res_data && res_data.code != 1) {
|
// 直接返回,错误信息外面判断
|
||||||
if (res_data.message) {
|
|
||||||
throw new Error(res_data.message);
|
|
||||||
} else if (res_data.description) {
|
|
||||||
throw new Error(res_data.description)
|
|
||||||
} else {
|
|
||||||
throw new Error("未知错误,可联系管理员排查");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return res_data;
|
return res_data;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
throw error;
|
throw error;
|
||||||
|
|||||||
@ -6,6 +6,7 @@ export const DEFINE_STRING = {
|
|||||||
GET_DEFINE_CONFIG_JSON_BY_PROPERTY: "GET_DEFINE_CONFIG_JSON_BY_PROPERTY",
|
GET_DEFINE_CONFIG_JSON_BY_PROPERTY: "GET_DEFINE_CONFIG_JSON_BY_PROPERTY",
|
||||||
GET_IMAGE_GENERATE_CATEGORY: "GET_IMAGE_GENERATE_CATEGORY",
|
GET_IMAGE_GENERATE_CATEGORY: "GET_IMAGE_GENERATE_CATEGORY",
|
||||||
SHOW_MAIN_NOTIFICATION: "SHOW_MAIN_NOTIFICATION",
|
SHOW_MAIN_NOTIFICATION: "SHOW_MAIN_NOTIFICATION",
|
||||||
|
SHOW_GLOABAL_MESSAGE: "SHOW_GLOABAL_MESSAGE",
|
||||||
CHECK_MACHINE_ID: "CHECK_MACHINE_ID",
|
CHECK_MACHINE_ID: "CHECK_MACHINE_ID",
|
||||||
GET_CUSTOMIZE_GPT_PROMPT: "GET_CUSTOMIZE_GPT_PROMPT",
|
GET_CUSTOMIZE_GPT_PROMPT: "GET_CUSTOMIZE_GPT_PROMPT",
|
||||||
GENERATE_GPT_EXAMPLE_OUT: "GENERATE_GPT_EXAMPLE_OUT",
|
GENERATE_GPT_EXAMPLE_OUT: "GENERATE_GPT_EXAMPLE_OUT",
|
||||||
@ -159,7 +160,9 @@ export const DEFINE_STRING = {
|
|||||||
GET_GENERATED_MJ_IMAGE_AND_SPLIT: "GET_GENERATED_MJ_IMAGE_AND_SPLIT",
|
GET_GENERATED_MJ_IMAGE_AND_SPLIT: "GET_GENERATED_MJ_IMAGE_AND_SPLIT",
|
||||||
DOWNLOAD_IMAGE_URL_AND_SPLIT: "DOWNLOAD_IMAGE_URL_AND_SPLIT",
|
DOWNLOAD_IMAGE_URL_AND_SPLIT: "DOWNLOAD_IMAGE_URL_AND_SPLIT",
|
||||||
GET_MJ_IMAGE_SCALE: 'GET_MJ_IMAGE_SCALE',
|
GET_MJ_IMAGE_SCALE: 'GET_MJ_IMAGE_SCALE',
|
||||||
GET_MJ_IMAGE_ROBOT_MODEL: "GET_MJ_IMAGE_ROBOT_MODEL"
|
GET_MJ_IMAGE_ROBOT_MODEL: "GET_MJ_IMAGE_ROBOT_MODEL",
|
||||||
|
MACTH_USER_RETURN: "MACTH_USER_RETURN",
|
||||||
|
AUTO_MATCH_USER: "AUTO_MATCH_USER",
|
||||||
},
|
},
|
||||||
DISCORD: {
|
DISCORD: {
|
||||||
OPERATE_REFRASH_DISCORD_URL: "OPERATE_REFRASH_DISCORD_URL",
|
OPERATE_REFRASH_DISCORD_URL: "OPERATE_REFRASH_DISCORD_URL",
|
||||||
@ -188,5 +191,15 @@ export const DEFINE_STRING = {
|
|||||||
},
|
},
|
||||||
SYSTEM: {
|
SYSTEM: {
|
||||||
OPEN_FILE: "OPEN_FILE",
|
OPEN_FILE: "OPEN_FILE",
|
||||||
|
},
|
||||||
|
SETTING: {
|
||||||
|
GET_DATA_BY_TYPE_AND_PROPERTY: "GET_DATA_BY_TYPE_AND_PROPERTY",
|
||||||
|
SAVE_DATA_BY_TYPE_AND_PROPERTY: "SAVE_DATA_BY_TYPE_AND_PROPERTY",
|
||||||
|
DELETE_DATA_BY_TYPE_AND_PROPERTY: "DELETE_DATA_BY_TYPE_AND_PROPERTY",
|
||||||
|
},
|
||||||
|
PROMPT: {
|
||||||
|
GET_SORT_OPTIONS: "GET_SORT_OPTIONS",
|
||||||
|
SAVE_PROMPT_SORT_DATA: "SAVE_PROMPT_SORT_DATA",
|
||||||
|
GET_PROMPT_SORT_DATA: "GET_PROMPT_SORT_DATA"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,3 +1,15 @@
|
|||||||
export const LOGGER_DEFINE = {
|
export const LOGGER_DEFINE = {
|
||||||
|
|
||||||
REMOVE_WATERMARK: "去除水印",
|
REMOVE_WATERMARK: "去除水印",
|
||||||
|
ORIGINAL_AUTO_MATCH_USER: "原创自动匹配用户",
|
||||||
|
|
||||||
|
PROMPT: {
|
||||||
|
GET_PROMPT_SORT_OPTIONS: "获取所有的排序选项",
|
||||||
|
SAVE_PROMPT_SORT_DATA: "保存提示词排序的数据",
|
||||||
|
GET_PROMPT_SORT_DATA: "获取提示词排序的数据"
|
||||||
|
},
|
||||||
|
|
||||||
|
GLOBAL: {
|
||||||
|
PARAM_ERROR: "参数错误",
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -2,6 +2,7 @@
|
|||||||
let fspromises = require('fs').promises;
|
let fspromises = require('fs').promises;
|
||||||
import { get, cloneDeep } from 'lodash';
|
import { get, cloneDeep } from 'lodash';
|
||||||
import { define } from '../define';
|
import { define } from '../define';
|
||||||
|
import { errorMessage } from '../../main/generalTools';
|
||||||
|
|
||||||
export class DynamicSetting {
|
export class DynamicSetting {
|
||||||
constructor(global) {
|
constructor(global) {
|
||||||
@ -114,6 +115,71 @@ export class DynamicSetting {
|
|||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化一个对象
|
||||||
|
let dynamic = new DynamicSetting(global);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将传入的数据和当前的数据进行拼接返回,判断类型
|
||||||
|
* @param {*} value
|
||||||
|
*/
|
||||||
|
export async function GetDataByTypeAndProperty(value) {
|
||||||
|
try {
|
||||||
|
// 判断value的类型是不是string
|
||||||
|
if (typeof value == "string") {
|
||||||
|
value = JSON.parse(value);
|
||||||
|
}
|
||||||
|
// 判断必要的数据是不是存在
|
||||||
|
if (!value.mainType || !value.property) {
|
||||||
|
throw new Error("传入的数据不完整");
|
||||||
|
}
|
||||||
|
value.defaultData = value.defaultData ? value.defaultData : [];
|
||||||
|
let res = await dynamic.getDataByTypeAndProperty('dynamic', value.mainType, value.property, [], []);
|
||||||
|
return res;
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage(error.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存数据,注意,这里不能传递回调函数
|
||||||
|
* @param {*} value
|
||||||
|
*/
|
||||||
|
export async function SaveDataByTypeAndProperty(value) {
|
||||||
|
try {
|
||||||
|
if (typeof value == "string") {
|
||||||
|
value = JSON.parse(value);
|
||||||
|
}
|
||||||
|
// 判断必要的数据是不是存在
|
||||||
|
if (!value.mainType || !value.property || !value.data) {
|
||||||
|
throw new Error("传入的数据不完整");
|
||||||
|
}
|
||||||
|
let res = await dynamic.saveDataByTypeAndProperty(value.data, value.mainType, value.property, null);
|
||||||
|
return res;
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage(error.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除数据
|
||||||
|
* @param {*} value
|
||||||
|
*/
|
||||||
|
export async function DeleteDataByTypeAndProperty(value) {
|
||||||
|
try {
|
||||||
|
if (typeof value == "string") {
|
||||||
|
value = JSON.parse(value);
|
||||||
|
}
|
||||||
|
// 判断必要的数据是不是存在
|
||||||
|
if (!value.id || !value.mainType || !value.property) {
|
||||||
|
throw new Error("传入的数据不完整");
|
||||||
|
}
|
||||||
|
let res = await dynamic.deleteDataByTypeAndProperty(value.id, value.mainType, value.property);
|
||||||
|
return res;
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage(error.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -214,8 +214,8 @@ export const ImageSetting = {
|
|||||||
* @param {*} value
|
* @param {*} value
|
||||||
* 0 define中的指定属性(指定的配置文件)
|
* 0 define中的指定属性(指定的配置文件)
|
||||||
* 1 要获取的什么属性信息 property,property 为null,赶回当前配置文件的所有数据
|
* 1 要获取的什么属性信息 property,property 为null,赶回当前配置文件的所有数据
|
||||||
* 2 是不是要校验属性不存在
|
* 2 要写入的值
|
||||||
* 3 属性没有找到的默认值
|
* 3 是不是要校验属性不存在
|
||||||
*/
|
*/
|
||||||
async SaveDefineConfigJsonByProperty(value) {
|
async SaveDefineConfigJsonByProperty(value) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
32
src/main/IPCEvent/index.js
Normal file
32
src/main/IPCEvent/index.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
import { PromptIpc } from "./promptIpc"
|
||||||
|
import { SettingIpc } from './settingIpc.js'
|
||||||
|
import { ImageGenerateIpc } from './imageGenerateIpc.js'
|
||||||
|
import { WritingIpc } from './writingIpc.js'
|
||||||
|
import { VideoGenerateIpc } from './videoGenerateIpc'
|
||||||
|
import { TranslateIpc } from './translateIpc.js'
|
||||||
|
import { GptIpc } from './gptIpc.js'
|
||||||
|
import { MjIpc } from './mjIpc.js'
|
||||||
|
import { OriginalImageGenerateIpc } from './originalImageGenerateIpc'
|
||||||
|
import { SdIpc } from './sdIpc.js'
|
||||||
|
import { MainIpc } from './mainIpc.js'
|
||||||
|
import { GlobalIpc } from "./globalIpc.js";
|
||||||
|
import { ImageIpc } from "./imageIpc.js";
|
||||||
|
import { SystemIpc } from "./system.js";
|
||||||
|
|
||||||
|
export function RegisterIpc(createWindow) {
|
||||||
|
PromptIpc()
|
||||||
|
SettingIpc();
|
||||||
|
ImageGenerateIpc();
|
||||||
|
WritingIpc();
|
||||||
|
VideoGenerateIpc();
|
||||||
|
TranslateIpc();
|
||||||
|
GptIpc();
|
||||||
|
SdIpc();
|
||||||
|
MjIpc();
|
||||||
|
MainIpc(createWindow);
|
||||||
|
OriginalImageGenerateIpc();
|
||||||
|
GlobalIpc();
|
||||||
|
ImageIpc();
|
||||||
|
SystemIpc();
|
||||||
|
}
|
||||||
|
|
||||||
@ -63,6 +63,9 @@ function MjIpc() {
|
|||||||
// 获取所有的MJ生图模型
|
// 获取所有的MJ生图模型
|
||||||
ipcMain.handle(DEFINE_STRING.MJ.GET_MJ_IMAGE_ROBOT_MODEL, async (event) => await mjSimple.GetMJImageRobotModel());
|
ipcMain.handle(DEFINE_STRING.MJ.GET_MJ_IMAGE_ROBOT_MODEL, async (event) => await mjSimple.GetMJImageRobotModel());
|
||||||
|
|
||||||
|
// 自动匹配用户表标签
|
||||||
|
ipcMain.handle(DEFINE_STRING.MJ.AUTO_MATCH_USER, async (event, value) => await mJOriginalImageGenerate.AutoMatchUser(value));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 监听DISCORD界面创建消息,并修改数据
|
* 监听DISCORD界面创建消息,并修改数据
|
||||||
*/
|
*/
|
||||||
|
|||||||
18
src/main/IPCEvent/promptIpc.js
Normal file
18
src/main/IPCEvent/promptIpc.js
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { ipcMain } from "electron";
|
||||||
|
import { DEFINE_STRING } from '../../define/define_string'
|
||||||
|
import { Prompt } from "../Public/Prompt";
|
||||||
|
let prompt = new Prompt();
|
||||||
|
|
||||||
|
function PromptIpc() {
|
||||||
|
// 获取所有的排序选项
|
||||||
|
ipcMain.handle(DEFINE_STRING.PROMPT.GET_SORT_OPTIONS, (event) => prompt.GetPromptSortOptions());
|
||||||
|
|
||||||
|
// 保存提示词排序数据
|
||||||
|
ipcMain.handle(DEFINE_STRING.PROMPT.SAVE_PROMPT_SORT_DATA, (event, value) => prompt.SavePromptSort(value));
|
||||||
|
|
||||||
|
// 获取已经保存的提示词数据
|
||||||
|
ipcMain.handle(DEFINE_STRING.PROMPT.GET_PROMPT_SORT_DATA, (event) => prompt.GetPromptSort())
|
||||||
|
}
|
||||||
|
export {
|
||||||
|
PromptIpc
|
||||||
|
}
|
||||||
@ -2,11 +2,13 @@ const {
|
|||||||
ipcMain, app
|
ipcMain, app
|
||||||
} = require("electron")
|
} = require("electron")
|
||||||
import { DEFINE_STRING } from '../../define/define_string'
|
import { DEFINE_STRING } from '../../define/define_string'
|
||||||
|
import { GetDataByTypeAndProperty, SaveDataByTypeAndProperty, DeleteDataByTypeAndProperty } from '../../define/setting/dynamicSetting';
|
||||||
import {
|
import {
|
||||||
Setting
|
Setting
|
||||||
} from '../setting/setting'
|
} from '../setting/setting'
|
||||||
let setting = new Setting(global);
|
let setting = new Setting(global);
|
||||||
|
|
||||||
|
|
||||||
async function SettingIpc() {
|
async function SettingIpc() {
|
||||||
|
|
||||||
// 获取背景音乐配置列表
|
// 获取背景音乐配置列表
|
||||||
@ -65,6 +67,21 @@ async function SettingIpc() {
|
|||||||
|
|
||||||
// // 保存指定的配置文件里面指定的属性的数据
|
// // 保存指定的配置文件里面指定的属性的数据
|
||||||
ipcMain.handle(DEFINE_STRING.SAVE_DEFINE_CONFIG_JSON_BY_PROPERTY, async (event, value) => await setting.SaveDefineConfigJsonByProperty(value))
|
ipcMain.handle(DEFINE_STRING.SAVE_DEFINE_CONFIG_JSON_BY_PROPERTY, async (event, value) => await setting.SaveDefineConfigJsonByProperty(value))
|
||||||
|
|
||||||
|
|
||||||
|
//#region 动态设置(只是动态设置)
|
||||||
|
|
||||||
|
// 获取动态配置的的指定主分类,指定的属性的数据(只是获取动态的,type定死了dynamic)
|
||||||
|
ipcMain.handle(DEFINE_STRING.SETTING.GET_DATA_BY_TYPE_AND_PROPERTY, async (event, value) => await GetDataByTypeAndProperty(value));
|
||||||
|
|
||||||
|
// 保存动态配置的的指定主分类,指定的属性的数据
|
||||||
|
ipcMain.handle(DEFINE_STRING.SETTING.SAVE_DATA_BY_TYPE_AND_PROPERTY, async (event, value) => await SaveDataByTypeAndProperty(value));
|
||||||
|
|
||||||
|
// 删除动态配置的的指定主分类,指定的属性的数据
|
||||||
|
ipcMain.handle(DEFINE_STRING.SETTING.DELETE_DATA_BY_TYPE_AND_PROPERTY, async (event, value) => await DeleteDataByTypeAndProperty(value));
|
||||||
|
|
||||||
|
//#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
|||||||
@ -8,11 +8,14 @@ import { Tools } from "../tools";
|
|||||||
import path from 'path'
|
import path from 'path'
|
||||||
import sharp from 'sharp'
|
import sharp from 'sharp'
|
||||||
import { define } from "../../define/define";
|
import { define } from "../../define/define";
|
||||||
import { AwesomeRegx } from "awesome-js";
|
import { AwesomeHelp } from "awesome-js";
|
||||||
import { checkStringValueAddSuffix, errorMessage, successMessage } from "../generalTools";
|
import { checkStringValueAddSuffix, errorMessage, successMessage } from "../generalTools";
|
||||||
import { ImageSetting } from "../../define/setting/imageSetting";
|
import { ImageSetting } from "../../define/setting/imageSetting";
|
||||||
import { DiscordAPI } from "../../api/discordApi";
|
import { DiscordAPI } from "../../api/discordApi";
|
||||||
import { GPT } from "../Public/GPT";
|
import { GPT } from "../Public/GPT";
|
||||||
|
import { TagDefine } from "../../define/tagDefine";
|
||||||
|
import { cloneDeep } from "lodash";
|
||||||
|
import { LOGGER_DEFINE } from "../../define/logger_define";
|
||||||
const { v4: uuidv4 } = require('uuid');
|
const { v4: uuidv4 } = require('uuid');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -26,15 +29,122 @@ export class MJOriginalImageGenerate {
|
|||||||
this.tools = new Tools();
|
this.tools = new Tools();
|
||||||
this.discordAPI = new DiscordAPI();
|
this.discordAPI = new DiscordAPI();
|
||||||
this.gpt = new GPT(global);
|
this.gpt = new GPT(global);
|
||||||
|
this.tagDefine = new TagDefine(global);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 返回指定的人物到前端
|
* 返回指定的人物到前端
|
||||||
* @param {*} data
|
* @param {*} data
|
||||||
*/
|
*/
|
||||||
sendChangeMessage(data) {
|
sendChangeMessage(data, message_name = DEFINE_STRING.DISCORD.MAIN_DISCORD_MESSAGE_CHANGE) {
|
||||||
this.global.newWindow[0].win.webContents.send(DEFINE_STRING.DISCORD.MAIN_DISCORD_MESSAGE_CHANGE, data);
|
this.global.newWindow[0].win.webContents.send(message_name, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过文本自动匹配数据
|
||||||
|
* @param {*} value
|
||||||
|
*/
|
||||||
|
async AutoMatchUser(value) {
|
||||||
|
try {
|
||||||
|
value = JSON.parse(value);
|
||||||
|
// 获取所有的角色数据,包括别名
|
||||||
|
// 获取所有的角色数据
|
||||||
|
let character_tags = await this.tagDefine.getTagDataByTypeAndProperty("dynamic", "character_tags");
|
||||||
|
if (character_tags.code == 0) {
|
||||||
|
return errorMessage("获取角色数据错误,错误信息如下:" + character_tags.message, LOGGER_DEFINE.ORIGINAL_AUTO_MATCH_USER)
|
||||||
|
}
|
||||||
|
character_tags = character_tags.data;
|
||||||
|
if (character_tags.length == 0) {
|
||||||
|
return errorMessage("请先添加角色数据", LOGGER_DEFINE.ORIGINAL_AUTO_MATCH_USER)
|
||||||
|
}
|
||||||
|
let character_tags_data = [];
|
||||||
|
for (let i = 0; i < character_tags.length; i++) {
|
||||||
|
let item = character_tags[i];
|
||||||
|
// 这边还要判断是不是显示(只有显示的才hi自动匹配)
|
||||||
|
if (!item.hasOwnProperty("isShow") || !item.isShow) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let temp_name = [item.label];
|
||||||
|
// 判断当前的数是不是存在别名
|
||||||
|
if (item.children && item.children.length > 0) {
|
||||||
|
for (let j = 0; j < item.children.length; j++) {
|
||||||
|
const element = item.children[j];
|
||||||
|
temp_name.push(element.label);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
character_tags_data.push({
|
||||||
|
key: item.key,
|
||||||
|
value: item.value,
|
||||||
|
names: temp_name
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (character_tags_data.length == 0) {
|
||||||
|
return errorMessage("当前没有显示的角色数据,请先选择哪些是要显示的角色数据", LOGGER_DEFINE.ORIGINAL_AUTO_MATCH_USER)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (let i = 0; i < value.length; i++) {
|
||||||
|
const element = value[i];
|
||||||
|
|
||||||
|
let res_data = {
|
||||||
|
code: 1,
|
||||||
|
id: element.id, // 当前 data 的ID
|
||||||
|
match_character: [],
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取当前的字幕数据
|
||||||
|
let temp_sub = [];
|
||||||
|
for (let j = 0; element.suValue && j < element.suValue.length; j++) {
|
||||||
|
const element = array[j];
|
||||||
|
temp_sub.push(element.srt_value);
|
||||||
|
}
|
||||||
|
let word = "";
|
||||||
|
if (temp_sub.length == 0) {
|
||||||
|
word = element.after_gpt;
|
||||||
|
} else {
|
||||||
|
word = temp_sub.join(",");
|
||||||
|
}
|
||||||
|
|
||||||
|
let match_keys = [];
|
||||||
|
|
||||||
|
// 开始循环判断,只要又一个满足就跳出新婚换
|
||||||
|
for (let j = 0; j < character_tags_data.length; j++) {
|
||||||
|
const item = character_tags_data[j];
|
||||||
|
let names = AwesomeHelp.makeSensitiveMap(item.names);
|
||||||
|
// 开始判断
|
||||||
|
let name_res = AwesomeHelp.checkSensitiveWord(word, false, names);
|
||||||
|
if (name_res.size > 0) {
|
||||||
|
match_keys.push(item.key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断是不是又匹配到的数据
|
||||||
|
if (match_keys.length > 0) {
|
||||||
|
// 进行数据的处理,通过对应的key,获取对应的数据,将所有的数进行返回
|
||||||
|
for (let i = 0; i < match_keys.length; i++) {
|
||||||
|
const item = match_keys[i];
|
||||||
|
let index = character_tags.findIndex(x => x.key == item);
|
||||||
|
if (index == -1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let temp_item_data = cloneDeep(character_tags[index]);
|
||||||
|
if (temp_item_data.children) {
|
||||||
|
delete temp_item_data.children
|
||||||
|
}
|
||||||
|
res_data.match_character.push(temp_item_data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始往前端传递数据
|
||||||
|
this.sendChangeMessage(res_data, DEFINE_STRING.MJ.MACTH_USER_RETURN);
|
||||||
|
}
|
||||||
|
return successMessage(null, "人物标签自动匹配完成", LOGGER_DEFINE.ORIGINAL_AUTO_MATCH_USER)
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage("通过文本自动匹配数据错误,错误信息如下:" + error.message, LOGGER_DEFINE.ORIGINAL_AUTO_MATCH_USER)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化MJ设置
|
* 初始化MJ设置
|
||||||
*/
|
*/
|
||||||
@ -290,6 +400,11 @@ export class MJOriginalImageGenerate {
|
|||||||
"Authorization": mjSetting.api_key
|
"Authorization": mjSetting.api_key
|
||||||
}
|
}
|
||||||
res = await this.discordAPI.mjApiImagine(imagine_url, data, headers);
|
res = await this.discordAPI.mjApiImagine(imagine_url, data, headers);
|
||||||
|
|
||||||
|
if (res.code == 24) {
|
||||||
|
throw new Error("提示词包含敏感词,请修改后重试");
|
||||||
|
}
|
||||||
|
|
||||||
} else if (imagine_url.includes("api.ephone.ai")) {
|
} else if (imagine_url.includes("api.ephone.ai")) {
|
||||||
// ePhoneAPI
|
// ePhoneAPI
|
||||||
let headers = {
|
let headers = {
|
||||||
@ -306,6 +421,15 @@ export class MJOriginalImageGenerate {
|
|||||||
}
|
}
|
||||||
res = await this.discordAPI.mjApiImagine(imagine_url, data, headers);
|
res = await this.discordAPI.mjApiImagine(imagine_url, data, headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 错误检查
|
||||||
|
if (res.code == 23) {
|
||||||
|
throw new Error("生图队列已满,请稍后尝试");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res.code != 1 && res.code != 22) {
|
||||||
|
throw new Error("未知错误,可联系管理员排查" + res.description);
|
||||||
|
}
|
||||||
// 创建成功,开始下一个
|
// 创建成功,开始下一个
|
||||||
this.sendChangeMessage({
|
this.sendChangeMessage({
|
||||||
code: 1,
|
code: 1,
|
||||||
@ -406,7 +530,6 @@ export class MJOriginalImageGenerate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let style_ids = await this.pm.GetConfigJson(JSON.stringify(["image_style", []]), false);
|
let style_ids = await this.pm.GetConfigJson(JSON.stringify(["image_style", []]), false);
|
||||||
let image_styles = await ImageStyleDefine.getImageStyleStringByIds(style_ids.data);
|
|
||||||
|
|
||||||
// 替换风格的逻辑
|
// 替换风格的逻辑
|
||||||
let current_task = null;
|
let current_task = null;
|
||||||
@ -419,7 +542,7 @@ export class MJOriginalImageGenerate {
|
|||||||
// 拼接提示词
|
// 拼接提示词
|
||||||
// 图生图的链接
|
// 图生图的链接
|
||||||
// 获取风格词 + 命令后缀
|
// 获取风格词 + 命令后缀
|
||||||
let prompt = " " + image_styles + old_prompt + (mjSetting.image_suffix ? mjSetting.image_suffix : "");
|
let prompt = old_prompt + (mjSetting.image_suffix ? mjSetting.image_suffix : "");
|
||||||
|
|
||||||
// 判断当前生图模式
|
// 判断当前生图模式
|
||||||
let request_model = mjSetting.request_model
|
let request_model = mjSetting.request_model
|
||||||
|
|||||||
@ -62,13 +62,12 @@ export class OriginalImageGenerate {
|
|||||||
let seed = sd_setting.setting.seed;
|
let seed = sd_setting.setting.seed;
|
||||||
|
|
||||||
let style_ids = await this.pm.GetConfigJson(JSON.stringify(["image_style", []]), false);
|
let style_ids = await this.pm.GetConfigJson(JSON.stringify(["image_style", []]), false);
|
||||||
let image_styles = await ImageStyleDefine.getImageStyleStringByIds(style_ids.data);
|
|
||||||
for (let i = 0; i < data.length; i++) {
|
for (let i = 0; i < data.length; i++) {
|
||||||
const element = data[i];
|
const element = data[i];
|
||||||
let adetailer = element.adetailer;
|
let adetailer = element.adetailer;
|
||||||
|
|
||||||
let imageJson = JSON.parse(await fspromises.readFile(path.normalize(element.prompt_json), 'utf-8'));
|
let imageJson = JSON.parse(await fspromises.readFile(path.normalize(element.prompt_json), 'utf-8'));
|
||||||
let prompt = sd_setting.webui.prompt + image_styles + ',' + element.prompt;
|
let prompt = sd_setting.webui.prompt + ',' + element.prompt;
|
||||||
// 添加前缀
|
// 添加前缀
|
||||||
if (prefix_prompt) {
|
if (prefix_prompt) {
|
||||||
prompt = prefix_prompt + ',' + prompt;
|
prompt = prefix_prompt + ',' + prompt;
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import path, { resolve } from "path";
|
|||||||
import { Tools } from "../tools";
|
import { Tools } from "../tools";
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
import { ImageSetting } from "../../define/setting/imageSetting";
|
import { ImageSetting } from "../../define/setting/imageSetting";
|
||||||
import { isEmpty, reject } from "lodash";
|
import { isEmpty } from "lodash";
|
||||||
import { basicApi } from "../../api/apiBasic";
|
import { basicApi } from "../../api/apiBasic";
|
||||||
import sharp from 'sharp';
|
import sharp from 'sharp';
|
||||||
import { file, image } from "../../define/Tools";
|
import { file, image } from "../../define/Tools";
|
||||||
|
|||||||
82
src/main/Public/Prompt.js
Normal file
82
src/main/Public/Prompt.js
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
import { errorMessage, successMessage } from "../generalTools";
|
||||||
|
import { LOGGER_DEFINE } from '../../define/logger_define'
|
||||||
|
import { Setting } from "../setting/setting";
|
||||||
|
|
||||||
|
export class Prompt {
|
||||||
|
constructor() {
|
||||||
|
this.setting = new Setting(global);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有的排序选项
|
||||||
|
*/
|
||||||
|
GetPromptSortOptions() {
|
||||||
|
return successMessage([
|
||||||
|
{
|
||||||
|
label: '人物',
|
||||||
|
value: 'character'
|
||||||
|
}, {
|
||||||
|
label: '场景',
|
||||||
|
value: 'scene'
|
||||||
|
}, {
|
||||||
|
label: '提示词',
|
||||||
|
value: 'prompt'
|
||||||
|
}, {
|
||||||
|
label: '风格',
|
||||||
|
value: 'style'
|
||||||
|
}
|
||||||
|
], null, LOGGER_DEFINE.PROMPT.GET_PROMPT_SORT_OPTIONS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存SD排序的选项
|
||||||
|
* @param {*} value
|
||||||
|
*/
|
||||||
|
async SavePromptSort(value) {
|
||||||
|
try {
|
||||||
|
// 将当前数据保存
|
||||||
|
await this.setting.SaveDefineConfigJsonByProperty(JSON.stringify(['img_base', 'prompt_sort', value]));
|
||||||
|
return successMessage(null, "保存提示词排序顺序成功", LOGGER_DEFINE.PROMPT.SAVE_PROMPT_SORT_DATA);
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage(error.toString(), LOGGER_DEFINE.PROMPT.SAVE_PROMPT_SORT_DATA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前的
|
||||||
|
*/
|
||||||
|
async GetPromptSort() {
|
||||||
|
try {
|
||||||
|
let res = await this.setting.GetDefineConfigJsonByProperty(JSON.stringify(['img_base', 'prompt_sort', false, []]))
|
||||||
|
if (res.code == 0) {
|
||||||
|
throw new Error(res.message);
|
||||||
|
}
|
||||||
|
res = res.data;
|
||||||
|
if (res && res.length == 0) {
|
||||||
|
res = [
|
||||||
|
{
|
||||||
|
label: '风格',
|
||||||
|
value: 'style'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '人物',
|
||||||
|
value: 'character'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '场景',
|
||||||
|
value: 'scene'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '提示词',
|
||||||
|
value: 'prompt'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
return successMessage(res, "获取数据成功", LOGGER_DEFINE.PROMPT.GET_PROMPT_SORT_DATA)
|
||||||
|
} catch (error) {
|
||||||
|
return errorMessage(error.toString(), LOGGER_DEFINE.PROMPT.GET_PROMPT_SORT_DATA)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -110,7 +110,7 @@ export class SD {
|
|||||||
return successMessage(data);
|
return successMessage(data);
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return errorMessage("加载数据失败,错误信息如下:" +error.toString());
|
return errorMessage("加载数据失败,错误信息如下:" + error.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -13,6 +13,8 @@ const execAsync = util.promisify(exec);
|
|||||||
const { v4: uuidv4 } = require('uuid'); // 引入UUID库来生成唯一标识符
|
const { v4: uuidv4 } = require('uuid'); // 引入UUID库来生成唯一标识符
|
||||||
let fspromises = require("fs").promises;
|
let fspromises = require("fs").promises;
|
||||||
import { ImageSetting } from "../../define/setting/imageSetting";
|
import { ImageSetting } from "../../define/setting/imageSetting";
|
||||||
|
import { errorMessage } from "../generalTools";
|
||||||
|
import { LOGGER_DEFINE } from "../../define/logger_define";
|
||||||
|
|
||||||
|
|
||||||
export class ImageGenerate {
|
export class ImageGenerate {
|
||||||
@ -339,7 +341,7 @@ export class ImageGenerate {
|
|||||||
|
|
||||||
// 监听总批次完成
|
// 监听总批次完成
|
||||||
this.global.requestQuene.setBatchCompletionCallback(batch, (failedTasks) => {
|
this.global.requestQuene.setBatchCompletionCallback(batch, (failedTasks) => {
|
||||||
debugger
|
|
||||||
if (failedTasks.length > 0) {
|
if (failedTasks.length > 0) {
|
||||||
let message = `
|
let message = `
|
||||||
批次生成任务都已完成。
|
批次生成任务都已完成。
|
||||||
@ -489,16 +491,10 @@ export class ImageGenerate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
return {
|
return errorMessage("参数错误", LOGGER_DEFINE.GLOBAL.PARAM_ERROR)
|
||||||
code: 0,
|
|
||||||
message: "参数错误"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return {
|
return errorMessage(error.toString(), "imageGenerate_DownloadImageFile");
|
||||||
code: 0,
|
|
||||||
message: error.toString()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -364,8 +364,12 @@ export class VideoGenerate {
|
|||||||
await fspromises.writeFile(project_config_path, JSON.stringify(obj));
|
await fspromises.writeFile(project_config_path, JSON.stringify(obj));
|
||||||
// let task_list = JSON.parse(await fspromises.readFile(path.join(this.global.config.project_path,'scripts/task_')));
|
// let task_list = JSON.parse(await fspromises.readFile(path.join(this.global.config.project_path,'scripts/task_')));
|
||||||
let scriptPath = path.join(define.scripts_path, 'Lai.exe');
|
let scriptPath = path.join(define.scripts_path, 'Lai.exe');
|
||||||
|
let gpu = this.global.gpu.type;
|
||||||
|
if (video_config.libx264) {
|
||||||
|
gpu = "OTHER"
|
||||||
|
}
|
||||||
// 执行生成图片的脚本
|
// 执行生成图片的脚本
|
||||||
let script = `cd "${define.scripts_path}" && "${scriptPath}" -c "${project_config_path.replaceAll('\\', '/')}" "${this.global.gpu.type}"`;
|
let script = `cd "${define.scripts_path}" && "${scriptPath}" -c "${project_config_path.replaceAll('\\', '/')}" "${gpu}"`;
|
||||||
const output = await execAsync(script, { maxBuffer: 1024 * 1024 * 10, encoding: 'utf-8' });
|
const output = await execAsync(script, { maxBuffer: 1024 * 1024 * 10, encoding: 'utf-8' });
|
||||||
if (output.stderr != '') {
|
if (output.stderr != '') {
|
||||||
obj.status = "video_error";
|
obj.status = "video_error";
|
||||||
|
|||||||
@ -382,7 +382,7 @@ function startObserving() {
|
|||||||
if (window.observer) {
|
if (window.observer) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
debugger
|
|
||||||
// 没有开始监听
|
// 没有开始监听
|
||||||
MutationObserverElement();
|
MutationObserverElement();
|
||||||
console.log("开始监听")
|
console.log("开始监听")
|
||||||
|
|||||||
@ -507,7 +507,7 @@ export class DiscordSimple {
|
|||||||
if (window.observer) {
|
if (window.observer) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
debugger
|
|
||||||
// 没有开始监听
|
// 没有开始监听
|
||||||
MutationObserverElement();
|
MutationObserverElement();
|
||||||
console.log("开始监听")
|
console.log("开始监听")
|
||||||
|
|||||||
@ -1052,7 +1052,13 @@ async function StartStoryboarding(value) {
|
|||||||
|
|
||||||
global.newWindow[0].win.webContents.send(DEFINE_STRING.GET_FRAME_RETUN, { code: 1, data: "正在调用进程。请勿关闭程序" })
|
global.newWindow[0].win.webContents.send(DEFINE_STRING.GET_FRAME_RETUN, { code: 1, data: "正在调用进程。请勿关闭程序" })
|
||||||
let cc = `${path.join(define.scripts_path, 'Lai.exe')}`;
|
let cc = `${path.join(define.scripts_path, 'Lai.exe')}`;
|
||||||
let child = spawn(cc, ["-a", value.video_path, frame_path, input_path, value.sensitivity, global.gpu.type], { encoding: 'utf-8' });
|
// 获取生成视频设置
|
||||||
|
let video_config = JSON.parse(await fspromises.readFile(define.video_config, 'utf-8'));
|
||||||
|
let gpu = global.gpu.type;
|
||||||
|
if (video_config.libx264) {
|
||||||
|
gpu = "OTHER";
|
||||||
|
}
|
||||||
|
let child = spawn(cc, ["-a", value.video_path, frame_path, input_path, value.sensitivity, gpu], { encoding: 'utf-8' });
|
||||||
child.on('error', console.error)
|
child.on('error', console.error)
|
||||||
child.stdout.on('data', (data) => {
|
child.stdout.on('data', (data) => {
|
||||||
console.log(data.toString());
|
console.log(data.toString());
|
||||||
|
|||||||
@ -72,8 +72,8 @@ function checkStringValueDeletePrefix(value, prefix) {
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
function successMessage(data, message = null, service = null) {
|
function successMessage(data, message = null, service = null) {
|
||||||
if (service && message) {
|
if (service) {
|
||||||
global.logger.info(service, `成功返回数据`);
|
global.logger.info(service, message ? message : '成功返回数据');
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
code: 1,
|
code: 1,
|
||||||
@ -89,8 +89,8 @@ function successMessage(data, message = null, service = null) {
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
function errorMessage(message, service = null) {
|
function errorMessage(message, service = null) {
|
||||||
if (service && message) {
|
if (service) {
|
||||||
global.logger.error(service, message);
|
global.logger.error(service, message ? message : '未知报错,没有捕获的错误');
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
code: 0,
|
code: 0,
|
||||||
|
|||||||
@ -18,22 +18,9 @@ import { Setting } from './setting/setting.js'
|
|||||||
import { has, isEmpty } from 'lodash'
|
import { has, isEmpty } from 'lodash'
|
||||||
|
|
||||||
// ipc
|
// ipc
|
||||||
import { SettingIpc } from './IPCEvent/settingIpc.js'
|
|
||||||
import { ImageGenerateIpc } from './IPCEvent/imageGenerateIpc.js'
|
|
||||||
import { WritingIpc } from './IPCEvent/writingIpc.js'
|
|
||||||
import { VideoGenerateIpc } from './IPCEvent/videoGenerateIpc'
|
|
||||||
import { TranslateIpc } from './IPCEvent/translateIpc.js'
|
|
||||||
import { GptIpc } from './IPCEvent/gptIpc.js'
|
|
||||||
import { MjIpc } from './IPCEvent/mjIpc.js'
|
|
||||||
import { OriginalImageGenerateIpc } from './IPCEvent/originalImageGenerateIpc'
|
|
||||||
import { SdIpc } from './IPCEvent/sdIpc.js'
|
|
||||||
import { DiscordIpc, RemoveDiscordIpc } from './IPCEvent/discordIpc.js'
|
import { DiscordIpc, RemoveDiscordIpc } from './IPCEvent/discordIpc.js'
|
||||||
import { MainIpc } from './IPCEvent/mainIpc.js'
|
|
||||||
import { GlobalIpc } from "./IPCEvent/globalIpc.js";
|
|
||||||
import { ImageIpc } from "./IPCEvent/imageIpc.js";
|
|
||||||
import { SystemIpc } from "./IPCEvent/system.js";
|
|
||||||
import { system } from "systeminformation";
|
|
||||||
import { Logger } from "./logger.js";
|
import { Logger } from "./logger.js";
|
||||||
|
import { RegisterIpc } from "./IPCEvent/index.js";
|
||||||
|
|
||||||
let tools = new Tools();
|
let tools = new Tools();
|
||||||
let imageGenerate = new ImageGenerate(global);
|
let imageGenerate = new ImageGenerate(global);
|
||||||
@ -226,20 +213,7 @@ app.on('window-all-closed', () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
RegisterIpc(createWindow);
|
||||||
SettingIpc();
|
|
||||||
ImageGenerateIpc();
|
|
||||||
WritingIpc();
|
|
||||||
VideoGenerateIpc();
|
|
||||||
TranslateIpc();
|
|
||||||
GptIpc();
|
|
||||||
SdIpc();
|
|
||||||
MjIpc();
|
|
||||||
MainIpc(createWindow);
|
|
||||||
OriginalImageGenerateIpc();
|
|
||||||
GlobalIpc();
|
|
||||||
ImageIpc();
|
|
||||||
SystemIpc();
|
|
||||||
|
|
||||||
|
|
||||||
ipcMain.handle('dark-mode:toggle', (event, value) => {
|
ipcMain.handle('dark-mode:toggle', (event, value) => {
|
||||||
|
|||||||
@ -317,7 +317,11 @@ export class Setting {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取指定的配置文件里面指定的属性的数据
|
* 获取指定的配置文件里面指定的属性的数据
|
||||||
* @param {*} value
|
* @param {*} value 执行方法必要的信息
|
||||||
|
* 0 define中的指定属性(指定的配置文件)
|
||||||
|
* 1 要获取的什么属性信息 property,property 为null,赶回当前配置文件的所有数据
|
||||||
|
* 2 是不是要校验属性不存在
|
||||||
|
* 3 属性没有找到的默认值
|
||||||
*/
|
*/
|
||||||
async GetDefineConfigJsonByProperty(value) {
|
async GetDefineConfigJsonByProperty(value) {
|
||||||
return ImageSetting.GetDefineConfigJsonByProperty(value);
|
return ImageSetting.GetDefineConfigJsonByProperty(value);
|
||||||
@ -326,6 +330,11 @@ export class Setting {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存指定的配置文件里面指定的属性的数据
|
* 保存指定的配置文件里面指定的属性的数据
|
||||||
|
* @param {*} value
|
||||||
|
* 0 define中的指定属性(指定的配置文件)
|
||||||
|
* 1 要获取的什么属性信息 property,property 为null,赶回当前配置文件的所有数据
|
||||||
|
* 2 要写入的值
|
||||||
|
* 3 是不是要校验属性不存在
|
||||||
*/
|
*/
|
||||||
async SaveDefineConfigJsonByProperty(value) {
|
async SaveDefineConfigJsonByProperty(value) {
|
||||||
return ImageSetting.SaveDefineConfigJsonByProperty(value);
|
return ImageSetting.SaveDefineConfigJsonByProperty(value);
|
||||||
|
|||||||
@ -6,6 +6,8 @@ import { mj } from './mj.js';
|
|||||||
import { sd } from './sd.js';
|
import { sd } from './sd.js';
|
||||||
import { img } from './img.js';
|
import { img } from './img.js';
|
||||||
import { system } from './system.js';
|
import { system } from './system.js';
|
||||||
|
import { setting } from './setting.js'
|
||||||
|
import { prompt } from './prompt.js';
|
||||||
// Custom APIs for renderer
|
// Custom APIs for renderer
|
||||||
|
|
||||||
let events = [];
|
let events = [];
|
||||||
@ -395,19 +397,23 @@ const api = {
|
|||||||
// 打开全局通知框
|
// 打开全局通知框
|
||||||
showGlobalNotificationDialog: (value) => ipcRenderer.send(DEFINE_STRING.SHOW_MAIN_NOTIFICATION, value),
|
showGlobalNotificationDialog: (value) => ipcRenderer.send(DEFINE_STRING.SHOW_MAIN_NOTIFICATION, value),
|
||||||
|
|
||||||
|
// 打开全局的消息框
|
||||||
|
showGlobalMessage: (value) => ipcRenderer.send(DEFINE_STRING.SHOW_GLOABAL_MESSAGE, value),
|
||||||
|
|
||||||
// 知道文件地址,获取文件base64编码
|
// 知道文件地址,获取文件base64编码
|
||||||
GetFileBase64: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.GET_FILE_BASE64, value)),
|
GetFileBase64: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.GET_FILE_BASE64, value)),
|
||||||
|
|
||||||
|
// 打开调试控制台
|
||||||
OpenDevTools: () => ipcRenderer.send(DEFINE_STRING.OPEN_DEV_TOOLS),
|
OpenDevTools: () => ipcRenderer.send(DEFINE_STRING.OPEN_DEV_TOOLS),
|
||||||
|
|
||||||
|
// 打开调试控制台密码
|
||||||
OpenDevToolsPassword: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.OPEN_DEV_TOOLS_PASSWORD, value)),
|
OpenDevToolsPassword: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.OPEN_DEV_TOOLS_PASSWORD, value)),
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use `contextBridge` APIs to expose Electron APIs to
|
|
||||||
// renderer only if context isolation is enabled, otherwise
|
|
||||||
// just add to the DOM global.
|
|
||||||
if (process.contextIsolated) {
|
if (process.contextIsolated) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
contextBridge.exposeInMainWorld('electron', electronAPI)
|
contextBridge.exposeInMainWorld('electron', electronAPI)
|
||||||
contextBridge.exposeInMainWorld('api', api)
|
contextBridge.exposeInMainWorld('api', api)
|
||||||
contextBridge.exposeInMainWorld('mj', mj)
|
contextBridge.exposeInMainWorld('mj', mj)
|
||||||
@ -415,6 +421,8 @@ if (process.contextIsolated) {
|
|||||||
contextBridge.exposeInMainWorld("sd", sd)
|
contextBridge.exposeInMainWorld("sd", sd)
|
||||||
contextBridge.exposeInMainWorld("img", img)
|
contextBridge.exposeInMainWorld("img", img)
|
||||||
contextBridge.exposeInMainWorld("system", system)
|
contextBridge.exposeInMainWorld("system", system)
|
||||||
|
contextBridge.exposeInMainWorld("setting", setting)
|
||||||
|
contextBridge.exposeInMainWorld("pmpt", prompt)
|
||||||
contextBridge.exposeInMainWorld('darkMode', {
|
contextBridge.exposeInMainWorld('darkMode', {
|
||||||
toggle: (value) => ipcRenderer.invoke('dark-mode:toggle', value),
|
toggle: (value) => ipcRenderer.invoke('dark-mode:toggle', value),
|
||||||
})
|
})
|
||||||
@ -429,5 +437,7 @@ if (process.contextIsolated) {
|
|||||||
window.sd = sd;
|
window.sd = sd;
|
||||||
window.img = img;
|
window.img = img;
|
||||||
window.system = system;
|
window.system = system;
|
||||||
|
window.setting = setting;
|
||||||
|
window.pmpt = prompt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -47,6 +47,9 @@ const mj = {
|
|||||||
|
|
||||||
// 获取所有的MJ生图模型
|
// 获取所有的MJ生图模型
|
||||||
GetMJImageRobotModel: async (callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.MJ.GET_MJ_IMAGE_ROBOT_MODEL)),
|
GetMJImageRobotModel: async (callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.MJ.GET_MJ_IMAGE_ROBOT_MODEL)),
|
||||||
|
|
||||||
|
// 自动匹配用户
|
||||||
|
AutoMatchUser: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.MJ.AUTO_MATCH_USER, value)),
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
|||||||
17
src/preload/prompt.js
Normal file
17
src/preload/prompt.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { ipcRenderer } from "electron"
|
||||||
|
import { DEFINE_STRING } from "../define/define_string"
|
||||||
|
|
||||||
|
|
||||||
|
const prompt = {
|
||||||
|
// 获取所有的排序选项
|
||||||
|
GetPromptSortOptions: async (callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.PROMPT.GET_SORT_OPTIONS)),
|
||||||
|
|
||||||
|
// 保存提示词排序数据
|
||||||
|
SavePromptSort: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.PROMPT.SAVE_PROMPT_SORT_DATA, value)),
|
||||||
|
|
||||||
|
// 获取提示词排序数据
|
||||||
|
GetPromptSort: async (callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.PROMPT.GET_PROMPT_SORT_DATA))
|
||||||
|
}
|
||||||
|
export {
|
||||||
|
prompt
|
||||||
|
}
|
||||||
17
src/preload/setting.js
Normal file
17
src/preload/setting.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { ipcRenderer } from "electron"
|
||||||
|
import { DEFINE_STRING } from "../define/define_string"
|
||||||
|
|
||||||
|
|
||||||
|
const setting = {
|
||||||
|
// 获取动态配置的的指定主分类,指定的属性的数据(只是获取动态的,type定死了dynamic)
|
||||||
|
GetDataByTypeAndProperty: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.SETTING.GET_DATA_BY_TYPE_AND_PROPERTY, value)),
|
||||||
|
|
||||||
|
// 保存动态配置的的指定主分类,指定的属性的数据
|
||||||
|
SaveDataByTypeAndProperty: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.SETTING.SAVE_DATA_BY_TYPE_AND_PROPERTY, value)),
|
||||||
|
|
||||||
|
// 删除动态配置的的指定主分类,指定的属性的数据
|
||||||
|
DeleteDataByTypeAndProperty: async (value, callback) => callback(await ipcRenderer.invoke(DEFINE_STRING.SETTING.DELETE_DATA_BY_TYPE_AND_PROPERTY, value)),
|
||||||
|
}
|
||||||
|
export {
|
||||||
|
setting
|
||||||
|
}
|
||||||
@ -43,7 +43,7 @@ export default defineComponent({
|
|||||||
javascript,
|
javascript,
|
||||||
hljs,
|
hljs,
|
||||||
darkTheme,
|
darkTheme,
|
||||||
themeData,
|
themeData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -167,7 +167,7 @@ export default defineComponent({
|
|||||||
* 另存图片的方法
|
* 另存图片的方法
|
||||||
*/
|
*/
|
||||||
async function SaveImage() {
|
async function SaveImage() {
|
||||||
debugger
|
|
||||||
if (isEmpty(save_setting.value.save_folder)) {
|
if (isEmpty(save_setting.value.save_folder)) {
|
||||||
message.error("请选择手动保存的文件夹")
|
message.error("请选择手动保存的文件夹")
|
||||||
return
|
return
|
||||||
|
|||||||
@ -265,7 +265,7 @@ export default defineComponent({
|
|||||||
// 初始化加载项目下面的分镜好的文案
|
// 初始化加载项目下面的分镜好的文案
|
||||||
// 并判断是不是有洗稿后的文件。一并加载
|
// 并判断是不是有洗稿后的文件。一并加载
|
||||||
await window.api.GetProjectWord((value) => {
|
await window.api.GetProjectWord((value) => {
|
||||||
debugger
|
|
||||||
data.value = value.data
|
data.value = value.data
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -358,7 +358,7 @@ export default defineComponent({
|
|||||||
let itemIndex = row.subValue.findIndex((item) => item.id == itemId)
|
let itemIndex = row.subValue.findIndex((item) => item.id == itemId)
|
||||||
let thisIndex = data.value.findIndex((item) => item.id == row.id)
|
let thisIndex = data.value.findIndex((item) => item.id == row.id)
|
||||||
if (itemIndex < 0 && isM) {
|
if (itemIndex < 0 && isM) {
|
||||||
debugger
|
|
||||||
message.error('数据错误')
|
message.error('数据错误')
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -175,7 +175,7 @@ export default defineComponent({
|
|||||||
*/
|
*/
|
||||||
async function GetVideoFile() {
|
async function GetVideoFile() {
|
||||||
await window.api.SelectFile(['mp4'], (value) => {
|
await window.api.SelectFile(['mp4'], (value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
@ -193,7 +193,7 @@ export default defineComponent({
|
|||||||
message.error('选择分镜的视频地址')
|
message.error('选择分镜的视频地址')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
debugger
|
|
||||||
if (
|
if (
|
||||||
toRaw(frameValue.value)
|
toRaw(frameValue.value)
|
||||||
.video_path.split('.')
|
.video_path.split('.')
|
||||||
|
|||||||
@ -244,14 +244,14 @@ export default defineComponent({
|
|||||||
|
|
||||||
// 获取初始化数据(队列任务-这边不能添加)
|
// 获取初始化数据(队列任务-这边不能添加)
|
||||||
await window.api.GetGenerateTaskList((value) => {
|
await window.api.GetGenerateTaskList((value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
data.value = value.data.task_list
|
data.value = value.data.task_list
|
||||||
})
|
})
|
||||||
|
|
||||||
// 监听状态刷新事件
|
// 监听状态刷新事件
|
||||||
window.api.setEventListen([DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH], (value) => {
|
window.api.setEventListen([DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH], (value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
let index = data.value.findIndex((item) => item.id == value.id)
|
let index = data.value.findIndex((item) => item.id == value.id)
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
@ -272,7 +272,7 @@ export default defineComponent({
|
|||||||
async function AutoConditionCheck(e) {
|
async function AutoConditionCheck(e) {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
configRef.value?.validate(async (errors) => {
|
configRef.value?.validate(async (errors) => {
|
||||||
debugger
|
|
||||||
if (errors) {
|
if (errors) {
|
||||||
message.error('请检查必填字段')
|
message.error('请检查必填字段')
|
||||||
return
|
return
|
||||||
@ -301,7 +301,7 @@ export default defineComponent({
|
|||||||
async function ActionTask(e) {
|
async function ActionTask(e) {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
configRef.value?.validate(async (errors) => {
|
configRef.value?.validate(async (errors) => {
|
||||||
debugger
|
|
||||||
console.log(selectRowKeysRef.value)
|
console.log(selectRowKeysRef.value)
|
||||||
if (selectRowKeysRef.value.length <= 0) {
|
if (selectRowKeysRef.value.length <= 0) {
|
||||||
message.error('请选择要操作的任务')
|
message.error('请选择要操作的任务')
|
||||||
|
|||||||
@ -84,7 +84,7 @@ export default defineComponent({
|
|||||||
*/
|
*/
|
||||||
async function DeleteBadPrompt() {
|
async function DeleteBadPrompt() {
|
||||||
await window.api.DeleteBadPrompt((value) => {
|
await window.api.DeleteBadPrompt((value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
|
|||||||
@ -128,7 +128,7 @@ export default defineComponent({
|
|||||||
{
|
{
|
||||||
trigger: 'hover',
|
trigger: 'hover',
|
||||||
disabled: (() => {
|
disabled: (() => {
|
||||||
debugger
|
|
||||||
if (row.status == 'error') {
|
if (row.status == 'error') {
|
||||||
return false
|
return false
|
||||||
} else {
|
} else {
|
||||||
@ -246,7 +246,7 @@ export default defineComponent({
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
await window.api.GetConfigJson(JSON.stringify(['image_style', []]), async (value) => {
|
await window.api.GetConfigJson(JSON.stringify(['image_style', []]), async (value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
@ -266,7 +266,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
// 修改一个
|
// 修改一个
|
||||||
window.api.setEventListen([DEFINE_STRING.IMAGE_TASK_STATUS_REFRESH], (value) => {
|
window.api.setEventListen([DEFINE_STRING.IMAGE_TASK_STATUS_REFRESH], (value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
// 修改当前状态
|
// 修改当前状态
|
||||||
let index = task_list_data.value.findIndex((item) => item.out_folder == value.out_folder)
|
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
|
formValue.value.image_style_list = tmp_arr
|
||||||
await window.api.AddImageTask(toRaw(formValue.value), (value) => {
|
await window.api.AddImageTask(toRaw(formValue.value), (value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
@ -364,7 +364,7 @@ export default defineComponent({
|
|||||||
* 生成全部
|
* 生成全部
|
||||||
*/
|
*/
|
||||||
async function GenerateAllImage() {
|
async function GenerateAllImage() {
|
||||||
debugger
|
|
||||||
// 生成 对应的json 文件
|
// 生成 对应的json 文件
|
||||||
await window.api.AddWebuiJson(async (value) => {
|
await window.api.AddWebuiJson(async (value) => {
|
||||||
console.log(value)
|
console.log(value)
|
||||||
@ -407,7 +407,7 @@ export default defineComponent({
|
|||||||
maskClosable: false,
|
maskClosable: false,
|
||||||
onClose: async () => {
|
onClose: async () => {
|
||||||
// 重新加载数据
|
// 重新加载数据
|
||||||
debugger
|
|
||||||
console.log(selectStyle.value)
|
console.log(selectStyle.value)
|
||||||
let tmp_arr = []
|
let tmp_arr = []
|
||||||
for (let i = 0; i < selectStyle.value.length; i++) {
|
for (let i = 0; i < selectStyle.value.length; i++) {
|
||||||
@ -446,7 +446,7 @@ export default defineComponent({
|
|||||||
async function RemoveImageTask(row) {
|
async function RemoveImageTask(row) {
|
||||||
//`${task_list.out_folder}_${images[0]}`, batch, task_list.out_folder
|
//`${task_list.out_folder}_${images[0]}`, batch, task_list.out_folder
|
||||||
// 停止当前行的生图任务
|
// 停止当前行的生图任务
|
||||||
debugger
|
|
||||||
console.log(row)
|
console.log(row)
|
||||||
await getInitData()
|
await getInitData()
|
||||||
// 判断该当前状态
|
// 判断该当前状态
|
||||||
|
|||||||
@ -578,7 +578,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
// 监听状态更新事件
|
// 监听状态更新事件
|
||||||
window.api.setEventListen([DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH], (value) => {
|
window.api.setEventListen([DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH], (value) => {
|
||||||
debugger;
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
// 修改当前状态
|
// 修改当前状态
|
||||||
let index = data.value.findIndex(item => item.folder == value.out_folder);
|
let index = data.value.findIndex(item => item.folder == value.out_folder);
|
||||||
|
|||||||
@ -26,7 +26,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
window.api.setEventListen([DEFINE_STRING.GET_FRAME_RETUN], (value) => {
|
window.api.setEventListen([DEFINE_STRING.GET_FRAME_RETUN], (value) => {
|
||||||
debugger;
|
|
||||||
code.value = code.value + "\n" + value.data;
|
code.value = code.value + "\n" + value.data;
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@ -77,7 +77,7 @@ export default defineComponent({
|
|||||||
message.error("请输入分镜内容");
|
message.error("请输入分镜内容");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
debugger;
|
|
||||||
// 文案内容
|
// 文案内容
|
||||||
let text_value = inputValue.value.split("\n")
|
let text_value = inputValue.value.split("\n")
|
||||||
// 获取当前项目下面地所有草稿
|
// 获取当前项目下面地所有草稿
|
||||||
|
|||||||
158
src/renderer/src/components/Components/DynamicTagsSelect.vue
Normal file
158
src/renderer/src/components/Components/DynamicTagsSelect.vue
Normal file
@ -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) {
|
setup(props) {
|
||||||
let message = useMessage();
|
let message = useMessage();
|
||||||
debugger;
|
|
||||||
let images = ref(
|
let images = ref(
|
||||||
window.ImageInitData.filter((item) => item.id == window.currentImageId)[0]
|
window.ImageInitData.filter((item) => item.id == window.currentImageId)[0]
|
||||||
.output_list
|
.output_list
|
||||||
@ -232,7 +232,7 @@ export default defineComponent({
|
|||||||
window.api.setEventListen(
|
window.api.setEventListen(
|
||||||
[DEFINE_STRING.REGENERATE_IMAGE_RETUN, window.id],
|
[DEFINE_STRING.REGENERATE_IMAGE_RETUN, window.id],
|
||||||
(value) => {
|
(value) => {
|
||||||
debugger
|
|
||||||
if (value.type != 1) {
|
if (value.type != 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -267,7 +267,7 @@ export default defineComponent({
|
|||||||
* 重绘图片
|
* 重绘图片
|
||||||
*/
|
*/
|
||||||
async function ReGenerateImage(data) {
|
async function ReGenerateImage(data) {
|
||||||
debugger;
|
|
||||||
console.log(data);
|
console.log(data);
|
||||||
let obj = {
|
let obj = {
|
||||||
id: data.id,
|
id: data.id,
|
||||||
@ -305,7 +305,7 @@ export default defineComponent({
|
|||||||
* 获取上一组
|
* 获取上一组
|
||||||
*/
|
*/
|
||||||
function GetLast() {
|
function GetLast() {
|
||||||
debugger;
|
|
||||||
let index = window.ImageInitData.findIndex(
|
let index = window.ImageInitData.findIndex(
|
||||||
(item) => item.id == window.currentImageId
|
(item) => item.id == window.currentImageId
|
||||||
);
|
);
|
||||||
@ -322,7 +322,7 @@ export default defineComponent({
|
|||||||
* 获取下一组
|
* 获取下一组
|
||||||
*/
|
*/
|
||||||
function GetNext() {
|
function GetNext() {
|
||||||
debugger;
|
|
||||||
let index = window.ImageInitData.findIndex(
|
let index = window.ImageInitData.findIndex(
|
||||||
(item) => item.id === window.currentImageId
|
(item) => item.id === window.currentImageId
|
||||||
);
|
);
|
||||||
|
|||||||
@ -63,7 +63,7 @@ export default defineComponent({
|
|||||||
* 删除
|
* 删除
|
||||||
*/
|
*/
|
||||||
async function handleClose(tag) {
|
async function handleClose(tag) {
|
||||||
debugger;
|
|
||||||
// 删除对应的数据
|
// 删除对应的数据
|
||||||
tags.value = tags.value.filter(item => item != tag);
|
tags.value = tags.value.filter(item => item != tag);
|
||||||
show_tags.value = show_tags.value.filter(item => item != tag);
|
show_tags.value = show_tags.value.filter(item => item != tag);
|
||||||
@ -94,7 +94,7 @@ export default defineComponent({
|
|||||||
* 删除所选的tag(全部)
|
* 删除所选的tag(全部)
|
||||||
*/
|
*/
|
||||||
async function DeleteTags() {
|
async function DeleteTags() {
|
||||||
debugger
|
|
||||||
let d_l = toRaw(show_tags.value);
|
let d_l = toRaw(show_tags.value);
|
||||||
for (let i = 0; i < d_l.length; i++) {
|
for (let i = 0; i < d_l.length; i++) {
|
||||||
const element = d_l[i];
|
const element = d_l[i];
|
||||||
|
|||||||
@ -79,7 +79,7 @@ export default defineComponent({
|
|||||||
if (translateMode.value) {
|
if (translateMode.value) {
|
||||||
// 翻译单个。马上返回
|
// 翻译单个。马上返回
|
||||||
await window.api.TranslateReturnNow([tags, 'zh', 'en', true], (value) => {
|
await window.api.TranslateReturnNow([tags, 'zh', 'en', true], (value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message);
|
message.error(value.message);
|
||||||
@ -115,7 +115,7 @@ export default defineComponent({
|
|||||||
* @param {要删除的tag} tag
|
* @param {要删除的tag} tag
|
||||||
*/
|
*/
|
||||||
async function handleClose(tag) {
|
async function handleClose(tag) {
|
||||||
debugger
|
|
||||||
// 删除对应的数据
|
// 删除对应的数据
|
||||||
data.value.chinese_prompt = data.value.chinese_prompt.filter(item => item.src != tag.src);
|
data.value.chinese_prompt = data.value.chinese_prompt.filter(item => item.src != tag.src);
|
||||||
ModifyPrompt();
|
ModifyPrompt();
|
||||||
|
|||||||
@ -176,7 +176,7 @@ export default defineComponent({
|
|||||||
)
|
)
|
||||||
setLayoutHeight('layout_height')
|
setLayoutHeight('layout_height')
|
||||||
await window.api.GetImageStyleMenu((value) => {
|
await window.api.GetImageStyleMenu((value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
@ -197,7 +197,7 @@ export default defineComponent({
|
|||||||
* 菜单选中事件
|
* 菜单选中事件
|
||||||
*/
|
*/
|
||||||
async function SelectMenu(key, item) {
|
async function SelectMenu(key, item) {
|
||||||
debugger
|
|
||||||
current_menu = key
|
current_menu = key
|
||||||
await getStyleImageSubList()
|
await getStyleImageSubList()
|
||||||
}
|
}
|
||||||
@ -214,7 +214,7 @@ export default defineComponent({
|
|||||||
style_image_list.value = tags.value.style_tags
|
style_image_list.value = tags.value.style_tags
|
||||||
} else {
|
} else {
|
||||||
await window.api.getStyleImageSubList(current_menu, (value) => {
|
await window.api.getStyleImageSubList(current_menu, (value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
@ -232,7 +232,7 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function closeTag(image) {
|
async function closeTag(image) {
|
||||||
debugger
|
|
||||||
let index = selectStyle.value.findIndex((item) => item.id == image.id)
|
let index = selectStyle.value.findIndex((item) => item.id == image.id)
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
selectStyle.value.splice(index, 1)
|
selectStyle.value.splice(index, 1)
|
||||||
@ -268,7 +268,7 @@ export default defineComponent({
|
|||||||
handleSelect(key) {
|
handleSelect(key) {
|
||||||
showDropdownRef.value = false
|
showDropdownRef.value = false
|
||||||
if (key == 'selectStyle') {
|
if (key == 'selectStyle') {
|
||||||
debugger
|
|
||||||
// 将当前的风格添加到选择的风格中
|
// 将当前的风格添加到选择的风格中
|
||||||
if (current_img.value) {
|
if (current_img.value) {
|
||||||
selectStyle.value.push(current_img.value)
|
selectStyle.value.push(current_img.value)
|
||||||
|
|||||||
@ -56,7 +56,7 @@ export default defineComponent({
|
|||||||
onMounted(async () => {})
|
onMounted(async () => {})
|
||||||
|
|
||||||
async function closeTag(image) {
|
async function closeTag(image) {
|
||||||
debugger
|
|
||||||
let index = selectStyle.value.findIndex((item) => item.id == image.id)
|
let index = selectStyle.value.findIndex((item) => item.id == image.id)
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
selectStyle.value.splice(index, 1)
|
selectStyle.value.splice(index, 1)
|
||||||
|
|||||||
@ -108,13 +108,10 @@ export default defineComponent({
|
|||||||
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
|
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
|
||||||
maskClosable: false,
|
maskClosable: false,
|
||||||
onClose: async () => {
|
onClose: async () => {
|
||||||
debugger
|
|
||||||
// 判断该管理控制密码是不是正确
|
// 判断该管理控制密码是不是正确
|
||||||
let password = toRaw(key_down_ref.value.data)
|
let password = toRaw(key_down_ref.value.data)
|
||||||
console.log(password)
|
|
||||||
// 将密码进行md5加密
|
// 将密码进行md5加密
|
||||||
let md5_password = MD5(password + DEFINE_STRING.OPEN_DEV_TOOLS).toString()
|
let md5_password = MD5(password + DEFINE_STRING.OPEN_DEV_TOOLS).toString()
|
||||||
console.log(md5_password)
|
|
||||||
window.api.OpenDevToolsPassword(md5_password, (value) => {
|
window.api.OpenDevToolsPassword(md5_password, (value) => {
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
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({
|
dialog.create({
|
||||||
showIcon: false,
|
showIcon: false,
|
||||||
@ -186,7 +196,6 @@ export default defineComponent({
|
|||||||
return false
|
return false
|
||||||
},
|
},
|
||||||
onPositiveClick: async () => {
|
onPositiveClick: async () => {
|
||||||
debugger
|
|
||||||
await new Promise(async (resolve, reject) => {
|
await new Promise(async (resolve, reject) => {
|
||||||
await window.api.CheckMachineId(toRaw(machineRef.value.machineId), (value) => {
|
await window.api.CheckMachineId(toRaw(machineRef.value.machineId), (value) => {
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
|
|||||||
@ -165,7 +165,7 @@ export default defineComponent({
|
|||||||
item.loading = false
|
item.loading = false
|
||||||
item.timedata = new Date().getTime()
|
item.timedata = new Date().getTime()
|
||||||
})
|
})
|
||||||
debugger
|
|
||||||
data.value = value.value
|
data.value = value.value
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -436,7 +436,7 @@ export default defineComponent({
|
|||||||
await window.api.TranslatePrompt(
|
await window.api.TranslatePrompt(
|
||||||
[JSON.stringify([row]), 'en', 'zh', window.id, false],
|
[JSON.stringify([row]), 'en', 'zh', window.id, false],
|
||||||
(value) => {
|
(value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -559,12 +559,12 @@ export default defineComponent({
|
|||||||
})
|
})
|
||||||
|
|
||||||
window.api.setEventListen([DEFINE_STRING.TRANSLATE_RETURN_REFRESH, window.id], (value) => {
|
window.api.setEventListen([DEFINE_STRING.TRANSLATE_RETURN_REFRESH, window.id], (value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error('返回数据错误')
|
message.error('返回数据错误')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
debugger
|
|
||||||
|
|
||||||
// 直接
|
// 直接
|
||||||
let index = data.value.findIndex((item) => item.id == value.rowId)
|
let index = data.value.findIndex((item) => item.id == value.rowId)
|
||||||
@ -620,7 +620,7 @@ export default defineComponent({
|
|||||||
async function TranslatePrompt(translateData, from, to) {
|
async function TranslatePrompt(translateData, from, to) {
|
||||||
console.log(translateData)
|
console.log(translateData)
|
||||||
await window.api.TranslatePrompt([translateData, from, to, window.id, true], (value) => {
|
await window.api.TranslatePrompt([translateData, from, to, window.id, true], (value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -629,7 +629,7 @@ export default defineComponent({
|
|||||||
* 翻译中文到提示词
|
* 翻译中文到提示词
|
||||||
*/
|
*/
|
||||||
async function TranslateChineseToPrompt() {
|
async function TranslateChineseToPrompt() {
|
||||||
debugger
|
|
||||||
// 将当前的prompt和Chinese_prompt中的src全部删除(全部重新翻译)
|
// 将当前的prompt和Chinese_prompt中的src全部删除(全部重新翻译)
|
||||||
let fileterData = []
|
let fileterData = []
|
||||||
for (let i = 0; i < data.value.length; i++) {
|
for (let i = 0; i < data.value.length; i++) {
|
||||||
@ -650,7 +650,7 @@ export default defineComponent({
|
|||||||
let tmp_str = JSON.stringify(fileterData)
|
let tmp_str = JSON.stringify(fileterData)
|
||||||
// 开始调用
|
// 开始调用
|
||||||
await window.api.TranslatePrompt([tmp_str, 'zh', 'en', window.id, true], (value) => {
|
await window.api.TranslatePrompt([tmp_str, 'zh', 'en', window.id, true], (value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -780,7 +780,7 @@ export default defineComponent({
|
|||||||
// 翻译立即返回
|
// 翻译立即返回
|
||||||
// 翻译单个。马上返回
|
// 翻译单个。马上返回
|
||||||
await window.api.TranslateReturnNow([tmp_s, 'en', 'zh', true], (value) => {
|
await window.api.TranslateReturnNow([tmp_s, 'en', 'zh', true], (value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
|
|||||||
@ -3,7 +3,10 @@
|
|||||||
<div style="width: 500px; position: relative">
|
<div style="width: 500px; position: relative">
|
||||||
<n-form ref="formRef" label-placement="top" :model="characterData" :rules="rules">
|
<n-form ref="formRef" label-placement="top" :model="characterData" :rules="rules">
|
||||||
<n-form-item label="人物名称" path="label">
|
<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
|
<n-image
|
||||||
style="position: absolute; left: 520px; top: 0"
|
style="position: absolute; left: 520px; top: 0"
|
||||||
width="120"
|
width="120"
|
||||||
@ -106,7 +109,8 @@ import {
|
|||||||
NFormItem,
|
NFormItem,
|
||||||
NDynamicTags,
|
NDynamicTags,
|
||||||
NInputNumber,
|
NInputNumber,
|
||||||
NSelect
|
NSelect,
|
||||||
|
NCheckbox
|
||||||
} from 'naive-ui'
|
} from 'naive-ui'
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
import { isEmpty } from 'lodash'
|
import { isEmpty } from 'lodash'
|
||||||
@ -120,7 +124,8 @@ export default defineComponent({
|
|||||||
NFormItem,
|
NFormItem,
|
||||||
NDynamicTags,
|
NDynamicTags,
|
||||||
NInputNumber,
|
NInputNumber,
|
||||||
NSelect
|
NSelect,
|
||||||
|
NCheckbox
|
||||||
},
|
},
|
||||||
props: ['currentCharacter', 'initFunc', 'currentTags', 'lora_options'],
|
props: ['currentCharacter', 'initFunc', 'currentTags', 'lora_options'],
|
||||||
setup(props) {
|
setup(props) {
|
||||||
@ -183,7 +188,7 @@ export default defineComponent({
|
|||||||
await window.mj.SaveTagPropertyData(
|
await window.mj.SaveTagPropertyData(
|
||||||
[JSON.stringify(characterData.value), 'character_tags'],
|
[JSON.stringify(characterData.value), 'character_tags'],
|
||||||
(value) => {
|
(value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
@ -275,7 +280,7 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
imageLoading.value = true
|
imageLoading.value = true
|
||||||
await window.sd.txt2img(JSON.stringify([d]), async (value) => {
|
await window.sd.txt2img(JSON.stringify([d]), async (value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
imageLoading.value = false
|
imageLoading.value = false
|
||||||
|
|||||||
@ -55,7 +55,7 @@ export default defineComponent({
|
|||||||
// 开始保存
|
// 开始保存
|
||||||
prefixData.value['type'] = "prefix_main";
|
prefixData.value['type'] = "prefix_main";
|
||||||
await window.mj.SaveTagPropertyData([JSON.stringify(prefixData.value), "prefix_tags"], (value) => {
|
await window.mj.SaveTagPropertyData([JSON.stringify(prefixData.value), "prefix_tags"], (value) => {
|
||||||
debugger;
|
|
||||||
console.log(value);
|
console.log(value);
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message);
|
message.error(value.message);
|
||||||
|
|||||||
@ -1,18 +1,41 @@
|
|||||||
<template>
|
<template>
|
||||||
<div style="width: 500px;">
|
<div style="width: 500px">
|
||||||
<n-form label-placement="top" ref="formRef" :rules="rules" :model="sceneData">
|
<n-form label-placement="top" ref="formRef" :rules="rules" :model="sceneData">
|
||||||
<n-form-item label="场景名称" path="label">
|
<n-form-item label="场景名称" path="label">
|
||||||
<n-input v-model:value="sceneData.label" placeholder="请输入场景名称" />
|
<n-input
|
||||||
</n-form-item>
|
style="width: 400px"
|
||||||
<n-form-item label="场景提示词描述(中文)">
|
v-model:value="sceneData.label"
|
||||||
<n-input type="textarea" :rows="3" v-model:value="sceneData.chinese_prompt" placeholder="请输入场景提示词描述" />
|
placeholder="请输入场景名称"
|
||||||
<n-button type="info" size="small" style="margin-left: 20px;" @click="TranslatePrompt"
|
/>
|
||||||
:loading="loading">翻译提示词</n-button>
|
<n-checkbox style="margin-left: 20px" v-model:checked="sceneData.isShow"
|
||||||
</n-form-item>
|
>显示</n-checkbox
|
||||||
<n-form-item label="场景提示词描述(英文)" path="prompt">
|
>
|
||||||
<n-input type="textarea" :rows="3" v-model:value="sceneData.prompt" placeholder="请输入场景提示词描述" />
|
</n-form-item>
|
||||||
</n-form-item>
|
<n-form-item label="场景提示词描述(中文)">
|
||||||
<!-- <n-form-item label="MJ:风格垫图链接(sref)">
|
<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-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-image v-if="sceneData.image_url" :src="sceneData.image_url" style="width: 80px; height: 80px" />
|
||||||
</n-form-item>
|
</n-form-item>
|
||||||
@ -24,118 +47,145 @@
|
|||||||
<n-input v-model:value="sceneData.lora" placeholder="请输入风格Lora" />
|
<n-input v-model:value="sceneData.lora" placeholder="请输入风格Lora" />
|
||||||
<n-button color="#e18a3b" style="margin-left: 20px;">选择</n-button>
|
<n-button color="#e18a3b" style="margin-left: 20px;">选择</n-button>
|
||||||
</n-form-item> -->
|
</n-form-item> -->
|
||||||
</n-form>
|
</n-form>
|
||||||
|
|
||||||
<div style="text-align: right;">
|
<div style="text-align: right">
|
||||||
<n-button type="success" @click="SaveSceneTag">保存</n-button>
|
<n-button type="success" @click="SaveSceneTag">保存</n-button>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { ref, h, onMounted, defineComponent, toRaw, watch } from "vue"
|
import { ref, h, onMounted, defineComponent, toRaw, watch } from 'vue'
|
||||||
import { NImage, useMessage, NButton, useDialog, NInput, NForm, NFormItem, NDynamicTags, NInputNumber } from "naive-ui";
|
import {
|
||||||
import { v4 as uuidv4 } from "uuid";
|
NImage,
|
||||||
|
useMessage,
|
||||||
|
NButton,
|
||||||
|
useDialog,
|
||||||
|
NInput,
|
||||||
|
NForm,
|
||||||
|
NFormItem,
|
||||||
|
NDynamicTags,
|
||||||
|
NInputNumber,
|
||||||
|
NCheckbox
|
||||||
|
} from 'naive-ui'
|
||||||
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
NImage, NButton, NInput, NForm, NFormItem, NDynamicTags, NInputNumber
|
NImage,
|
||||||
},
|
NButton,
|
||||||
props: ["currentScene", "initFunc"],
|
NInput,
|
||||||
setup(props) {
|
NForm,
|
||||||
let message = useMessage();
|
NFormItem,
|
||||||
let sceneData = ref(props.currentScene);
|
NDynamicTags,
|
||||||
let loading = ref(false);
|
NInputNumber,
|
||||||
let formRef = ref(null)
|
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) => {
|
watch(
|
||||||
sceneData.value = value;
|
() => props.currentScene,
|
||||||
}, { deep: true })
|
(value) => {
|
||||||
|
sceneData.value = value
|
||||||
|
},
|
||||||
|
{ deep: true }
|
||||||
|
)
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {})
|
||||||
|
|
||||||
})
|
// 保存操作
|
||||||
|
async function SaveSceneTag(e) {
|
||||||
// 保存操作
|
e.preventDefault()
|
||||||
async function SaveSceneTag(e) {
|
formRef.value?.validate(async (errors) => {
|
||||||
e.preventDefault();
|
if (errors) {
|
||||||
formRef.value?.validate(async (errors) => {
|
message.error('请检查必填字段')
|
||||||
if (errors) {
|
return
|
||||||
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 TranslatePrompt() {
|
sceneData.value['type'] = 'scene_main'
|
||||||
loading.value = true;
|
await window.mj.SaveTagPropertyData(
|
||||||
if (sceneData.value.chinese_prompt == "" || sceneData.value.chinese_prompt == null) {
|
[JSON.stringify(sceneData.value), 'scene_tags'],
|
||||||
message.error("请输入中文提示词");
|
(value) => {
|
||||||
loading.value = false;
|
|
||||||
return;
|
console.log(value)
|
||||||
|
if (value.code == 0) {
|
||||||
|
message.error(value.message)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
await window.api.TranslateReturnNow([sceneData.value.chinese_prompt, 'zh', 'en', false], (value) => {
|
message.success(value.message)
|
||||||
if (value.code == 0) {
|
//保存成功在initFunc
|
||||||
message.error(value.message);
|
props.initFunc()
|
||||||
return;
|
// 清楚数据
|
||||||
}
|
sceneData.value = {
|
||||||
//
|
label: null,
|
||||||
console.log(value.data);
|
key: null,
|
||||||
sceneData.value.prompt = value.data[0].src;
|
type: 'scene_main',
|
||||||
})
|
prompt: null
|
||||||
loading.value = false;
|
// image_url: null,
|
||||||
}
|
// cref_cw: 20,
|
||||||
|
// lora: null,
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 翻译提示词
|
||||||
|
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(
|
await window.mj.SaveTagPropertyData(
|
||||||
[JSON.stringify(styleData.value), 'style_tags'],
|
[JSON.stringify(styleData.value), 'style_tags'],
|
||||||
(value) => {
|
(value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
@ -246,7 +246,7 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
imageLoading.value = true
|
imageLoading.value = true
|
||||||
await window.sd.txt2img(JSON.stringify([d]), async (value) => {
|
await window.sd.txt2img(JSON.stringify([d]), async (value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
imageLoading.value = false
|
imageLoading.value = false
|
||||||
|
|||||||
@ -55,7 +55,7 @@ export default defineComponent({
|
|||||||
// 开始保存
|
// 开始保存
|
||||||
suffixData.value['type'] = "suffix_main";
|
suffixData.value['type'] = "suffix_main";
|
||||||
await window.mj.SaveTagPropertyData([JSON.stringify(suffixData.value), "suffix_tags"], (value) => {
|
await window.mj.SaveTagPropertyData([JSON.stringify(suffixData.value), "suffix_tags"], (value) => {
|
||||||
debugger;
|
|
||||||
console.log(value);
|
console.log(value);
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message);
|
message.error(value.message);
|
||||||
|
|||||||
@ -90,7 +90,7 @@ export default defineComponent({
|
|||||||
loading.value = true;
|
loading.value = true;
|
||||||
|
|
||||||
await window.api.AutoAnalyzeCharacter(toRaw(word.value), (value) => {
|
await window.api.AutoAnalyzeCharacter(toRaw(word.value), (value) => {
|
||||||
debugger
|
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message);
|
message.error(value.message);
|
||||||
|
|||||||
@ -275,7 +275,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
// 设置标签集的自动高度,传一个外面的高度进来
|
// 设置标签集的自动高度,传一个外面的高度进来
|
||||||
function SetAutoHeight() {
|
function SetAutoHeight() {
|
||||||
debugger
|
|
||||||
let div = document.getElementById('tree_define_content')
|
let div = document.getElementById('tree_define_content')
|
||||||
div.style.height = props.height - 180 + 'px'
|
div.style.height = props.height - 180 + 'px'
|
||||||
}
|
}
|
||||||
@ -318,7 +318,8 @@ export default defineComponent({
|
|||||||
show_image: window.config.space_image,
|
show_image: window.config.space_image,
|
||||||
cref_cw: 50,
|
cref_cw: 50,
|
||||||
lora: '无',
|
lora: '无',
|
||||||
lora_weight: 1
|
lora_weight: 1,
|
||||||
|
isShow: false
|
||||||
}
|
}
|
||||||
currentTags.value = []
|
currentTags.value = []
|
||||||
currentType.value = 'character_main'
|
currentType.value = 'character_main'
|
||||||
@ -335,7 +336,8 @@ export default defineComponent({
|
|||||||
label: null,
|
label: null,
|
||||||
key: uuidv4(),
|
key: uuidv4(),
|
||||||
type: 'scene_main',
|
type: 'scene_main',
|
||||||
prompt: null
|
prompt: null,
|
||||||
|
isShow: false
|
||||||
}
|
}
|
||||||
currentType.value = 'scene_main'
|
currentType.value = 'scene_main'
|
||||||
}
|
}
|
||||||
@ -395,7 +397,7 @@ export default defineComponent({
|
|||||||
function nodeProps({ option }) {
|
function nodeProps({ option }) {
|
||||||
return {
|
return {
|
||||||
onClick() {
|
onClick() {
|
||||||
debugger
|
|
||||||
// 执行切换组件和数据
|
// 执行切换组件和数据
|
||||||
if (option.type == 'style') {
|
if (option.type == 'style') {
|
||||||
currentType.value = 'style'
|
currentType.value = 'style'
|
||||||
@ -421,13 +423,16 @@ export default defineComponent({
|
|||||||
} else if (option.type == 'min') {
|
} else if (option.type == 'min') {
|
||||||
message.error('别名节点不允许操作')
|
message.error('别名节点不允许操作')
|
||||||
} else {
|
} else {
|
||||||
debugger
|
|
||||||
console.log(option)
|
console.log(option)
|
||||||
currentType.value = option.type
|
currentType.value = option.type
|
||||||
// 修改当前属性
|
// 修改当前属性
|
||||||
if (currentType.value.startsWith('character')) {
|
if (currentType.value.startsWith('character')) {
|
||||||
// 修改tags的值
|
// 修改tags的值
|
||||||
currentCharacter.value = option
|
currentCharacter.value = option
|
||||||
|
if(!currentCharacter.value.hasOwnProperty("isShow")){
|
||||||
|
currentCharacter.value.isShow = false
|
||||||
|
}
|
||||||
currentTags.value = option.children.map((item) => {
|
currentTags.value = option.children.map((item) => {
|
||||||
return item.label
|
return item.label
|
||||||
})
|
})
|
||||||
|
|||||||
@ -9,15 +9,42 @@
|
|||||||
v-model:value="title_character_select_model"
|
v-model:value="title_character_select_model"
|
||||||
placeholder="选择模式"
|
placeholder="选择模式"
|
||||||
></n-select>
|
></n-select>
|
||||||
<n-button size="tiny" color="#e18a3b" style="margin-left: 5px" @click="RefreshTagData">
|
<n-popover trigger="hover">
|
||||||
<n-icon>
|
<template #trigger>
|
||||||
<reload />
|
<n-button
|
||||||
</n-icon>
|
text
|
||||||
</n-button>
|
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>
|
||||||
<div v-else-if="type == 'data'">
|
<div v-else-if="type == 'data'">
|
||||||
<div v-if="title_character_select_model == 'tag'">
|
<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>
|
<span>人物:</span>
|
||||||
<n-tag
|
<n-tag
|
||||||
v-for="(character, index) in character_tags"
|
v-for="(character, index) in character_tags"
|
||||||
@ -79,10 +106,21 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { ref, h, onMounted, defineComponent, toRaw, watch } from 'vue'
|
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 { DEFINE_STRING } from '../../../../../define/define_string'
|
||||||
import { cloneDeep, debounce, get, once } from 'lodash'
|
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({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
@ -92,7 +130,9 @@ export default defineComponent({
|
|||||||
NTag,
|
NTag,
|
||||||
NSelect,
|
NSelect,
|
||||||
NIcon,
|
NIcon,
|
||||||
Reload
|
ReloadCircle,
|
||||||
|
ExtensionPuzzle,
|
||||||
|
NPopover
|
||||||
},
|
},
|
||||||
props: ['type', 'row', 'characterSelectModel', 'tags', 'func'],
|
props: ['type', 'row', 'characterSelectModel', 'tags', 'func'],
|
||||||
setup(props) {
|
setup(props) {
|
||||||
@ -103,6 +143,7 @@ export default defineComponent({
|
|||||||
let character_tags = ref([])
|
let character_tags = ref([])
|
||||||
let scene_tags = ref([])
|
let scene_tags = ref([])
|
||||||
let tags = ref(props.tags)
|
let tags = ref(props.tags)
|
||||||
|
let dialog = useDialog()
|
||||||
|
|
||||||
let characterData = ref([])
|
let characterData = ref([])
|
||||||
|
|
||||||
@ -114,7 +155,6 @@ export default defineComponent({
|
|||||||
watch(
|
watch(
|
||||||
() => props.characterSelectModel,
|
() => props.characterSelectModel,
|
||||||
(value) => {
|
(value) => {
|
||||||
debugger
|
|
||||||
// InitData(value);
|
// InitData(value);
|
||||||
if (value.value == 'drop') {
|
if (value.value == 'drop') {
|
||||||
select_character_tags.value = []
|
select_character_tags.value = []
|
||||||
@ -149,7 +189,7 @@ export default defineComponent({
|
|||||||
)
|
)
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
// debugger
|
//
|
||||||
// await InitCharacterAndSceneData()
|
// await InitCharacterAndSceneData()
|
||||||
await window.mj.GetTagSelectModel((value) => {
|
await window.mj.GetTagSelectModel((value) => {
|
||||||
characterSelectMoedlOptions.value = value.data
|
characterSelectMoedlOptions.value = value.data
|
||||||
@ -220,14 +260,24 @@ export default defineComponent({
|
|||||||
* @param {*} tags
|
* @param {*} tags
|
||||||
*/
|
*/
|
||||||
async function InitCharacterAndSceneData() {
|
async function InitCharacterAndSceneData() {
|
||||||
debugger
|
|
||||||
// if (!tags) return
|
// if (!tags) return
|
||||||
character_tags.value = cloneDeep(tags.value.character_tags)
|
character_tags.value = cloneDeep(tags.value.character_tags)
|
||||||
character_tags.value.forEach((item) => {
|
for (let i = 0; i < character_tags.value.length; i++) {
|
||||||
item.children = null
|
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)
|
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_character_tags.value = []
|
||||||
select_scene_tags.value = []
|
select_scene_tags.value = []
|
||||||
// 初始化数据(选择为true)
|
// 初始化数据(选择为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)
|
||||||
|
// 修改当前指定ID的data行
|
||||||
|
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 {
|
return {
|
||||||
characterData,
|
characterData,
|
||||||
row,
|
row,
|
||||||
@ -321,7 +412,8 @@ export default defineComponent({
|
|||||||
title_character_select_model,
|
title_character_select_model,
|
||||||
RefreshTagData,
|
RefreshTagData,
|
||||||
UpdateCharacterSelect,
|
UpdateCharacterSelect,
|
||||||
UpdateSceneSelect
|
UpdateSceneSelect,
|
||||||
|
MatchUser
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -142,7 +142,7 @@ export default defineComponent({
|
|||||||
message.error('当前翻译的数据里面没有中文')
|
message.error('当前翻译的数据里面没有中文')
|
||||||
}
|
}
|
||||||
} else if (key == 'chinese') {
|
} else if (key == 'chinese') {
|
||||||
debugger
|
|
||||||
let t = [[toRaw(row.value)], 'en', 'zh', false, false]
|
let t = [[toRaw(row.value)], 'en', 'zh', false, false]
|
||||||
await window.mj.TranslateReturnNowTask(JSON.stringify(t), (value) => {
|
await window.mj.TranslateReturnNowTask(JSON.stringify(t), (value) => {
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
|
|||||||
@ -66,7 +66,7 @@ export default defineComponent({
|
|||||||
});
|
});
|
||||||
|
|
||||||
async function onUpdateChecked(v) {
|
async function onUpdateChecked(v) {
|
||||||
debugger;
|
|
||||||
row.adetailer = v;
|
row.adetailer = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,23 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-if="type == 'title'">
|
<div v-if="type == 'title'" style="display: flex">
|
||||||
<span style="margin-right: 5px">提示词命令</span>
|
<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-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-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
|
>敏感词检查</n-button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
@ -24,6 +37,10 @@
|
|||||||
<span>粘贴MJ里面的图片链接。自动下载到对应的行。并分割。</span>
|
<span>粘贴MJ里面的图片链接。自动下载到对应的行。并分割。</span>
|
||||||
</n-popover>
|
</n-popover>
|
||||||
|
|
||||||
|
<n-button size="tiny" color="#ee7959" style="margin-right: 5px" @click="SingleMergePrompt"
|
||||||
|
>单句合并</n-button
|
||||||
|
>
|
||||||
|
|
||||||
<n-input
|
<n-input
|
||||||
:status="input_status"
|
:status="input_status"
|
||||||
size="tiny"
|
size="tiny"
|
||||||
@ -37,16 +54,22 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { ref, h, onMounted, defineComponent, toRaw, watch } from 'vue'
|
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 { DEFINE_STRING } from '../../../../../define/define_string'
|
||||||
import InputDialogContent from './InputDialogContent.vue'
|
import InputDialogContent from './InputDialogContent.vue'
|
||||||
|
import { Construct } from '@vicons/ionicons5'
|
||||||
|
import DynamicTagsSelect from '../../Components/DynamicTagsSelect.vue'
|
||||||
|
import { usePromptStore } from '../../../../../stores/prompt'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
NButton,
|
NButton,
|
||||||
NInput,
|
NInput,
|
||||||
NPopover,
|
NPopover,
|
||||||
NDropdown
|
NDropdown,
|
||||||
|
NIcon,
|
||||||
|
Construct,
|
||||||
|
NPopover
|
||||||
},
|
},
|
||||||
props: ['type', 'row', 'index', 'func'],
|
props: ['type', 'row', 'index', 'func'],
|
||||||
setup(props) {
|
setup(props) {
|
||||||
@ -56,10 +79,7 @@ export default defineComponent({
|
|||||||
let row = ref(props.row)
|
let row = ref(props.row)
|
||||||
let input_status = ref('default')
|
let input_status = ref('default')
|
||||||
let image_url_ref = ref(null)
|
let image_url_ref = ref(null)
|
||||||
|
let promptStore = usePromptStore()
|
||||||
// let input_image_
|
|
||||||
|
|
||||||
// 重新计算命令
|
|
||||||
|
|
||||||
// 监听数据变化
|
// 监听数据变化
|
||||||
watch(
|
watch(
|
||||||
@ -140,10 +160,15 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 合并提示词
|
* 合并命令
|
||||||
|
* @param {*} key
|
||||||
*/
|
*/
|
||||||
async function MergePrompt() {
|
async function MergePrompt(key) {
|
||||||
props.func.mergePrompt(null)
|
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`,
|
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
|
||||||
maskClosable: false,
|
maskClosable: false,
|
||||||
onClose: async () => {
|
onClose: async () => {
|
||||||
debugger
|
|
||||||
let row_image_url = image_url_ref.value.data
|
let row_image_url = image_url_ref.value.data
|
||||||
|
|
||||||
// 下载指定的图片地址并且分割
|
// 下载指定的图片地址并且分割
|
||||||
@ -196,7 +220,62 @@ export default defineComponent({
|
|||||||
* @param key
|
* @param key
|
||||||
*/
|
*/
|
||||||
async function MergePromptSelect(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 {
|
return {
|
||||||
@ -213,7 +292,9 @@ export default defineComponent({
|
|||||||
MergePromptOptions: [
|
MergePromptOptions: [
|
||||||
{ label: 'SD模式合并', key: 'sd_merge' },
|
{ label: 'SD模式合并', key: 'sd_merge' },
|
||||||
{ label: 'MJ模式合并', key: 'mj_merge' }
|
{ label: 'MJ模式合并', key: 'mj_merge' }
|
||||||
]
|
],
|
||||||
|
SetMergeModel,
|
||||||
|
SingleMergePrompt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -104,6 +104,8 @@ import {
|
|||||||
NPopover,
|
NPopover,
|
||||||
NTag
|
NTag
|
||||||
} from 'naive-ui'
|
} from 'naive-ui'
|
||||||
|
import { usePromptStore } from '../../../../../stores/prompt'
|
||||||
|
import { useImageStore } from '../../../../../stores/image'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
@ -117,6 +119,8 @@ export default defineComponent({
|
|||||||
},
|
},
|
||||||
props: ['initData', 'type', 'image_generate_category', 'func'],
|
props: ['initData', 'type', 'image_generate_category', 'func'],
|
||||||
setup(props) {
|
setup(props) {
|
||||||
|
let imageStore = useImageStore()
|
||||||
|
let promptStore = usePromptStore()
|
||||||
let message = useMessage()
|
let message = useMessage()
|
||||||
let data = ref(props.initData)
|
let data = ref(props.initData)
|
||||||
let type = ref(props.type)
|
let type = ref(props.type)
|
||||||
@ -167,7 +171,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await window.api.InitSDConfig((value) => {
|
await window.api.InitSDConfig((value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
@ -210,23 +214,24 @@ export default defineComponent({
|
|||||||
e.dataTransfer.effectAllowed = 'move'
|
e.dataTransfer.effectAllowed = 'move'
|
||||||
console.log('move', e.target)
|
console.log('move', e.target)
|
||||||
dragTarget = e.target
|
dragTarget = e.target
|
||||||
|
imageStore.SetDragTarget(e.target)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 图片拖拽结束事件
|
// 图片拖拽结束事件
|
||||||
async function imageDragDrop(e) {
|
async function imageDragDrop(e) {
|
||||||
debugger
|
|
||||||
console.log('end', e.target, dragTarget)
|
console.log('end', e.target, dragTarget)
|
||||||
// 判断原始数据是不是为空
|
// 判断原始数据是不是为空
|
||||||
if (dragTarget == null) {
|
// if (dragTarget == null) {
|
||||||
message.error('只能拖拽到当前行的图片上')
|
// message.error('只能拖拽到当前行的图片上')
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
// 判断结束位置是不是主图片
|
// 判断结束位置是不是主图片
|
||||||
if (e.target.getAttribute('mainImage') != '1') {
|
if (e.target.getAttribute('mainImage') != '1') {
|
||||||
message.error('图片只能拖拽到主图片上')
|
message.error('图片只能拖拽到主图片上')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let source_img = dragTarget.src
|
let source_img = imageStore.GetDragTarget.src
|
||||||
.split('?')[0]
|
.split('?')[0]
|
||||||
.replace(/^file:\/\/\//, '')
|
.replace(/^file:\/\/\//, '')
|
||||||
.replace(/^\//, '')
|
.replace(/^\//, '')
|
||||||
@ -253,6 +258,7 @@ export default defineComponent({
|
|||||||
async function UpdateImageGenerateCategory(value, option) {
|
async function UpdateImageGenerateCategory(value, option) {
|
||||||
// 更新配置文件和缓存
|
// 更新配置文件和缓存
|
||||||
window.config.image_generate_category = value
|
window.config.image_generate_category = value
|
||||||
|
promptStore.UpdateImageGenerateCategory(value)
|
||||||
// 保存文件
|
// 保存文件
|
||||||
await window.api.ModifySampleSetting(
|
await window.api.ModifySampleSetting(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
<n-popover trigger="hover">
|
<n-popover trigger="hover">
|
||||||
<template #trigger>
|
<template #trigger>
|
||||||
<n-input-number
|
<n-input-number
|
||||||
style="margin-left: 10px; width: 130px"
|
style="margin-left: 10px; width: 100px"
|
||||||
size="small"
|
size="small"
|
||||||
placeholder="输入合并的行数"
|
placeholder="输入合并的行数"
|
||||||
:max="10000"
|
:max="10000"
|
||||||
@ -58,6 +58,9 @@
|
|||||||
<n-button color="#80a492" size="small" style="margin-left: 10px" @click="mergeWord"
|
<n-button color="#80a492" size="small" style="margin-left: 10px" @click="mergeWord"
|
||||||
>合并</n-button
|
>合并</n-button
|
||||||
>
|
>
|
||||||
|
<n-button color="#f3a694" size="small" style="margin-left: 10px" @click="CopyWord"
|
||||||
|
>一键复制内容</n-button
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
<n-input
|
<n-input
|
||||||
style="margin-top: 5px"
|
style="margin-top: 5px"
|
||||||
@ -86,7 +89,7 @@ import {
|
|||||||
NInputNumber
|
NInputNumber
|
||||||
} from 'naive-ui'
|
} from 'naive-ui'
|
||||||
import { DEFINE_STRING } from '../../../../../define/define_string'
|
import { DEFINE_STRING } from '../../../../../define/define_string'
|
||||||
import { AddCircleOutline } from '@vicons/ionicons5'
|
import { AddCircleOutline, Copy } from '@vicons/ionicons5'
|
||||||
import InputDialogContent from './InputDialogContent.vue'
|
import InputDialogContent from './InputDialogContent.vue'
|
||||||
import { max } from 'lodash'
|
import { max } from 'lodash'
|
||||||
|
|
||||||
@ -176,13 +179,11 @@ export default defineComponent({
|
|||||||
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
|
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
|
||||||
maskClosable: false,
|
maskClosable: false,
|
||||||
onClose: async () => {
|
onClose: async () => {
|
||||||
debugger
|
|
||||||
write_setting.value.split_char = split_ref.value.data
|
write_setting.value.split_char = split_ref.value.data
|
||||||
// 保存数据
|
// 保存数据
|
||||||
await window.api.SaveDefineConfigJsonByProperty(
|
await window.api.SaveDefineConfigJsonByProperty(
|
||||||
JSON.stringify(['clip_setting', 'write_setting', toRaw(write_setting.value), false]),
|
JSON.stringify(['clip_setting', 'write_setting', toRaw(write_setting.value), false]),
|
||||||
(value) => {
|
(value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
@ -208,7 +209,6 @@ export default defineComponent({
|
|||||||
await window.api.SaveDefineConfigJsonByProperty(
|
await window.api.SaveDefineConfigJsonByProperty(
|
||||||
JSON.stringify(['clip_setting', 'write_setting', toRaw(write_setting.value), false]),
|
JSON.stringify(['clip_setting', 'write_setting', toRaw(write_setting.value), false]),
|
||||||
(value) => {
|
(value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
@ -224,7 +224,6 @@ export default defineComponent({
|
|||||||
* 一键格式化
|
* 一键格式化
|
||||||
*/
|
*/
|
||||||
async function formateWrite() {
|
async function formateWrite() {
|
||||||
debugger
|
|
||||||
let split_arr = Array.from(write_setting.value.split_char)
|
let split_arr = Array.from(write_setting.value.split_char)
|
||||||
split_arr.forEach((item) => {
|
split_arr.forEach((item) => {
|
||||||
let specialCharacters = [
|
let specialCharacters = [
|
||||||
@ -274,6 +273,19 @@ export default defineComponent({
|
|||||||
ChangeWordInput()
|
ChangeWordInput()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 复制数据到剪贴板
|
||||||
|
*/
|
||||||
|
async function CopyWord() {
|
||||||
|
// 获取当前的所有的word
|
||||||
|
try {
|
||||||
|
await navigator.clipboard.writeText(word.value)
|
||||||
|
message.success('复制成功')
|
||||||
|
} catch (error) {
|
||||||
|
message.error('复制失败')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
data,
|
data,
|
||||||
rowCount,
|
rowCount,
|
||||||
@ -285,7 +297,8 @@ export default defineComponent({
|
|||||||
write_setting,
|
write_setting,
|
||||||
mergeCountChange,
|
mergeCountChange,
|
||||||
formateWrite,
|
formateWrite,
|
||||||
mergeWord
|
mergeWord,
|
||||||
|
CopyWord
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -158,7 +158,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
// 设置窗体的高度
|
// 设置窗体的高度
|
||||||
function setHeight() {
|
function setHeight() {
|
||||||
debugger
|
|
||||||
let div = document.getElementById('import_word_and_srt')
|
let div = document.getElementById('import_word_and_srt')
|
||||||
div.style.height = hh + 'px'
|
div.style.height = hh + 'px'
|
||||||
}
|
}
|
||||||
@ -423,7 +423,7 @@ export default defineComponent({
|
|||||||
})
|
})
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
debugger
|
|
||||||
// 先保存单个文件(然后在config文件中指向对应的文件)
|
// 先保存单个文件(然后在config文件中指向对应的文件)
|
||||||
await window.api.OriginalAddWebuiJson(JSON.stringify(data.value), async (value) => {
|
await window.api.OriginalAddWebuiJson(JSON.stringify(data.value), async (value) => {
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
@ -466,7 +466,7 @@ export default defineComponent({
|
|||||||
})
|
})
|
||||||
|
|
||||||
await window.api.ImportSrtAndGetTime([toRaw(data.value), srt_path], (value) => {
|
await window.api.ImportSrtAndGetTime([toRaw(data.value), srt_path], (value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
|
|||||||
@ -252,7 +252,6 @@ export default defineComponent({
|
|||||||
await window.api.GetDefineConfigJsonByProperty(
|
await window.api.GetDefineConfigJsonByProperty(
|
||||||
JSON.stringify(['img_base', 'mj_config', false, null]),
|
JSON.stringify(['img_base', 'mj_config', false, null]),
|
||||||
(value) => {
|
(value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
@ -363,7 +362,6 @@ export default defineComponent({
|
|||||||
|
|
||||||
message.success('保存成功')
|
message.success('保存成功')
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
debugger
|
|
||||||
message.error('保存失败 ' + error.message)
|
message.error('保存失败 ' + error.message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -386,7 +384,6 @@ export default defineComponent({
|
|||||||
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
|
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
|
||||||
maskClosable: false,
|
maskClosable: false,
|
||||||
onClose: async () => {
|
onClose: async () => {
|
||||||
debugger
|
|
||||||
let mj_bad_prompt = bad_prompt_ref.value.data
|
let mj_bad_prompt = bad_prompt_ref.value.data
|
||||||
|
|
||||||
if (mj_bad_prompt == null || mj_bad_prompt == '') {
|
if (mj_bad_prompt == null || mj_bad_prompt == '') {
|
||||||
|
|||||||
@ -24,7 +24,9 @@ import {
|
|||||||
watch,
|
watch,
|
||||||
toRaw,
|
toRaw,
|
||||||
render,
|
render,
|
||||||
onBeforeUnmount
|
onBeforeUnmount,
|
||||||
|
provide,
|
||||||
|
nextTick
|
||||||
} from 'vue'
|
} from 'vue'
|
||||||
import {
|
import {
|
||||||
NDataTable,
|
NDataTable,
|
||||||
@ -36,7 +38,6 @@ import {
|
|||||||
NPopover,
|
NPopover,
|
||||||
useDialog,
|
useDialog,
|
||||||
NCheckbox,
|
NCheckbox,
|
||||||
NSelect,
|
|
||||||
NIcon
|
NIcon
|
||||||
} from 'naive-ui'
|
} from 'naive-ui'
|
||||||
import { DEFINE_STRING } from '../../../../define/define_string'
|
import { DEFINE_STRING } from '../../../../define/define_string'
|
||||||
@ -51,11 +52,14 @@ import DataTableGptPromptRow from './Components/DataTableGptPromptRow.vue'
|
|||||||
import DataTableParameterRow from './Components/DataTableParameterRow.vue'
|
import DataTableParameterRow from './Components/DataTableParameterRow.vue'
|
||||||
import { Reload } from '@vicons/ionicons5'
|
import { Reload } from '@vicons/ionicons5'
|
||||||
import {
|
import {
|
||||||
|
checkStringValueDeletePrefix,
|
||||||
checkStringValueAddPrefix,
|
checkStringValueAddPrefix,
|
||||||
checkStringValueAddSuffix,
|
checkStringValueAddSuffix,
|
||||||
checkStringValueDeletePrefix
|
checkStringValueDeleteSuffix
|
||||||
} from '../../../../main/generalTools'
|
} from '../../../../main/generalTools'
|
||||||
|
|
||||||
|
import { usePromptStore } from '../../../../stores/prompt'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
NImage,
|
NImage,
|
||||||
@ -70,9 +74,9 @@ export default defineComponent({
|
|||||||
Reload,
|
Reload,
|
||||||
NIcon
|
NIcon
|
||||||
},
|
},
|
||||||
props: ['initData', 'prefix_prompt', 'suffix_prompt', 'tags', 'InitTags'],
|
props: ['initData', 'tags', 'InitTags'],
|
||||||
setup(props) {
|
setup(props) {
|
||||||
console.log('输出文件夹位置', props.initData)
|
let promptStore = usePromptStore()
|
||||||
let data = ref(props.initData)
|
let data = ref(props.initData)
|
||||||
let tags = ref(props.tags)
|
let tags = ref(props.tags)
|
||||||
let message = useMessage()
|
let message = useMessage()
|
||||||
@ -80,8 +84,6 @@ export default defineComponent({
|
|||||||
let selectKey = ref([])
|
let selectKey = ref([])
|
||||||
let promptChineseRef = ref(null)
|
let promptChineseRef = ref(null)
|
||||||
let maxHeight = 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 titleCharacterAndSceneRef = ref(null)
|
||||||
let dataCharacterAndSceneRef = ref(null)
|
let dataCharacterAndSceneRef = ref(null)
|
||||||
@ -96,6 +98,9 @@ export default defineComponent({
|
|||||||
let AutoSaveDataJsonDebounced = debounce(AutoSaveDataJson, 3000)
|
let AutoSaveDataJsonDebounced = debounce(AutoSaveDataJson, 3000)
|
||||||
let SaveDataJsonDebounced = debounce(AutoSaveDataJson, 1000)
|
let SaveDataJsonDebounced = debounce(AutoSaveDataJson, 1000)
|
||||||
|
|
||||||
|
promptStore.UpdateImageGenerateCategory(
|
||||||
|
window.config.image_generate_category ? window.config.image_generate_category : 'sd'
|
||||||
|
)
|
||||||
let image_generate_category = ref(
|
let image_generate_category = ref(
|
||||||
window.config.image_generate_category ? window.config.image_generate_category : 'sd'
|
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]
|
selectStyle.value[i] = tags.value.style_tags[index]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{ deep: true }
|
|
||||||
)
|
|
||||||
|
|
||||||
watch(
|
// 修改store中的数据
|
||||||
() => props.prefix_prompt,
|
promptStore.UpdateSelectStyleSort(toRaw(selectStyle.value))
|
||||||
(newVal) => {
|
|
||||||
prefix_prompt.value = newVal
|
|
||||||
},
|
|
||||||
{ deep: true }
|
|
||||||
)
|
|
||||||
|
|
||||||
watch(
|
|
||||||
() => props.suffix_prompt,
|
|
||||||
(newVal) => {
|
|
||||||
suffix_prompt.value = newVal
|
|
||||||
},
|
},
|
||||||
{ deep: true }
|
{ deep: true }
|
||||||
)
|
)
|
||||||
@ -210,20 +202,25 @@ export default defineComponent({
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
message.error('人物角色刷新失败,请重试' + error.toString())
|
message.error('人物角色刷新失败,请重试' + error.toString())
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
getData: GetData,
|
||||||
|
modifyData: ModifyData
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
className: 'prompt_row',
|
className: 'prompt_row',
|
||||||
key: 'character',
|
key: 'character',
|
||||||
width: '200',
|
width: '210',
|
||||||
render(row, index) {
|
render(row, index) {
|
||||||
return h(DataTableCharacterAndScene, {
|
return h(DataTableCharacterAndScene, {
|
||||||
ref: dataCharacterAndSceneRef,
|
ref: dataCharacterAndSceneRef,
|
||||||
type: 'data',
|
type: 'data',
|
||||||
row: row,
|
row: row,
|
||||||
tags: tags,
|
tags: tags,
|
||||||
characterSelectModel: characterSelectModel
|
characterSelectModel: characterSelectModel,
|
||||||
|
func: {
|
||||||
|
getData: GetData
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -268,6 +265,8 @@ export default defineComponent({
|
|||||||
index: index,
|
index: index,
|
||||||
func: {
|
func: {
|
||||||
mJBadPromptCheck: MJBadPromptCheck,
|
mJBadPromptCheck: MJBadPromptCheck,
|
||||||
|
modifyData: ModifyData,
|
||||||
|
getData: GetData,
|
||||||
mergePrompt: MergePrompt
|
mergePrompt: MergePrompt
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -281,7 +280,10 @@ export default defineComponent({
|
|||||||
row: row,
|
row: row,
|
||||||
index: index,
|
index: index,
|
||||||
func: {
|
func: {
|
||||||
nextGenerateImage: NextGenerateImage
|
nextGenerateImage: NextGenerateImage,
|
||||||
|
modifyData: ModifyData,
|
||||||
|
getData: GetData,
|
||||||
|
mergePrompt: MergePrompt
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -292,15 +294,14 @@ export default defineComponent({
|
|||||||
return h(DataTableParameterRow, {
|
return h(DataTableParameterRow, {
|
||||||
type: 'title',
|
type: 'title',
|
||||||
row: row,
|
row: row,
|
||||||
index: index,
|
index: index
|
||||||
image_generate_category: image_generate_category
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
key: 'parameter',
|
key: 'parameter',
|
||||||
width: '130',
|
width: '130',
|
||||||
render(row, index) {
|
render(row, index) {
|
||||||
return h(DataTableParameterRow, {
|
return h(DataTableParameterRow, {
|
||||||
type: `data_${image_generate_category.value}`,
|
type: `data_${promptStore.GetImageGenerateCategory}`,
|
||||||
row: row,
|
row: row,
|
||||||
index: index
|
index: index
|
||||||
})
|
})
|
||||||
@ -352,7 +353,6 @@ export default defineComponent({
|
|||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
// 直接或整个cinfig文件
|
// 直接或整个cinfig文件
|
||||||
await window.api.GetConfigJson(JSON.stringify([null, {}]), async (value) => {
|
await window.api.GetConfigJson(JSON.stringify([null, {}]), async (value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
@ -374,6 +374,7 @@ export default defineComponent({
|
|||||||
type: 'style_main'
|
type: 'style_main'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
promptStore.UpdateSelectStyleSort(toRaw(selectStyle.value))
|
||||||
})
|
})
|
||||||
|
|
||||||
// 判断data中的数据是不是有chinese text
|
// 判断data中的数据是不是有chinese text
|
||||||
@ -396,7 +397,6 @@ export default defineComponent({
|
|||||||
window.api.setEventListen(
|
window.api.setEventListen(
|
||||||
[DEFINE_STRING.SD_ORIGINAL_GENERATE_IMAGE_RETURN, window.id],
|
[DEFINE_STRING.SD_ORIGINAL_GENERATE_IMAGE_RETURN, window.id],
|
||||||
(value) => {
|
(value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error('生成图片错误,错误信息如下:' + value.message)
|
message.error('生成图片错误,错误信息如下:' + value.message)
|
||||||
return
|
return
|
||||||
@ -437,6 +437,9 @@ export default defineComponent({
|
|||||||
|
|
||||||
onBeforeUnmount(async () => {
|
onBeforeUnmount(async () => {
|
||||||
await AutoSaveDataJson()
|
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的修改信息
|
// 接收Discord的修改信息
|
||||||
@ -456,7 +459,6 @@ export default defineComponent({
|
|||||||
|
|
||||||
// 处理数据
|
// 处理数据
|
||||||
if (value.type == 'created') {
|
if (value.type == 'created') {
|
||||||
debugger
|
|
||||||
console.log('接收Discord的创建消息', value)
|
console.log('接收Discord的创建消息', value)
|
||||||
// 找到对应ID的data数据
|
// 找到对应ID的data数据
|
||||||
|
|
||||||
@ -554,7 +556,6 @@ export default defineComponent({
|
|||||||
async function TranslatePrompt(translateData, from, to) {
|
async function TranslatePrompt(translateData, from, to) {
|
||||||
console.log(translateData)
|
console.log(translateData)
|
||||||
await window.api.TranslatePrompt([translateData, from, to, window.id, true], (value) => {
|
await window.api.TranslatePrompt([translateData, from, to, window.id, true], (value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -583,13 +584,14 @@ export default defineComponent({
|
|||||||
content: () =>
|
content: () =>
|
||||||
h(InputDialogContent, {
|
h(InputDialogContent, {
|
||||||
ref: prefix_prompt_ref,
|
ref: prefix_prompt_ref,
|
||||||
initData: prefix_prompt.value,
|
initData: promptStore.GetPrefix,
|
||||||
placeholder: '请输入前缀'
|
placeholder: '请输入前缀'
|
||||||
}),
|
}),
|
||||||
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
|
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
|
||||||
maskClosable: false,
|
maskClosable: false,
|
||||||
onClose: async () => {
|
onClose: async () => {
|
||||||
prefix_prompt.value = prefix_prompt_ref.value.data
|
let prefix = prefix_prompt_ref.value.data
|
||||||
|
promptStore.UpdatePrefix(prefix)
|
||||||
// 保存通用前缀
|
// 保存通用前缀
|
||||||
await window.api.SaveCopywritingInformation(
|
await window.api.SaveCopywritingInformation(
|
||||||
[prefix_prompt_ref.value.data, 'prefix_prompt', false],
|
[prefix_prompt_ref.value.data, 'prefix_prompt', false],
|
||||||
@ -608,7 +610,6 @@ export default defineComponent({
|
|||||||
* 选择生成图片的风格
|
* 选择生成图片的风格
|
||||||
*/
|
*/
|
||||||
async function SelectGenerateImagesStyle() {
|
async function SelectGenerateImagesStyle() {
|
||||||
debugger
|
|
||||||
// 判断当前数据是不是存在
|
// 判断当前数据是不是存在
|
||||||
// 处理数据。获取当前的所有的数据
|
// 处理数据。获取当前的所有的数据
|
||||||
let dialogWidth = window.innerWidth * 0.8
|
let dialogWidth = window.innerWidth * 0.8
|
||||||
@ -632,7 +633,6 @@ export default defineComponent({
|
|||||||
let cus_arr = []
|
let cus_arr = []
|
||||||
|
|
||||||
for (let i = 0; i < selectStyle.value.length; i++) {
|
for (let i = 0; i < selectStyle.value.length; i++) {
|
||||||
debugger
|
|
||||||
const element = selectStyle.value[i]
|
const element = selectStyle.value[i]
|
||||||
// 判断是不是主风格
|
// 判断是不是主风格
|
||||||
if (element.type == 'style_main') {
|
if (element.type == 'style_main') {
|
||||||
@ -680,13 +680,14 @@ export default defineComponent({
|
|||||||
content: () =>
|
content: () =>
|
||||||
h(InputDialogContent, {
|
h(InputDialogContent, {
|
||||||
ref: suffix_prompt_ref,
|
ref: suffix_prompt_ref,
|
||||||
initData: suffix_prompt.value,
|
initData: promptStore.GetSuffix,
|
||||||
placeholder: '请输入后缀'
|
placeholder: '请输入后缀'
|
||||||
}),
|
}),
|
||||||
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
|
style: `width : ${dialogWidth}px; min-height : ${dialogHeight}px`,
|
||||||
maskClosable: false,
|
maskClosable: false,
|
||||||
onClose: async () => {
|
onClose: async () => {
|
||||||
suffix_prompt.value = suffix_prompt_ref.value.data
|
let suffix = suffix_prompt_ref.value.data
|
||||||
|
promptStore.UpdateSuffix(suffix)
|
||||||
await window.api.SaveCopywritingInformation(
|
await window.api.SaveCopywritingInformation(
|
||||||
[suffix_prompt_ref.value.data, 'suffix_prompt', false],
|
[suffix_prompt_ref.value.data, 'suffix_prompt', false],
|
||||||
(value) => {
|
(value) => {
|
||||||
@ -709,7 +710,7 @@ export default defineComponent({
|
|||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
debugger
|
|
||||||
// 先将所有的数据设置为false
|
// 先将所有的数据设置为false
|
||||||
for (let i = 0; i < data.value.length; i++) {
|
for (let i = 0; i < data.value.length; i++) {
|
||||||
data.value[i].mj_message = data.value[i].mj_message ? data.value[i].mj_message : {}
|
data.value[i].mj_message = data.value[i].mj_message ? data.value[i].mj_message : {}
|
||||||
@ -838,7 +839,6 @@ export default defineComponent({
|
|||||||
* @param {*} key 翻译的类型
|
* @param {*} key 翻译的类型
|
||||||
*/
|
*/
|
||||||
async function TranslateAll(key) {
|
async function TranslateAll(key) {
|
||||||
debugger
|
|
||||||
// 将中文翻译成英文
|
// 将中文翻译成英文
|
||||||
if (key == 'english') {
|
if (key == 'english') {
|
||||||
let tmp_d = []
|
let tmp_d = []
|
||||||
@ -859,7 +859,6 @@ export default defineComponent({
|
|||||||
message.success('添加翻译任务成功')
|
message.success('添加翻译任务成功')
|
||||||
})
|
})
|
||||||
} else if (key == 'chinese') {
|
} else if (key == 'chinese') {
|
||||||
debugger
|
|
||||||
let t = [[...toRaw(data.value)], 'en', 'zh', false, false]
|
let t = [[...toRaw(data.value)], 'en', 'zh', false, false]
|
||||||
await window.mj.TranslateReturnNowTask(JSON.stringify(t), (value) => {
|
await window.mj.TranslateReturnNowTask(JSON.stringify(t), (value) => {
|
||||||
if (value.code == 0) {
|
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() {
|
async function OneSplitFour() {
|
||||||
debugger
|
|
||||||
// 判断当前的data中是不是都有图片
|
// 判断当前的data中是不是都有图片
|
||||||
let min
|
let min
|
||||||
let pra = []
|
let pra = []
|
||||||
@ -1138,7 +967,6 @@ export default defineComponent({
|
|||||||
|
|
||||||
// 将当前数据传到后端进行一拆四
|
// 将当前数据传到后端进行一拆四
|
||||||
await window.img.OneSplitFour(JSON.stringify([pra, min]), (value) => {
|
await window.img.OneSplitFour(JSON.stringify([pra, min]), (value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error('一拆四失败,错误信息如下:' + value.message)
|
message.error('一拆四失败,错误信息如下:' + value.message)
|
||||||
return
|
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 {
|
||||||
|
// 判断当前是不是又id,有ID的话就是单个数据,没有ID的话就要全部处理
|
||||||
|
// 获取当前选中的样式
|
||||||
|
|
||||||
|
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
|
||||||
|
// 找到对应的Id的data
|
||||||
|
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 {
|
return {
|
||||||
data,
|
data,
|
||||||
columns: createColumns({}),
|
columns: createColumns({}),
|
||||||
@ -1161,9 +1240,9 @@ export default defineComponent({
|
|||||||
prefix_prompt_ref,
|
prefix_prompt_ref,
|
||||||
suffix_prompt_ref,
|
suffix_prompt_ref,
|
||||||
characterSelectModel,
|
characterSelectModel,
|
||||||
image_generate_category,
|
|
||||||
titleCharacterAndSceneRef,
|
titleCharacterAndSceneRef,
|
||||||
dataCharacterAndSceneRef
|
dataCharacterAndSceneRef,
|
||||||
|
image_generate_category
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -9,13 +9,7 @@
|
|||||||
</MenuButton>
|
</MenuButton>
|
||||||
</div>
|
</div>
|
||||||
<div id="data-table" style="margin-top: 10px">
|
<div id="data-table" style="margin-top: 10px">
|
||||||
<DataTable
|
<DataTable :tags="tags" :initData="data" :InitTags="InitTags"></DataTable>
|
||||||
:tags="tags"
|
|
||||||
:initData="data"
|
|
||||||
:suffix_prompt="suffix_prompt"
|
|
||||||
:prefix_prompt="prefix_prompt"
|
|
||||||
:InitTags="InitTags"
|
|
||||||
></DataTable>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -25,6 +19,7 @@ import { NImage, useMessage } from 'naive-ui'
|
|||||||
import { DEFINE_STRING } from '../../../../define/define_string'
|
import { DEFINE_STRING } from '../../../../define/define_string'
|
||||||
import MenuButton from './MenuButton.vue'
|
import MenuButton from './MenuButton.vue'
|
||||||
import DataTable from './DataTable.vue'
|
import DataTable from './DataTable.vue'
|
||||||
|
import { usePromptStore } from '../../../../stores/prompt'
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
@ -33,16 +28,16 @@ export default defineComponent({
|
|||||||
MenuButton
|
MenuButton
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
|
let promptStore = usePromptStore()
|
||||||
let message = useMessage()
|
let message = useMessage()
|
||||||
let data = ref([])
|
let data = ref([])
|
||||||
let tags = ref({})
|
let tags = ref({})
|
||||||
let AnalyzeCharacter = ref('')
|
let AnalyzeCharacter = ref('')
|
||||||
let TagTreeData = ref([])
|
let TagTreeData = ref([])
|
||||||
let suffix_prompt = ref(null)
|
|
||||||
let prefix_prompt = ref(null)
|
|
||||||
let promptError = true
|
let promptError = true
|
||||||
|
|
||||||
async function InitData() {
|
async function InitData() {
|
||||||
|
|
||||||
// 加载
|
// 加载
|
||||||
// 初始化加载项目下面的分镜好的文案
|
// 初始化加载项目下面的分镜好的文案
|
||||||
// 并判断是不是有洗稿后的文件。一并加载
|
// 并判断是不是有洗稿后的文件。一并加载
|
||||||
@ -65,20 +60,18 @@ export default defineComponent({
|
|||||||
|
|
||||||
// 判断是不是有前缀
|
// 判断是不是有前缀
|
||||||
await window.api.GetConfigJson(JSON.stringify([null, {}]), async (value) => {
|
await window.api.GetConfigJson(JSON.stringify([null, {}]), async (value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
suffix_prompt.value = value.data.suffix_prompt
|
promptStore.UpdateSuffix(value.data.suffix_prompt)
|
||||||
prefix_prompt.value = value.data.prefix_prompt
|
promptStore.UpdatePrefix(value.data.prefix_prompt)
|
||||||
})
|
})
|
||||||
|
|
||||||
// 读取data数据对应的prompt文件
|
// 读取data数据对应的prompt文件
|
||||||
for (let i = 0; i < data.value.length; i++) {
|
for (let i = 0; i < data.value.length; i++) {
|
||||||
const item = data.value[i]
|
const item = data.value[i]
|
||||||
await window.api.GetPromptJson(item.name, (value) => {
|
await window.api.GetPromptJson(item.name, (value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
if (value.code == 0 && promptError) {
|
if (value.code == 0 && promptError) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
@ -98,7 +91,7 @@ export default defineComponent({
|
|||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
debugger
|
|
||||||
tags.value = value.data
|
tags.value = value.data
|
||||||
// 加载完毕之后,需要刷新当前的data中的tag数据
|
// 加载完毕之后,需要刷新当前的data中的tag数据
|
||||||
console.log(data, tags)
|
console.log(data, tags)
|
||||||
@ -112,7 +105,9 @@ export default defineComponent({
|
|||||||
// 循环判断当前的character_tags对应的key在tags.character_tags中是否存在,存在覆盖,不存在删除
|
// 循环判断当前的character_tags对应的key在tags.character_tags中是否存在,存在覆盖,不存在删除
|
||||||
for (let j = element.character_tags.length - 1; j >= 0; j--) {
|
for (let j = element.character_tags.length - 1; j >= 0; j--) {
|
||||||
const item = element.character_tags[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) {
|
if (index != -1) {
|
||||||
element.character_tags[j] = tags.value.character_tags[index]
|
element.character_tags[j] = tags.value.character_tags[index]
|
||||||
} else {
|
} 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 () => {
|
onMounted(async () => {
|
||||||
await InitData()
|
await InitData()
|
||||||
await InitTags()
|
await InitTags()
|
||||||
|
await InItPromptSort()
|
||||||
})
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
data,
|
data,
|
||||||
AnalyzeCharacter,
|
AnalyzeCharacter,
|
||||||
TagTreeData,
|
TagTreeData,
|
||||||
prefix_prompt,
|
|
||||||
suffix_prompt,
|
|
||||||
InitData,
|
InitData,
|
||||||
InitTags,
|
InitTags,
|
||||||
tags
|
tags
|
||||||
|
|||||||
@ -324,7 +324,7 @@ export default defineComponent({
|
|||||||
)
|
)
|
||||||
} else if (value == 'resetPrompt') {
|
} else if (value == 'resetPrompt') {
|
||||||
// 重置提示词
|
// 重置提示词
|
||||||
debugger
|
|
||||||
console.log(data)
|
console.log(data)
|
||||||
await ResetPrompt()
|
await ResetPrompt()
|
||||||
} else if (value == 'resetImage') {
|
} else if (value == 'resetImage') {
|
||||||
@ -349,7 +349,7 @@ export default defineComponent({
|
|||||||
auto_save,
|
auto_save,
|
||||||
railStyle,
|
railStyle,
|
||||||
AutoSaveUpdate: (value) => {
|
AutoSaveUpdate: (value) => {
|
||||||
debugger
|
|
||||||
auto_save.value = value
|
auto_save.value = value
|
||||||
window.config.auto_save = value
|
window.config.auto_save = value
|
||||||
},
|
},
|
||||||
|
|||||||
@ -191,7 +191,7 @@ export default defineComponent({
|
|||||||
* 获取温馨提示列表(右上角)
|
* 获取温馨提示列表(右上角)
|
||||||
*/
|
*/
|
||||||
async function getFriendlyReminderList() {
|
async function getFriendlyReminderList() {
|
||||||
debugger;
|
|
||||||
friendlyReminderData.value = [];
|
friendlyReminderData.value = [];
|
||||||
await window.api.getFriendlyReminderList((value) => {
|
await window.api.getFriendlyReminderList((value) => {
|
||||||
friendlyReminderData.value = value.value.filter(item => item.id != "0" && item.id != "1")
|
friendlyReminderData.value = value.value.filter(item => item.id != "0" && item.id != "1")
|
||||||
@ -203,7 +203,7 @@ export default defineComponent({
|
|||||||
*/
|
*/
|
||||||
async function GetFriendlyReminder() {
|
async function GetFriendlyReminder() {
|
||||||
let friendlyReminderSelectDraft_name = friendlyReminderSelectDraft.value.draf_name;
|
let friendlyReminderSelectDraft_name = friendlyReminderSelectDraft.value.draf_name;
|
||||||
debugger;
|
|
||||||
console.log(friendlyReminderSelectDraft_name);
|
console.log(friendlyReminderSelectDraft_name);
|
||||||
if (friendlyReminderTextName.value == "" || friendlyReminderTextName.value == null || friendlyReminderSelectDraft_name == "" || friendlyReminderSelectDraft_name == null) {
|
if (friendlyReminderTextName.value == "" || friendlyReminderTextName.value == null || friendlyReminderSelectDraft_name == "" || friendlyReminderSelectDraft_name == null) {
|
||||||
message.error("请选择草稿地址和名称");
|
message.error("请选择草稿地址和名称");
|
||||||
|
|||||||
@ -120,7 +120,7 @@ export default defineComponent({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await window.api.GenerateGptExampleOut(JSON.stringify(toRaw(prompt_data.value)), (value) => {
|
await window.api.GenerateGptExampleOut(JSON.stringify(toRaw(prompt_data.value)), (value) => {
|
||||||
debugger;
|
|
||||||
console.log(value);
|
console.log(value);
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message);
|
message.error(value.message);
|
||||||
@ -134,7 +134,7 @@ export default defineComponent({
|
|||||||
* 添加提示词案例输出数据
|
* 添加提示词案例输出数据
|
||||||
*/
|
*/
|
||||||
async function AddExamplePrompt() {
|
async function AddExamplePrompt() {
|
||||||
debugger;
|
|
||||||
let last_data = prompt_data.value.prompt_example[prompt_data.value.prompt_example.length - 1];
|
let last_data = prompt_data.value.prompt_example[prompt_data.value.prompt_example.length - 1];
|
||||||
if (last_data != null) {
|
if (last_data != null) {
|
||||||
if (isEmpty(last_data.user_content)) {
|
if (isEmpty(last_data.user_content)) {
|
||||||
@ -156,7 +156,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
// 删除案例输出
|
// 删除案例输出
|
||||||
async function DeleteExampleOut(example, index) {
|
async function DeleteExampleOut(example, index) {
|
||||||
debugger;
|
|
||||||
if (index > prompt_data.value.prompt_example.length - 1) {
|
if (index > prompt_data.value.prompt_example.length - 1) {
|
||||||
message.error("删除的案例不存在");
|
message.error("删除的案例不存在");
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -241,7 +241,7 @@ export default defineComponent({
|
|||||||
let mj_api_options = ref([])
|
let mj_api_options = ref([])
|
||||||
|
|
||||||
let image_suffix = computed(() => {
|
let image_suffix = computed(() => {
|
||||||
debugger
|
|
||||||
let text = image_model_options.value.findIndex((item) => {
|
let text = image_model_options.value.findIndex((item) => {
|
||||||
return item.value == mjSetting.value.image_model
|
return item.value == mjSetting.value.image_model
|
||||||
})
|
})
|
||||||
@ -262,7 +262,7 @@ export default defineComponent({
|
|||||||
await window.api.GetDefineConfigJsonByProperty(
|
await window.api.GetDefineConfigJsonByProperty(
|
||||||
JSON.stringify(['img_base', 'mj_config', false, null]),
|
JSON.stringify(['img_base', 'mj_config', false, null]),
|
||||||
(value) => {
|
(value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
@ -393,7 +393,7 @@ export default defineComponent({
|
|||||||
)
|
)
|
||||||
.then((response) => response.json())
|
.then((response) => response.json())
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
debugger
|
|
||||||
// 修改配置信息(判断是不是niji或者是mj)
|
// 修改配置信息(判断是不是niji或者是mj)
|
||||||
// 填充mj,niji数据
|
// 填充mj,niji数据
|
||||||
if (data.applications && data.application_commands) {
|
if (data.applications && data.application_commands) {
|
||||||
@ -447,7 +447,7 @@ export default defineComponent({
|
|||||||
await window.api.SaveDefineConfigJsonByProperty(
|
await window.api.SaveDefineConfigJsonByProperty(
|
||||||
JSON.stringify(['img_base', 'mj_config', toRaw(mjSetting.value), false]),
|
JSON.stringify(['img_base', 'mj_config', toRaw(mjSetting.value), false]),
|
||||||
(value) => {
|
(value) => {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
@ -520,7 +520,7 @@ export default defineComponent({
|
|||||||
* 打开购买GPT的地址
|
* 打开购买GPT的地址
|
||||||
*/
|
*/
|
||||||
async function openGptBuyUrl() {
|
async function openGptBuyUrl() {
|
||||||
debugger
|
|
||||||
let tmp_gb = mj_api_options.value.filter((item) => item.value == mjSetting.value.mj_api_url)
|
let tmp_gb = mj_api_options.value.filter((item) => item.value == mjSetting.value.mj_api_url)
|
||||||
if (tmp_gb.length == 0) {
|
if (tmp_gb.length == 0) {
|
||||||
message.error('当前选择的服务商没有购买地址!')
|
message.error('当前选择的服务商没有购买地址!')
|
||||||
|
|||||||
@ -167,7 +167,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await window.api.InitSDConfig((value) => {
|
await window.api.InitSDConfig((value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
@ -231,7 +231,7 @@ export default defineComponent({
|
|||||||
*/
|
*/
|
||||||
async function LoadSDServiceData() {
|
async function LoadSDServiceData() {
|
||||||
await window.sd.LoadSDServiceData(toRaw(formValue.value).webui_api_url, (value) => {
|
await window.sd.LoadSDServiceData(toRaw(formValue.value).webui_api_url, (value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
|
|||||||
@ -245,7 +245,7 @@ export default defineComponent({
|
|||||||
* 加载GPT的配置信息
|
* 加载GPT的配置信息
|
||||||
*/
|
*/
|
||||||
async function InitGptOptions() {
|
async function InitGptOptions() {
|
||||||
debugger
|
|
||||||
await window.api.getGptBusinessOption('all', (value) => {
|
await window.api.getGptBusinessOption('all', (value) => {
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
@ -368,7 +368,7 @@ export default defineComponent({
|
|||||||
* 打开购买GPT的地址
|
* 打开购买GPT的地址
|
||||||
*/
|
*/
|
||||||
async function openGptBuyUrl() {
|
async function openGptBuyUrl() {
|
||||||
debugger
|
|
||||||
let tmp_gb = gpt_options.value.filter((item) => item.value == formValue.value.gpt_business)
|
let tmp_gb = gpt_options.value.filter((item) => item.value == formValue.value.gpt_business)
|
||||||
if (tmp_gb.length == 0) {
|
if (tmp_gb.length == 0) {
|
||||||
message.error('当前选择的服务商没有购买地址!')
|
message.error('当前选择的服务商没有购买地址!')
|
||||||
@ -387,7 +387,7 @@ export default defineComponent({
|
|||||||
* @param {*} value 主题名称
|
* @param {*} value 主题名称
|
||||||
*/
|
*/
|
||||||
async function ChangeMode(value) {
|
async function ChangeMode(value) {
|
||||||
debugger
|
|
||||||
console.log(value)
|
console.log(value)
|
||||||
const isDarkMode = await window.darkMode.toggle(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
|
* @param image
|
||||||
*/
|
*/
|
||||||
function getCurrentWidthHeight(image) {
|
function getCurrentWidthHeight(image) {
|
||||||
debugger
|
|
||||||
let image_width = 512
|
let image_width = 512
|
||||||
let image_height = 512
|
let image_height = 512
|
||||||
// 设置图片的大小
|
// 设置图片的大小
|
||||||
@ -212,7 +212,7 @@ export default defineComponent({
|
|||||||
* 停止画
|
* 停止画
|
||||||
*/
|
*/
|
||||||
function stopDrawing() {
|
function stopDrawing() {
|
||||||
debugger
|
|
||||||
isDrawing = false
|
isDrawing = false
|
||||||
canvasHistory.push(imageCanvas.value.toDataURL('image/png'))
|
canvasHistory.push(imageCanvas.value.toDataURL('image/png'))
|
||||||
console.log(canvasHistory)
|
console.log(canvasHistory)
|
||||||
@ -294,7 +294,7 @@ export default defineComponent({
|
|||||||
* 回撤
|
* 回撤
|
||||||
*/
|
*/
|
||||||
async function undo() {
|
async function undo() {
|
||||||
debugger
|
|
||||||
if (step <= 0) {
|
if (step <= 0) {
|
||||||
// 如果没有可以撤销的步骤,就清空画布
|
// 如果没有可以撤销的步骤,就清空画布
|
||||||
imageContext.value.clearRect(
|
imageContext.value.clearRect(
|
||||||
@ -388,7 +388,7 @@ export default defineComponent({
|
|||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
debugger
|
|
||||||
const arrayBuffer = value.data
|
const arrayBuffer = value.data
|
||||||
const blob = new Blob([arrayBuffer], { type: 'image/png' })
|
const blob = new Blob([arrayBuffer], { type: 'image/png' })
|
||||||
const reader = new FileReader()
|
const reader = new FileReader()
|
||||||
@ -406,7 +406,7 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function SaveMask() {
|
async function SaveMask() {
|
||||||
debugger
|
|
||||||
// 判断当前是不是又蒙板
|
// 判断当前是不是又蒙板
|
||||||
if (canvasHistory.length <= 1) {
|
if (canvasHistory.length <= 1) {
|
||||||
message.error('请先绘制蒙板')
|
message.error('请先绘制蒙板')
|
||||||
@ -418,7 +418,7 @@ export default defineComponent({
|
|||||||
await window.img.Base64ToFile(
|
await window.img.Base64ToFile(
|
||||||
JSON.stringify([base64, `data/mask/mask_${new Date().getTime()}.png`]),
|
JSON.stringify([base64, `data/mask/mask_${new Date().getTime()}.png`]),
|
||||||
async (value) => {
|
async (value) => {
|
||||||
debugger
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
return
|
return
|
||||||
@ -486,7 +486,7 @@ export default defineComponent({
|
|||||||
})
|
})
|
||||||
// 提交处理任务,默认处理文件夹下面的所有的PNG图片
|
// 提交处理任务,默认处理文件夹下面的所有的PNG图片
|
||||||
await window.img.BatchProcessImage('tmp/input_crop', (value) => {
|
await window.img.BatchProcessImage('tmp/input_crop', (value) => {
|
||||||
debugger
|
|
||||||
// 不管返回什么,这边都关掉
|
// 不管返回什么,这边都关掉
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (dp) {
|
if (dp) {
|
||||||
@ -496,6 +496,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
if (value.code == 0) {
|
if (value.code == 0) {
|
||||||
message.error(value.message)
|
message.error(value.message)
|
||||||
|
window.api.showGlobalMessageDialog(value)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
window.api.showGlobalMessageDialog(value)
|
window.api.showGlobalMessageDialog(value)
|
||||||
|
|||||||
@ -3,6 +3,8 @@ import { createRouter, createWebHashHistory } from 'vue-router';
|
|||||||
import App from './App.vue'
|
import App from './App.vue'
|
||||||
import { Home } from '@vicons/ionicons5';
|
import { Home } from '@vicons/ionicons5';
|
||||||
const app = createApp(App);
|
const app = createApp(App);
|
||||||
|
import { createPinia } from 'pinia'
|
||||||
|
const pinia = createPinia()
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
@ -33,5 +35,6 @@ const router = createRouter({
|
|||||||
routes
|
routes
|
||||||
})
|
})
|
||||||
app.use(router);
|
app.use(router);
|
||||||
|
app.use(pinia)
|
||||||
|
|
||||||
app.mount('#app')
|
app.mount('#app')
|
||||||
|
|||||||
18
src/stores/image.js
Normal file
18
src/stores/image.js
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { defineStore } from "pinia";
|
||||||
|
|
||||||
|
export const useImageStore = defineStore('image', {
|
||||||
|
state: () => ({
|
||||||
|
dragTarget: null
|
||||||
|
}),
|
||||||
|
getters: {
|
||||||
|
GetDragTarget() {
|
||||||
|
return this.dragTarget;
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
SetDragTarget(target) {
|
||||||
|
this.dragTarget = target;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
68
src/stores/prompt.js
Normal file
68
src/stores/prompt.js
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
import { defineStore } from "pinia";
|
||||||
|
|
||||||
|
export const usePromptStore = defineStore('prompt', {
|
||||||
|
state: () => ({
|
||||||
|
// 提示词排序
|
||||||
|
prompt_sort: [],
|
||||||
|
selectStyle: [],
|
||||||
|
suffix: null, // 后缀
|
||||||
|
prefix: null, // 前缀
|
||||||
|
image_generate_category: null, // 选择生图的分类(sd,mj,d3)
|
||||||
|
|
||||||
|
isInit: false
|
||||||
|
}),
|
||||||
|
getters: {
|
||||||
|
// 获取提示词排序
|
||||||
|
GetPromptSort() {
|
||||||
|
return this.prompt_sort;
|
||||||
|
},
|
||||||
|
// 获取选中的风格
|
||||||
|
GetSelectStyle() {
|
||||||
|
return this.selectStyle
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取前缀
|
||||||
|
GetPrefix() {
|
||||||
|
return this.prefix;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取后缀
|
||||||
|
GetSuffix() {
|
||||||
|
return this.suffix;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取生图分类
|
||||||
|
GetImageGenerateCategory() {
|
||||||
|
return this.image_generate_category;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
|
||||||
|
// 更新提示词排序
|
||||||
|
InitPromptSort(value) {
|
||||||
|
|
||||||
|
this.prompt_sort = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新
|
||||||
|
UpdateSelectStyleSort(value) {
|
||||||
|
this.selectStyle = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新前缀
|
||||||
|
UpdatePrefix(value) {
|
||||||
|
this.prefix = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新后缀
|
||||||
|
UpdateSuffix(value) {
|
||||||
|
this.suffix = value;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 更新生图分类
|
||||||
|
UpdateImageGenerateCategory(value) {
|
||||||
|
this.image_generate_category = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
Loading…
x
Reference in New Issue
Block a user