chore: Remove preload script and associated functionalities from the project
@@ -1,33 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>NSServices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>NSBackgroundColorName</key>
|
||||
<string>background</string>
|
||||
<key>NSBackgroundSystemColorName</key>
|
||||
<string>systemBlueColor</string>
|
||||
<key>NSIconName</key>
|
||||
<string>NSTouchBarShare</string>
|
||||
<key>NSMenuItem</key>
|
||||
<dict>
|
||||
<key>default</key>
|
||||
<string>Upload pictures with PicList</string>
|
||||
</dict>
|
||||
<key>NSMessage</key>
|
||||
<string>runWorkflowAsService</string>
|
||||
<key>NSRequiredContext</key>
|
||||
<dict>
|
||||
<key>NSApplicationIdentifier</key>
|
||||
<string>com.apple.finder</string>
|
||||
</dict>
|
||||
<key>NSSendFileTypes</key>
|
||||
<array>
|
||||
<string>public.image</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
Before Width: | Height: | Size: 3.5 KiB |
@@ -1,314 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>AMApplicationBuild</key>
|
||||
<string>444.42</string>
|
||||
<key>AMApplicationVersion</key>
|
||||
<string>2.9</string>
|
||||
<key>AMDocumentVersion</key>
|
||||
<string>2</string>
|
||||
<key>actions</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>action</key>
|
||||
<dict>
|
||||
<key>AMAccepts</key>
|
||||
<dict>
|
||||
<key>Container</key>
|
||||
<string>List</string>
|
||||
<key>Optional</key>
|
||||
<true/>
|
||||
<key>Types</key>
|
||||
<array>
|
||||
<string>com.apple.cocoa.string</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>AMActionVersion</key>
|
||||
<string>2.0.3</string>
|
||||
<key>AMApplication</key>
|
||||
<array>
|
||||
<string>自动操作</string>
|
||||
</array>
|
||||
<key>AMParameterProperties</key>
|
||||
<dict>
|
||||
<key>COMMAND_STRING</key>
|
||||
<dict/>
|
||||
<key>CheckedForUserDefaultShell</key>
|
||||
<dict/>
|
||||
<key>inputMethod</key>
|
||||
<dict/>
|
||||
<key>shell</key>
|
||||
<dict/>
|
||||
<key>source</key>
|
||||
<dict/>
|
||||
</dict>
|
||||
<key>AMProvides</key>
|
||||
<dict>
|
||||
<key>Container</key>
|
||||
<string>List</string>
|
||||
<key>Types</key>
|
||||
<array>
|
||||
<string>com.apple.cocoa.string</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>ActionBundlePath</key>
|
||||
<string>/System/Library/Automator/Run Shell Script.action</string>
|
||||
<key>ActionName</key>
|
||||
<string>运行 Shell 脚本</string>
|
||||
<key>ActionParameters</key>
|
||||
<dict>
|
||||
<key>COMMAND_STRING</key>
|
||||
<string>/Applications/PicList.app/Contents/MacOS/PicList upload "$@" > /dev/null 2>&1 &</string>
|
||||
<key>CheckedForUserDefaultShell</key>
|
||||
<true/>
|
||||
<key>inputMethod</key>
|
||||
<integer>1</integer>
|
||||
<key>shell</key>
|
||||
<string>/bin/bash</string>
|
||||
<key>source</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<key>BundleIdentifier</key>
|
||||
<string>com.apple.RunShellScript</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.0.3</string>
|
||||
<key>CanShowSelectedItemsWhenRun</key>
|
||||
<false/>
|
||||
<key>CanShowWhenRun</key>
|
||||
<true/>
|
||||
<key>Category</key>
|
||||
<array>
|
||||
<string>AMCategoryUtilities</string>
|
||||
</array>
|
||||
<key>Class Name</key>
|
||||
<string>RunShellScriptAction</string>
|
||||
<key>InputUUID</key>
|
||||
<string>79609224-28DD-4ADE-AA8F-5A6C68C18C18</string>
|
||||
<key>Keywords</key>
|
||||
<array>
|
||||
<string>Shell</string>
|
||||
<string>脚本</string>
|
||||
<string>命令</string>
|
||||
<string>运行</string>
|
||||
<string>Unix</string>
|
||||
</array>
|
||||
<key>OutputUUID</key>
|
||||
<string>35CD6B4C-A616-4F89-8D76-DCD3249C5B4E</string>
|
||||
<key>UUID</key>
|
||||
<string>4350A83B-E7E6-4D2B-9768-B1D676CF58F3</string>
|
||||
<key>UnlocalizedApplications</key>
|
||||
<array>
|
||||
<string>Automator</string>
|
||||
</array>
|
||||
<key>arguments</key>
|
||||
<dict>
|
||||
<key>0</key>
|
||||
<dict>
|
||||
<key>default value</key>
|
||||
<integer>0</integer>
|
||||
<key>name</key>
|
||||
<string>inputMethod</string>
|
||||
<key>required</key>
|
||||
<string>0</string>
|
||||
<key>type</key>
|
||||
<string>0</string>
|
||||
<key>uuid</key>
|
||||
<string>0</string>
|
||||
</dict>
|
||||
<key>1</key>
|
||||
<dict>
|
||||
<key>default value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>source</string>
|
||||
<key>required</key>
|
||||
<string>0</string>
|
||||
<key>type</key>
|
||||
<string>0</string>
|
||||
<key>uuid</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
<key>2</key>
|
||||
<dict>
|
||||
<key>default value</key>
|
||||
<false/>
|
||||
<key>name</key>
|
||||
<string>CheckedForUserDefaultShell</string>
|
||||
<key>required</key>
|
||||
<string>0</string>
|
||||
<key>type</key>
|
||||
<string>0</string>
|
||||
<key>uuid</key>
|
||||
<string>2</string>
|
||||
</dict>
|
||||
<key>3</key>
|
||||
<dict>
|
||||
<key>default value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>COMMAND_STRING</string>
|
||||
<key>required</key>
|
||||
<string>0</string>
|
||||
<key>type</key>
|
||||
<string>0</string>
|
||||
<key>uuid</key>
|
||||
<string>3</string>
|
||||
</dict>
|
||||
<key>4</key>
|
||||
<dict>
|
||||
<key>default value</key>
|
||||
<string>/bin/sh</string>
|
||||
<key>name</key>
|
||||
<string>shell</string>
|
||||
<key>required</key>
|
||||
<string>0</string>
|
||||
<key>type</key>
|
||||
<string>0</string>
|
||||
<key>uuid</key>
|
||||
<string>4</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>isViewVisible</key>
|
||||
<true/>
|
||||
<key>location</key>
|
||||
<string>449.000000:305.000000</string>
|
||||
<key>nibPath</key>
|
||||
<string>/System/Library/Automator/Run Shell Script.action/Contents/Resources/Base.lproj/main.nib</string>
|
||||
</dict>
|
||||
<key>isViewVisible</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>connectors</key>
|
||||
<dict/>
|
||||
<key>workflowMetaData</key>
|
||||
<dict>
|
||||
<key>applicationBundleID</key>
|
||||
<string>com.apple.finder</string>
|
||||
<key>applicationBundleIDsByPath</key>
|
||||
<dict>
|
||||
<key>/System/Library/CoreServices/Finder.app</key>
|
||||
<string>com.apple.finder</string>
|
||||
</dict>
|
||||
<key>applicationPath</key>
|
||||
<string>/System/Library/CoreServices/Finder.app</string>
|
||||
<key>applicationPaths</key>
|
||||
<array>
|
||||
<string>/System/Library/CoreServices/Finder.app</string>
|
||||
</array>
|
||||
<key>backgroundColor</key>
|
||||
<data>
|
||||
YnBsaXN0MDDUAQIDBAUGNjdYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVy
|
||||
VCR0b3ASAAGGoKoHCBMUFR4kKC8zVSRudWxs1QkKCwwNDg8QERJWJGNsYXNz
|
||||
W05TQ29sb3JOYW1lXE5TQ29sb3JTcGFjZV1OU0NhdGFsb2dOYW1lV05TQ29s
|
||||
b3KACYADEAaAAoAEVlN5c3RlbV8QD3N5c3RlbUJsdWVDb2xvctUWFwsYCRka
|
||||
GxwOXE5TQ29tcG9uZW50c1VOU1JHQl8QEk5TQ3VzdG9tQ29sb3JTcGFjZUcw
|
||||
IDAgMSAxTxARMCAwIDAuOTk4MTg4OTcyNQAQAYAFgAnTHyAJISIjVE5TSURV
|
||||
TlNJQ0MQB4AGgAjSJQkmJ1dOUy5kYXRhTxEMSAAADEhMaW5vAhAAAG1udHJS
|
||||
R0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAA
|
||||
AAAAAAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGE
|
||||
AAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoA
|
||||
AAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1
|
||||
ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAA
|
||||
JHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8
|
||||
AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2Fy
|
||||
ZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAA
|
||||
AAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAA
|
||||
AAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BY
|
||||
WVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAA
|
||||
AAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0
|
||||
dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVm
|
||||
YXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2
|
||||
MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2lu
|
||||
ZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJl
|
||||
bmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQT
|
||||
CwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAA
|
||||
AAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAA
|
||||
AAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABt
|
||||
AHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA
|
||||
4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFn
|
||||
AW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQC
|
||||
HQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1
|
||||
AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kE
|
||||
BgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6
|
||||
BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0G
|
||||
rwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghG
|
||||
CFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEK
|
||||
Jwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwq
|
||||
DEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQO
|
||||
fw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1
|
||||
ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QT
|
||||
xRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxay
|
||||
FtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0a
|
||||
BBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1w
|
||||
HZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwh
|
||||
SCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4
|
||||
JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWsp
|
||||
nSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4W
|
||||
Lkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQz
|
||||
DTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgU
|
||||
OFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9
|
||||
oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6
|
||||
Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1J
|
||||
Y0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+T
|
||||
T91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9W
|
||||
XFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0n
|
||||
XXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBk
|
||||
lGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/
|
||||
bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0
|
||||
FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwh
|
||||
fIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE
|
||||
44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Y
|
||||
jf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+X
|
||||
Cpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBp
|
||||
oNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyq
|
||||
j6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSc
|
||||
tRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/
|
||||
er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4
|
||||
yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V
|
||||
0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE
|
||||
4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHt
|
||||
nO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH
|
||||
+lf65/t3/Af8mP0p/br+S/7c/23//4AH0ikqKyxaJGNsYXNzbmFtZVgkY2xh
|
||||
c3Nlc11OU011dGFibGVEYXRhoystLlZOU0RhdGFYTlNPYmplY3TSKSowMVxO
|
||||
U0NvbG9yU3BhY2WiMi5cTlNDb2xvclNwYWNl0ikqNDVXTlNDb2xvcqI0Ll8Q
|
||||
D05TS2V5ZWRBcmNoaXZlctE4OVRyb290gAEACAARABoAIwAtADIANwBCAEgA
|
||||
UwBaAGYAcwCBAIkAiwCNAI8AkQCTAJoArAC3AMQAygDfAOcA+wD9AP8BAQEI
|
||||
AQ0BEwEVARcBGQEeASYNcg10DXkNhA2NDZsNnw2mDa8NtA3BDcQN0Q3WDd4N
|
||||
4Q3zDfYN+wAAAAAAAAIBAAAAAAAAADoAAAAAAAAAAAAAAAAAAA39
|
||||
</data>
|
||||
<key>backgroundColorName</key>
|
||||
<string>systemBlueColor</string>
|
||||
<key>inputTypeIdentifier</key>
|
||||
<string>com.apple.Automator.fileSystemObject.image</string>
|
||||
<key>outputTypeIdentifier</key>
|
||||
<string>com.apple.Automator.nothing</string>
|
||||
<key>presentationMode</key>
|
||||
<integer>15</integer>
|
||||
<key>processesInput</key>
|
||||
<integer>0</integer>
|
||||
<key>serviceApplicationBundleID</key>
|
||||
<string>com.apple.finder</string>
|
||||
<key>serviceApplicationPath</key>
|
||||
<string>/System/Library/CoreServices/Finder.app</string>
|
||||
<key>serviceInputTypeIdentifier</key>
|
||||
<string>com.apple.Automator.fileSystemObject.image</string>
|
||||
<key>serviceOutputTypeIdentifier</key>
|
||||
<string>com.apple.Automator.nothing</string>
|
||||
<key>serviceProcessesInput</key>
|
||||
<integer>0</integer>
|
||||
<key>systemImageName</key>
|
||||
<string>NSTouchBarShare</string>
|
||||
<key>useAutomaticInputType</key>
|
||||
<integer>0</integer>
|
||||
<key>workflowTypeIdentifier</key>
|
||||
<string>com.apple.Automator.servicesMenu</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
4283
dist/renderer/assets/BucketPage-B7rY7eY7.js
vendored
77
dist/renderer/assets/BucketPage-D2ZIMjPT.css
vendored
@@ -1,77 +0,0 @@
|
||||
.layout-header {
|
||||
background-color: #fff;
|
||||
box-shadow: 2px 2px 1px rgba(0,0,0,0.1);
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: right 15px;
|
||||
}
|
||||
.dir-layout {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
padding: 5px 10px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.header-dir-view {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
padding: 5px 10px;
|
||||
flex-shrink: 0;
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
overflow-x: auto;
|
||||
}
|
||||
.header-info-view {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
flex-shrink: 0;
|
||||
margin-right: 10px;
|
||||
font-weight: 500;
|
||||
font-size: 12px;
|
||||
}
|
||||
.header-buttom-view {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.btn {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.file-item :hover {
|
||||
background-color: Beige;
|
||||
}
|
||||
.file-list-font {
|
||||
font-size: 14px;
|
||||
color: #303133;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
}
|
||||
.file-list-row-checked {
|
||||
background-color: Beige;
|
||||
}
|
||||
#refresh :hover {
|
||||
animation: rotate 1s linear infinite reverse;
|
||||
}
|
||||
#upload-area {
|
||||
height: 40%;
|
||||
border: 2px dashed #ddd;
|
||||
border-radius: 8px;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
color: #ddd;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease-in-out;
|
||||
align-items: center;
|
||||
}
|
||||
#upload-area #upload-dragger {
|
||||
height: 100%;
|
||||
item-align: center;
|
||||
}
|
||||
#upload-area.is-dragover,
|
||||
#upload-area:hover {
|
||||
border: 2px dashed #a4d8fa;
|
||||
color: #a4d8fa;
|
||||
}
|
||||
31
dist/renderer/assets/DocumentPage-01l_wH6n.js
vendored
@@ -1,31 +0,0 @@
|
||||
import { d as defineComponent, r as ref, M as onMounted, N as createBlock, e as openBlock, k as getConfig, ad as II18nLanguage, y as resolveComponent, p as configPaths } from "./index-BqdcQlNn.js";
|
||||
const __default__ = {
|
||||
name: "DocumentPage"
|
||||
};
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
...__default__,
|
||||
setup(__props) {
|
||||
const srcUrl = ref("https://piclist.cn/app.html");
|
||||
const updateUrl = async () => {
|
||||
const lang = await getConfig(configPaths.settings.language) || II18nLanguage.ZH_CN;
|
||||
srcUrl.value = lang === II18nLanguage.ZH_CN ? "https://piclist.cn/app.html" : "https://piclist.cn/en/app.html";
|
||||
};
|
||||
onMounted(() => {
|
||||
updateUrl();
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
const _component_webview = resolveComponent("webview");
|
||||
return openBlock(), createBlock(_component_webview, {
|
||||
src: srcUrl.value,
|
||||
disablewebsecurity: "",
|
||||
allowpopups: "",
|
||||
autosize: "on",
|
||||
scrollbars: "none",
|
||||
style: { "width": "100%", "height": "100%" }
|
||||
}, null, 8, ["src"]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
15
dist/renderer/assets/EmptyPage-wVPwAgzg.js
vendored
@@ -1,15 +0,0 @@
|
||||
import { d as defineComponent, N as createBlock, e as openBlock, u as unref, T, y as resolveComponent } from "./index-BqdcQlNn.js";
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "EmptyPage",
|
||||
setup(__props) {
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_empty = resolveComponent("el-empty");
|
||||
return openBlock(), createBlock(_component_el_empty, {
|
||||
description: unref(T)("MANAGE_NO_DATA")
|
||||
}, null, 8, ["description"]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
154
dist/renderer/assets/Gallery-CIW8E9xr.css
vendored
@@ -1,154 +0,0 @@
|
||||
.PhotoSlider__BannerIcon:nth-child(1) {
|
||||
display: none;
|
||||
}
|
||||
.PhotoSlider__Counter {
|
||||
margin-top: 20px;
|
||||
}
|
||||
.view-title {
|
||||
color: #eee;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
margin: 10px auto;
|
||||
}
|
||||
.view-title .sub-title {
|
||||
font-size: 14px;
|
||||
}
|
||||
.view-title .el-icon-caret-bottom {
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
.view-title .el-icon-caret-bottom.active {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
#gallery-view {
|
||||
position: absolute;
|
||||
left: 142px;
|
||||
right: 0;
|
||||
height: 85%;
|
||||
}
|
||||
#gallery-view .cursor-pointer {
|
||||
cursor: pointer;
|
||||
}
|
||||
.item-base {
|
||||
background: #2e2e2e;
|
||||
text-align: center;
|
||||
padding: 5px 0;
|
||||
cursor: pointer;
|
||||
font-size: 13px;
|
||||
transition: all 0.2s ease-in-out;
|
||||
height: 28px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.item-base.copy {
|
||||
cursor: not-allowed;
|
||||
background: #49b1f5;
|
||||
}
|
||||
.item-base.copy.active {
|
||||
cursor: pointer;
|
||||
background: #1b9ef3;
|
||||
color: #fff;
|
||||
}
|
||||
.item-base.delete {
|
||||
cursor: not-allowed;
|
||||
background: #f47466;
|
||||
}
|
||||
.item-base.delete.active {
|
||||
cursor: pointer;
|
||||
background: #f15140;
|
||||
color: #fff;
|
||||
}
|
||||
.item-base.all-pick {
|
||||
cursor: not-allowed;
|
||||
background: #69c282;
|
||||
}
|
||||
.item-base.all-pick.active {
|
||||
cursor: pointer;
|
||||
background: #44b363;
|
||||
color: #fff;
|
||||
}
|
||||
#gallery-view .round {
|
||||
border-radius: 14px;
|
||||
}
|
||||
#gallery-view .pull-right {
|
||||
float: right;
|
||||
}
|
||||
#gallery-view .gallery-list {
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
padding: 8px 0;
|
||||
overflow-y: auto;
|
||||
overflow-x: auto;
|
||||
position: absolute;
|
||||
top: 38px;
|
||||
transition: all 0.2s ease-in-out 0.1s;
|
||||
width: 100%;
|
||||
}
|
||||
#gallery-view .gallery-list.small {
|
||||
height: 100%;
|
||||
top: 113px;
|
||||
}
|
||||
#gallery-view .gallery-list__img {
|
||||
position: relative;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
#gallery-view .gallery-list__item {
|
||||
width: 100%;
|
||||
height: 120px;
|
||||
transition: all 0.2s ease-in-out;
|
||||
cursor: pointer;
|
||||
margin-bottom: 4px;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
#gallery-view .gallery-list__item-fake {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
opacity: 0;
|
||||
width: 100%;
|
||||
z-index: -1;
|
||||
}
|
||||
#gallery-view .gallery-list__item:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
#gallery-view .gallery-list__item-img {
|
||||
width: 100%;
|
||||
object-fit: contain;
|
||||
}
|
||||
#gallery-view .gallery-list__tool-panel {
|
||||
color: #ddd;
|
||||
margin-bottom: 4px;
|
||||
display: flex;
|
||||
}
|
||||
#gallery-view .gallery-list__tool-panel .el-checkbox {
|
||||
height: 16px;
|
||||
}
|
||||
#gallery-view .gallery-list__tool-panel i {
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease-in-out;
|
||||
margin-right: 4px;
|
||||
}
|
||||
#gallery-view .gallery-list__tool-panel i.document:hover {
|
||||
color: #49b1f5;
|
||||
}
|
||||
#gallery-view .gallery-list__tool-panel i.edit:hover {
|
||||
color: #69c282;
|
||||
}
|
||||
#gallery-view .gallery-list__tool-panel i.delete:hover {
|
||||
color: #f15140;
|
||||
}
|
||||
#gallery-view .gallery-list__file-name {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
color: #ddd;
|
||||
font-size: 14px;
|
||||
margin-bottom: 4px;
|
||||
text-align: center;
|
||||
align-self: center;
|
||||
}
|
||||
#gallery-view .handle-bar {
|
||||
color: #ddd;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
4144
dist/renderer/assets/Gallery-DLKNnx97.js
vendored
@@ -1,589 +0,0 @@
|
||||
import { d as defineComponent, aw as useModel, T, a as reactive, r as ref, o as onBeforeMount, N as createBlock, e as openBlock, v as withCtx, q as createVNode, w as withDirectives, y as resolveComponent, u as unref, f as createBaseVNode, t as toDisplayString, ac as vShow, B as createTextVNode, c as createElementBlock, F as Fragment, h as renderList, af as saveConfig, bd as toRaw, p as configPaths, k as getConfig } from "./index-BqdcQlNn.js";
|
||||
const _hoisted_1 = { class: "text-xs text-gray-500" };
|
||||
const switchStyle = "--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949;";
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "ImageProcessSetting",
|
||||
props: {
|
||||
"modelValue": { type: Boolean },
|
||||
"modelModifiers": {}
|
||||
},
|
||||
emits: ["update:modelValue"],
|
||||
setup(__props) {
|
||||
const imageProcessDialogVisible = useModel(__props, "modelValue");
|
||||
const waterMarkPositionMap = /* @__PURE__ */ new Map([
|
||||
["north", T("UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP")],
|
||||
["northeast", T("UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT")],
|
||||
["southeast", T("UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT")],
|
||||
["south", T("UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM")],
|
||||
["southwest", T("UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT")],
|
||||
["northwest", T("UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT")],
|
||||
["west", T("UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT")],
|
||||
["east", T("UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT")],
|
||||
["centre", T("UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER")]
|
||||
]);
|
||||
const imageExtList = ["jpg", "jpeg", "png", "webp", "bmp", "tiff", "tif", "svg", "ico", "avif", "heif", "heic"];
|
||||
const availableFormat = [
|
||||
"avif",
|
||||
"dz",
|
||||
"fits",
|
||||
"gif",
|
||||
"heif",
|
||||
"input",
|
||||
"jpeg",
|
||||
"jpg",
|
||||
"jp2",
|
||||
"jxl",
|
||||
"magick",
|
||||
"openslide",
|
||||
"pdf",
|
||||
"png",
|
||||
"ppm",
|
||||
"raw",
|
||||
"svg",
|
||||
"tiff",
|
||||
"tif",
|
||||
"v",
|
||||
"webp"
|
||||
];
|
||||
const waterMarkForm = reactive({
|
||||
isAddWatermark: false,
|
||||
watermarkType: "text",
|
||||
isFullScreenWatermark: false,
|
||||
watermarkDegree: 0,
|
||||
watermarkText: "",
|
||||
watermarkFontPath: "",
|
||||
watermarkScaleRatio: 0.15,
|
||||
watermarkColor: "#CCCCCC73",
|
||||
watermarkImagePath: "",
|
||||
watermarkPosition: "southeast"
|
||||
});
|
||||
const compressForm = reactive({
|
||||
quality: 100,
|
||||
isConvert: false,
|
||||
convertFormat: "jpg",
|
||||
isReSize: false,
|
||||
reSizeWidth: 500,
|
||||
reSizeHeight: 500,
|
||||
skipReSizeOfSmallImg: false,
|
||||
isReSizeByPercent: false,
|
||||
reSizePercent: 50,
|
||||
isRotate: false,
|
||||
rotateDegree: 0,
|
||||
isRemoveExif: false,
|
||||
isFlip: false,
|
||||
isFlop: false
|
||||
});
|
||||
const formatConvertObj = ref("{}");
|
||||
const skipProcessForm = reactive({
|
||||
skipProcessExtList: "zip,rar,7z,tar,gz,tar.gz,tar.bz2,tar.xz"
|
||||
});
|
||||
const waterMarkFormKeys = Object.keys(waterMarkForm);
|
||||
const compressFormKeys = Object.keys(compressForm);
|
||||
const skipProcessFormKeys = Object.keys(skipProcessForm);
|
||||
function handleSaveConfig() {
|
||||
let iformatConvertObj = {};
|
||||
try {
|
||||
iformatConvertObj = JSON.parse(formatConvertObj.value);
|
||||
} catch (error) {
|
||||
}
|
||||
const formatConvertObjEntries = Object.entries(iformatConvertObj);
|
||||
const formatConvertObjEntriesFilter = formatConvertObjEntries.filter((item) => {
|
||||
return imageExtList.includes(item[0]) && availableFormat.includes(item[1]);
|
||||
});
|
||||
const formatConvertObjFilter = Object.fromEntries(formatConvertObjEntriesFilter);
|
||||
formatConvertObj.value = JSON.stringify(formatConvertObjFilter);
|
||||
compressForm.formatConvertObj = formatConvertObjFilter;
|
||||
saveConfig(configPaths.buildIn.compress, toRaw(compressForm));
|
||||
saveConfig(configPaths.buildIn.watermark, toRaw(waterMarkForm));
|
||||
saveConfig(configPaths.buildIn.skipProcess, toRaw(skipProcessForm));
|
||||
closeDialog();
|
||||
}
|
||||
async function initData() {
|
||||
const compress = await getConfig(configPaths.buildIn.compress);
|
||||
const watermark = await getConfig(configPaths.buildIn.watermark);
|
||||
const skipProcess = await getConfig(configPaths.buildIn.skipProcess);
|
||||
if (compress) {
|
||||
compressFormKeys.forEach((key) => {
|
||||
compressForm[key] = compress[key] ?? compressForm[key];
|
||||
});
|
||||
try {
|
||||
if (typeof compress.formatConvertObj === "object") {
|
||||
formatConvertObj.value = JSON.stringify(compress.formatConvertObj);
|
||||
} else {
|
||||
formatConvertObj.value = compress.formatConvertObj ?? "{}";
|
||||
}
|
||||
} catch (error) {
|
||||
formatConvertObj.value = "{}";
|
||||
}
|
||||
}
|
||||
if (watermark) {
|
||||
waterMarkFormKeys.forEach((key) => {
|
||||
waterMarkForm[key] = watermark[key] ?? waterMarkForm[key];
|
||||
});
|
||||
waterMarkForm.watermarkColor = watermark.watermarkColor === "" ? "#CCCCCC73" : watermark.watermarkColor;
|
||||
}
|
||||
if (skipProcess) {
|
||||
skipProcessFormKeys.forEach((key) => {
|
||||
skipProcessForm[key] = skipProcess[key] ?? skipProcessForm[key];
|
||||
});
|
||||
}
|
||||
}
|
||||
function closeDialog() {
|
||||
imageProcessDialogVisible.value = false;
|
||||
}
|
||||
onBeforeMount(async () => {
|
||||
await initData();
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_input = resolveComponent("el-input");
|
||||
const _component_el_form_item = resolveComponent("el-form-item");
|
||||
const _component_el_switch = resolveComponent("el-switch");
|
||||
const _component_el_radio = resolveComponent("el-radio");
|
||||
const _component_el_radio_group = resolveComponent("el-radio-group");
|
||||
const _component_el_input_number = resolveComponent("el-input-number");
|
||||
const _component_el_color_picker = resolveComponent("el-color-picker");
|
||||
const _component_el_option = resolveComponent("el-option");
|
||||
const _component_el_select = resolveComponent("el-select");
|
||||
const _component_el_button = resolveComponent("el-button");
|
||||
const _component_el_form = resolveComponent("el-form");
|
||||
return openBlock(), createBlock(_component_el_form, {
|
||||
"label-position": "top",
|
||||
"require-asterisk-position": "right",
|
||||
"label-width": "10vw",
|
||||
size: "default",
|
||||
model: waterMarkForm
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input, {
|
||||
modelValue: skipProcessForm.skipProcessExtList,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => skipProcessForm.skipProcessExtList = $event),
|
||||
type: "textarea",
|
||||
autosize: { minRows: 2, maxRows: 4 }
|
||||
}, null, 8, ["modelValue"]),
|
||||
createBaseVNode("div", _hoisted_1, toDisplayString(unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_switch, {
|
||||
modelValue: waterMarkForm.isAddWatermark,
|
||||
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => waterMarkForm.isAddWatermark = $event),
|
||||
style: switchStyle
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_radio_group, {
|
||||
modelValue: waterMarkForm.watermarkType,
|
||||
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => waterMarkForm.watermarkType = $event)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_radio, { value: "text" }, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_radio, { value: "image" }, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, waterMarkForm.isAddWatermark]
|
||||
]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_switch, {
|
||||
modelValue: waterMarkForm.isFullScreenWatermark,
|
||||
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => waterMarkForm.isFullScreenWatermark = $event),
|
||||
style: switchStyle
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, waterMarkForm.isAddWatermark]
|
||||
]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input_number, {
|
||||
modelValue: waterMarkForm.watermarkDegree,
|
||||
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => waterMarkForm.watermarkDegree = $event),
|
||||
step: 1
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, waterMarkForm.isAddWatermark]
|
||||
]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input, {
|
||||
modelValue: waterMarkForm.watermarkText,
|
||||
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => waterMarkForm.watermarkText = $event)
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, waterMarkForm.isAddWatermark && waterMarkForm.watermarkType === "text"]
|
||||
]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input, {
|
||||
modelValue: waterMarkForm.watermarkFontPath,
|
||||
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => waterMarkForm.watermarkFontPath = $event)
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, waterMarkForm.isAddWatermark && waterMarkForm.watermarkType === "text"]
|
||||
]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input_number, {
|
||||
modelValue: waterMarkForm.watermarkScaleRatio,
|
||||
"onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => waterMarkForm.watermarkScaleRatio = $event),
|
||||
min: 0,
|
||||
max: 1,
|
||||
step: 0.01
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, waterMarkForm.isAddWatermark]
|
||||
]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_color_picker, {
|
||||
modelValue: waterMarkForm.watermarkColor,
|
||||
"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => waterMarkForm.watermarkColor = $event),
|
||||
"show-alpha": ""
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, waterMarkForm.isAddWatermark && waterMarkForm.watermarkType === "text"]
|
||||
]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_WMPATH")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input, {
|
||||
modelValue: waterMarkForm.watermarkImagePath,
|
||||
"onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => waterMarkForm.watermarkImagePath = $event)
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, waterMarkForm.isAddWatermark && waterMarkForm.watermarkType === "image"]
|
||||
]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_radio_group, {
|
||||
modelValue: waterMarkForm.watermarkPosition,
|
||||
"onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => waterMarkForm.watermarkPosition = $event)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(waterMarkPositionMap), (item) => {
|
||||
return openBlock(), createBlock(_component_el_radio, {
|
||||
key: item[0],
|
||||
value: item[0]
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(item[1]), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["value"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, waterMarkForm.isAddWatermark]
|
||||
]),
|
||||
createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_switch, {
|
||||
modelValue: compressForm.isRemoveExif,
|
||||
"onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => compressForm.isRemoveExif = $event),
|
||||
style: switchStyle
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_QUALITY")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input_number, {
|
||||
modelValue: compressForm.quality,
|
||||
"onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => compressForm.quality = $event),
|
||||
min: 1,
|
||||
max: 100,
|
||||
step: 1
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_switch, {
|
||||
modelValue: compressForm.isConvert,
|
||||
"onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => compressForm.isConvert = $event),
|
||||
style: switchStyle
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_select, {
|
||||
modelValue: compressForm.convertFormat,
|
||||
"onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => compressForm.convertFormat = $event),
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(), createElementBlock(Fragment, null, renderList(availableFormat, (item) => {
|
||||
return createVNode(_component_el_option, {
|
||||
key: item,
|
||||
label: item,
|
||||
value: item
|
||||
}, null, 8, ["label", "value"]);
|
||||
}), 64))
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, compressForm.isConvert]
|
||||
]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input, {
|
||||
modelValue: formatConvertObj.value,
|
||||
"onUpdate:modelValue": _cache[15] || (_cache[15] = ($event) => formatConvertObj.value = $event),
|
||||
placeholder: '{"jpg": "png", "png": "jpg"}',
|
||||
type: "textarea",
|
||||
autosize: { minRows: 2, maxRows: 4 }
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, compressForm.isConvert]
|
||||
]),
|
||||
createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_switch, {
|
||||
modelValue: compressForm.isFlip,
|
||||
"onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => compressForm.isFlip = $event),
|
||||
style: switchStyle
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_switch, {
|
||||
modelValue: compressForm.isFlop,
|
||||
"onUpdate:modelValue": _cache[17] || (_cache[17] = ($event) => compressForm.isFlop = $event),
|
||||
style: switchStyle
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_switch, {
|
||||
modelValue: compressForm.isReSize,
|
||||
"onUpdate:modelValue": _cache[18] || (_cache[18] = ($event) => compressForm.isReSize = $event),
|
||||
style: switchStyle
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input_number, {
|
||||
modelValue: compressForm.reSizeWidth,
|
||||
"onUpdate:modelValue": _cache[19] || (_cache[19] = ($event) => compressForm.reSizeWidth = $event),
|
||||
min: 0
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, compressForm.isReSize]
|
||||
]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input_number, {
|
||||
modelValue: compressForm.reSizeHeight,
|
||||
"onUpdate:modelValue": _cache[20] || (_cache[20] = ($event) => compressForm.reSizeHeight = $event),
|
||||
min: 0
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, compressForm.isReSize]
|
||||
]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_switch, {
|
||||
modelValue: compressForm.skipReSizeOfSmallImg,
|
||||
"onUpdate:modelValue": _cache[21] || (_cache[21] = ($event) => compressForm.skipReSizeOfSmallImg = $event),
|
||||
style: switchStyle
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, compressForm.isReSize && compressForm.reSizeHeight > 0 && compressForm.reSizeWidth === 0]
|
||||
]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_switch, {
|
||||
modelValue: compressForm.skipReSizeOfSmallImg,
|
||||
"onUpdate:modelValue": _cache[22] || (_cache[22] = ($event) => compressForm.skipReSizeOfSmallImg = $event),
|
||||
style: switchStyle
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, compressForm.isReSize && compressForm.reSizeWidth > 0 && compressForm.reSizeHeight === 0]
|
||||
]),
|
||||
createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_switch, {
|
||||
modelValue: compressForm.isReSizeByPercent,
|
||||
"onUpdate:modelValue": _cache[23] || (_cache[23] = ($event) => compressForm.isReSizeByPercent = $event),
|
||||
style: switchStyle
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input_number, {
|
||||
modelValue: compressForm.reSizePercent,
|
||||
"onUpdate:modelValue": _cache[24] || (_cache[24] = ($event) => compressForm.reSizePercent = $event),
|
||||
min: 0
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, compressForm.isReSizeByPercent]
|
||||
]),
|
||||
createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_switch, {
|
||||
modelValue: compressForm.isRotate,
|
||||
"onUpdate:modelValue": _cache[25] || (_cache[25] = ($event) => compressForm.isRotate = $event),
|
||||
style: switchStyle
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
withDirectives(createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input_number, {
|
||||
modelValue: compressForm.rotateDegree,
|
||||
"onUpdate:modelValue": _cache[26] || (_cache[26] = ($event) => compressForm.rotateDegree = $event),
|
||||
step: 1
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]), [
|
||||
[vShow, compressForm.isRotate]
|
||||
]),
|
||||
createVNode(_component_el_form_item, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
onClick: handleSaveConfig
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_button, { onClick: closeDialog }, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_CANCEL")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["model"]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as _
|
||||
};
|
||||
13
dist/renderer/assets/LogInPage-BpIsfGOe.css
vendored
@@ -1,13 +0,0 @@
|
||||
.layout {
|
||||
background-color: #fff;
|
||||
position: absolute;
|
||||
left: 162px;
|
||||
right: 0;
|
||||
}
|
||||
.layout.el-tabs {
|
||||
border: 0;
|
||||
border-style: none;
|
||||
}
|
||||
.loginpage:hover {
|
||||
background-color: Beige;
|
||||
}
|
||||
896
dist/renderer/assets/LogInPage-KS3NYFdk.js
vendored
@@ -1,896 +0,0 @@
|
||||
import { d as defineComponent, r as ref, a as reactive, am as computed, M as onMounted, c as createElementBlock, e as openBlock, q as createVNode, v as withCtx, y as resolveComponent, k as getConfig$1, u as unref, T, F as Fragment, h as renderList, N as createBlock, f as createBaseVNode, B as createTextVNode, t as toDisplayString, aZ as pointer_default, a_ as delete_default, g as createCommentVNode, a8 as info_filled_default, aJ as edit_default, J as ElMessage, au as ElNotification, ae as ElMessageBox, Q as useRouter } from "./index-BqdcQlNn.js";
|
||||
import { u as useManageStore } from "./manageStore-EteLCVxq.js";
|
||||
import { h as formObjToTableData } from "./common-REXFY3_s.js";
|
||||
import { s as supportedPicBedList } from "./constants-BZfYqEeL.js";
|
||||
import { g as getConfig, s as saveConfig, r as removeConfig } from "./dataSender-Bg45AIFL.js";
|
||||
import { f as formatEndpoint, a as isNeedToShorten, s as safeSliceF } from "./common-DNjr697i.js";
|
||||
const _hoisted_1 = { class: "layout" };
|
||||
const _hoisted_2 = ["src"];
|
||||
const _hoisted_3 = ["onClick"];
|
||||
const _hoisted_4 = { style: { "margin": "0 auto", "position": "relative", "left": "10%", "right": "50%" } };
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "LogInPage",
|
||||
setup(__props) {
|
||||
const manageStore = useManageStore();
|
||||
const router = useRouter();
|
||||
const activeName = ref("login");
|
||||
const configResult = reactive({});
|
||||
const existingConfiguration = reactive({});
|
||||
const dataForTable = reactive([]);
|
||||
const allConfigAliasMap = reactive({});
|
||||
const currentAliasList = reactive([]);
|
||||
const rules = ruleMap(supportedPicBedList);
|
||||
const sortedAllConfigAliasMap = computed(() => {
|
||||
return Object.values(allConfigAliasMap).sort((a, b) => {
|
||||
return a.picBedName.localeCompare(b.picBedName);
|
||||
});
|
||||
});
|
||||
const importedNewConfig = {};
|
||||
function ruleMap(options) {
|
||||
const rule = {};
|
||||
Object.keys(options).forEach((key) => {
|
||||
const item = options[key].options;
|
||||
item.forEach((option) => {
|
||||
const configOptions = options[key].configOptions[option];
|
||||
const keyName = `${key}.${option}`;
|
||||
if (configOptions.rule) {
|
||||
rule[keyName] = configOptions.rule;
|
||||
}
|
||||
if (configOptions.default) {
|
||||
configResult[keyName] = configOptions.default;
|
||||
}
|
||||
});
|
||||
});
|
||||
return rule;
|
||||
}
|
||||
function getDataForTable() {
|
||||
for (const key in existingConfiguration) {
|
||||
dataForTable.push({ ...existingConfiguration[key] });
|
||||
}
|
||||
}
|
||||
async function getExistingConfig(name) {
|
||||
if (name === "login") {
|
||||
getAllConfigAliasArray();
|
||||
return;
|
||||
}
|
||||
currentAliasList.length = 0;
|
||||
const result = await getConfig("picBed");
|
||||
for (const key in existingConfiguration) {
|
||||
delete existingConfiguration[key];
|
||||
}
|
||||
if (!result || typeof result !== "object" || Object.keys(result).length === 0) {
|
||||
existingConfiguration[name] = { fail: "暂无配置" };
|
||||
} else {
|
||||
for (const key in result) {
|
||||
if (result[key].picBedName === name) {
|
||||
existingConfiguration[key] = result[key];
|
||||
currentAliasList.push(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
dataForTable.length = 0;
|
||||
getDataForTable();
|
||||
handleConfigImport(currentAliasList[0]);
|
||||
}
|
||||
function getAliasList() {
|
||||
return Object.values(existingConfiguration).map((item) => item.alias);
|
||||
}
|
||||
async function handleConfigChange(name) {
|
||||
const aliasList = getAliasList();
|
||||
const allKeys = Object.keys(supportedPicBedList[name].configOptions);
|
||||
const resultMap = {};
|
||||
const reg = /^[\p{Unified_Ideograph}_a-zA-Z0-9-]+$/u;
|
||||
for (const key of allKeys) {
|
||||
const resultKey = name + "." + key;
|
||||
if (supportedPicBedList[name].configOptions[key].required) {
|
||||
if (supportedPicBedList[name].configOptions[key].type !== "boolean" && !configResult[resultKey]) {
|
||||
ElMessage.error(
|
||||
`${T("MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_MESSAGE_A")} ${supportedPicBedList[name].configOptions[key].description}`
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (key === "alias" && configResult[resultKey] !== void 0 && !reg.test(configResult[resultKey])) {
|
||||
ElMessage.error(T("MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ALIAS_MESSAGE"));
|
||||
return;
|
||||
}
|
||||
if (key === "itemsPerPage" && configResult[resultKey] !== void 0 && (configResult[resultKey] < 20 || configResult[resultKey] > 1e3)) {
|
||||
ElMessage.error(T("MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ITEMS_PER_PAGE_MESSAGE"));
|
||||
return;
|
||||
}
|
||||
if (key === "customUrl" && configResult[resultKey] !== void 0 && configResult[resultKey] !== "") {
|
||||
if (name !== "upyun") {
|
||||
if (!/^https?:\/\//.test(configResult[resultKey])) {
|
||||
ElMessage.error(T("MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_CUSTOM_URL_MESSAGE"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (supportedPicBedList[name].configOptions[key].default !== void 0 && configResult[resultKey] === "") {
|
||||
resultMap[key] = supportedPicBedList[name].configOptions[key].default;
|
||||
} else if (configResult[resultKey] === void 0) {
|
||||
if (supportedPicBedList[name].configOptions[key].default !== void 0) {
|
||||
resultMap[key] = supportedPicBedList[name].configOptions[key].default;
|
||||
} else {
|
||||
resultMap[key] = "";
|
||||
}
|
||||
} else {
|
||||
resultMap[key] = configResult[resultKey];
|
||||
}
|
||||
}
|
||||
resultMap.picBedName = name;
|
||||
if (resultMap.bucketName !== void 0) {
|
||||
resultMap.transformedConfig = {};
|
||||
const bucketName = resultMap.bucketName.split(",");
|
||||
const baseDir = resultMap.baseDir?.split(",");
|
||||
const area = resultMap.area?.split(",");
|
||||
const customUrl = resultMap.customUrl?.split(",");
|
||||
const operator = resultMap.operator?.split(",");
|
||||
const password = resultMap.password?.split(",");
|
||||
for (let i = 0; i < bucketName.length; i++) {
|
||||
if (bucketName[i]) {
|
||||
resultMap.transformedConfig = {
|
||||
...resultMap.transformedConfig,
|
||||
[bucketName[i]]: {
|
||||
baseDir: baseDir && baseDir[i] ? baseDir[i] : "/",
|
||||
area: area && area[i] ? area[i] : "",
|
||||
customUrl: customUrl && customUrl[i] ? /^https?:\/\//.test(customUrl[i]) ? customUrl[i] : "http://" + customUrl[i] : "",
|
||||
operator: operator && operator[i] ? operator[i] : "",
|
||||
password: password && password[i] ? password[i] : ""
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
if (resultMap.transformedConfig) {
|
||||
resultMap.transformedConfig = JSON.stringify(resultMap.transformedConfig);
|
||||
}
|
||||
saveConfig(`picBed.${resultMap.alias}`, resultMap);
|
||||
await manageStore.refreshConfig();
|
||||
await getExistingConfig(activeName.value);
|
||||
dataForTable.length = 0;
|
||||
getDataForTable();
|
||||
if (aliasList.includes(resultMap.alias)) {
|
||||
ElNotification({
|
||||
title: T("MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME"),
|
||||
message: `${T("MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE")}${resultMap.alias}`,
|
||||
type: "warning",
|
||||
duration: 500,
|
||||
customClass: "notification",
|
||||
offset: 100
|
||||
});
|
||||
} else {
|
||||
ElNotification({
|
||||
title: T("MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME"),
|
||||
message: `${T("MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_B")}${resultMap.alias}`,
|
||||
type: "success",
|
||||
duration: 2e3,
|
||||
customClass: "notification",
|
||||
offset: 100
|
||||
});
|
||||
}
|
||||
}
|
||||
const handleConfigReset = (name) => {
|
||||
const keys = Object.keys(configResult).filter((key) => key.startsWith(name));
|
||||
keys.forEach((key) => {
|
||||
const optionKey = key.split(".")[1];
|
||||
const configOption = supportedPicBedList[name]?.configOptions?.[optionKey];
|
||||
if (configOption) {
|
||||
configResult[key] = configOption.default || "";
|
||||
}
|
||||
});
|
||||
};
|
||||
const handleConfigRemove = (name) => {
|
||||
ElMessageBox.confirm(
|
||||
T("MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TITLE"),
|
||||
T("MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TIP"),
|
||||
{
|
||||
confirmButtonText: T("MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CONFIRM"),
|
||||
cancelButtonText: T("MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CANCEL"),
|
||||
type: "warning"
|
||||
}
|
||||
).then(async () => {
|
||||
const commonNoticeConfig = {
|
||||
title: T("MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME"),
|
||||
duration: 2e3,
|
||||
customClass: "notification",
|
||||
offset: 100
|
||||
};
|
||||
try {
|
||||
removeConfig("picBed", name);
|
||||
ElNotification({
|
||||
...commonNoticeConfig,
|
||||
message: `${T("MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_C")}${name}`,
|
||||
type: "success",
|
||||
position: "bottom-right"
|
||||
});
|
||||
manageStore.refreshConfig();
|
||||
getAllConfigAliasArray();
|
||||
} catch (error) {
|
||||
ElNotification({
|
||||
...commonNoticeConfig,
|
||||
message: `${T("MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_D")}${name}${T("MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_E")}`,
|
||||
type: "error",
|
||||
position: "bottom-right"
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
const getAllConfigAliasArray = async () => {
|
||||
const result = await getConfig("picBed");
|
||||
for (const key in allConfigAliasMap) {
|
||||
delete allConfigAliasMap[key];
|
||||
}
|
||||
if (!result) return;
|
||||
Object.entries(result).forEach(([, value], index) => {
|
||||
allConfigAliasMap[index] = {
|
||||
alias: value.alias,
|
||||
picBedName: value.picBedName,
|
||||
config: value
|
||||
};
|
||||
});
|
||||
};
|
||||
const handleCellClick = (row, column) => {
|
||||
navigator.clipboard.writeText(row[column.property]);
|
||||
ElMessage.success(`${T("MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_COPY_SUCCESS")}${row[column.property]}`);
|
||||
};
|
||||
const handleReferenceClick = (url) => window.electron.shell.openExternal(url);
|
||||
const handleConfigClick = async (item) => {
|
||||
const alias = item.alias;
|
||||
const config = JSON.stringify(item.config);
|
||||
const picBedName = item.picBedName;
|
||||
const result = await getConfig("picBed");
|
||||
router.push({
|
||||
path: "/main-page/manage-main-page",
|
||||
query: {
|
||||
alias,
|
||||
picBedName,
|
||||
config,
|
||||
allPicBedConfigure: JSON.stringify(result)
|
||||
}
|
||||
});
|
||||
};
|
||||
function handleConfigImport(alias) {
|
||||
const selectedConfig = existingConfiguration[alias];
|
||||
if (!selectedConfig) return;
|
||||
supportedPicBedList[selectedConfig.picBedName].options.forEach((option) => {
|
||||
if (selectedConfig[option] !== void 0) {
|
||||
configResult[selectedConfig.picBedName + "." + option] = selectedConfig[option];
|
||||
}
|
||||
});
|
||||
}
|
||||
async function getCurrentConfigList() {
|
||||
await manageStore.refreshConfig();
|
||||
const configList = await getConfig$1("uploader") ?? {};
|
||||
const pbList = [
|
||||
"aliyun",
|
||||
"aws-s3",
|
||||
"aws-s3-plist",
|
||||
"github",
|
||||
"imgur",
|
||||
"local",
|
||||
"qiniu",
|
||||
"sftpplist",
|
||||
"smms",
|
||||
"tcyun",
|
||||
"upyun",
|
||||
"webdavplist"
|
||||
];
|
||||
const filteredConfigList = pbList.flatMap((pb) => {
|
||||
const config = configList[pb];
|
||||
return config?.configList?.length ? config.configList.map((item) => ({ ...item, type: pb })) : [];
|
||||
});
|
||||
const autoImport = await getConfig$1("settings.autoImport") || false;
|
||||
if (autoImport) {
|
||||
const autoImportPicBed = initArray(
|
||||
await getConfig$1("settings.autoImportPicBed") || "",
|
||||
[]
|
||||
);
|
||||
await Promise.all(filteredConfigList.flatMap((config) => transUpToManage(config, config.type, autoImportPicBed)));
|
||||
if (Object.keys(importedNewConfig).length > 0) {
|
||||
const oldConfig = await getConfig("picBed");
|
||||
const newConfig = { ...oldConfig, ...importedNewConfig };
|
||||
saveConfig("picBed", newConfig);
|
||||
await manageStore.refreshConfig();
|
||||
}
|
||||
}
|
||||
await getAllConfigAliasArray();
|
||||
}
|
||||
function isImported(alias) {
|
||||
return Object.values(allConfigAliasMap).some((item) => item.alias === alias);
|
||||
}
|
||||
function initArray(arrayT, defaultValue) {
|
||||
if (!Array.isArray(arrayT)) {
|
||||
arrayT = arrayT ? [arrayT] : defaultValue;
|
||||
}
|
||||
return arrayT;
|
||||
}
|
||||
async function transUpToManage(config, picBedName, autoImportPicBed) {
|
||||
const alias = `${picBedName === "webdavplist" ? "webdav" : picBedName === "sftpplist" ? "sftp" : picBedName === "aws-s3" || picBedName === "aws-s3-plist" ? "s3plist" : picBedName}-${config._configName ?? "Default"}-imp`;
|
||||
if (!autoImportPicBed.includes(picBedName) || isImported(alias)) return;
|
||||
const commonConfig = {
|
||||
alias,
|
||||
picBedName,
|
||||
paging: true
|
||||
};
|
||||
const resultMap = {};
|
||||
switch (picBedName) {
|
||||
case "smms":
|
||||
if (!config.token) return;
|
||||
Object.assign(resultMap, {
|
||||
...commonConfig,
|
||||
token: config.token
|
||||
});
|
||||
break;
|
||||
case "aliyun":
|
||||
if (!config.accessKeyId || !config.accessKeySecret) return;
|
||||
Object.assign(resultMap, {
|
||||
...commonConfig,
|
||||
accessKeyId: config.accessKeyId,
|
||||
accessKeySecret: config.accessKeySecret,
|
||||
bucketName: "",
|
||||
baseDir: "/",
|
||||
itemsPerPage: 50,
|
||||
isAutoCustomUrl: !config.customUrl,
|
||||
transformedConfig: JSON.stringify(
|
||||
config.customUrl ? {
|
||||
[config.bucket]: {
|
||||
customUrl: config.customUrl
|
||||
}
|
||||
} : {}
|
||||
)
|
||||
});
|
||||
break;
|
||||
case "qiniu":
|
||||
if (!config.accessKey || !config.secretKey) return;
|
||||
Object.assign(resultMap, {
|
||||
...commonConfig,
|
||||
accessKey: config.accessKey,
|
||||
secretKey: config.secretKey,
|
||||
bucketName: "",
|
||||
baseDir: "/",
|
||||
isAutoCustomUrl: false,
|
||||
transformedConfig: JSON.stringify({ [config.bucket]: config.url }),
|
||||
itemsPerPage: 50
|
||||
});
|
||||
break;
|
||||
case "tcyun":
|
||||
if (!config.secretId || !config.secretKey || config.version === "v4") return;
|
||||
Object.assign(resultMap, {
|
||||
...commonConfig,
|
||||
secretId: config.secretId,
|
||||
secretKey: config.secretKey,
|
||||
bucketName: "",
|
||||
baseDir: "/",
|
||||
appId: config.appId,
|
||||
isAutoCustomUrl: !config.customUrl,
|
||||
transformedConfig: JSON.stringify(
|
||||
config.customUrl ? {
|
||||
[config.bucket]: {
|
||||
customUrl: config.customUrl
|
||||
}
|
||||
} : {}
|
||||
),
|
||||
itemsPerPage: 50
|
||||
});
|
||||
break;
|
||||
case "github":
|
||||
if (!config.token) return;
|
||||
Object.assign(resultMap, {
|
||||
...commonConfig,
|
||||
token: config.token,
|
||||
githubUsername: config.repo.split("/")[0],
|
||||
customUrl: "",
|
||||
proxy: "",
|
||||
itemsPerPage: 50
|
||||
});
|
||||
break;
|
||||
case "upyun":
|
||||
if (!config.operator || !config.password) return;
|
||||
Object.assign(resultMap, {
|
||||
...commonConfig,
|
||||
operator: config.operator,
|
||||
password: config.password,
|
||||
bucketName: config.bucket,
|
||||
antiLeechToken: config.antiLeechToken,
|
||||
expireTime: config.expireTime,
|
||||
baseDir: "/",
|
||||
customUrl: config.url,
|
||||
transformedConfig: JSON.stringify({
|
||||
[config.bucket]: {
|
||||
customUrl: config.url,
|
||||
baseDir: "/",
|
||||
area: "",
|
||||
operator: config.operator,
|
||||
password: config.password
|
||||
}
|
||||
}),
|
||||
itemsPerPage: 50
|
||||
});
|
||||
break;
|
||||
case "webdavplist":
|
||||
if (!config.host) return;
|
||||
Object.assign(resultMap, {
|
||||
...commonConfig,
|
||||
endpoint: formatEndpoint(config.host, config.sslEnabled),
|
||||
username: config.username,
|
||||
password: config.password,
|
||||
bucketName: "webdav",
|
||||
baseDir: config.path || "/",
|
||||
webPath: config.webpath || "",
|
||||
customUrl: config.customUrl || "",
|
||||
sslEnabled: !!config.sslEnabled,
|
||||
authType: config.authType || "basic",
|
||||
proxy: "",
|
||||
transformedConfig: JSON.stringify({
|
||||
webdav: {
|
||||
operator: "",
|
||||
password: config.password,
|
||||
baseDir: config.path || "/",
|
||||
customUrl: config.customUrl || "",
|
||||
area: ""
|
||||
}
|
||||
})
|
||||
});
|
||||
delete resultMap.paging;
|
||||
break;
|
||||
case "local":
|
||||
if (!config.path) return;
|
||||
Object.assign(resultMap, {
|
||||
...commonConfig,
|
||||
baseDir: config.path,
|
||||
webPath: config.webpath || "",
|
||||
customUrl: config.customUrl || "",
|
||||
transformedConfig: JSON.stringify({
|
||||
local: {
|
||||
customUrl: config.customUrl || "",
|
||||
baseDir: config.path,
|
||||
webPath: config.webpath || ""
|
||||
}
|
||||
})
|
||||
});
|
||||
delete resultMap.paging;
|
||||
break;
|
||||
case "sftpplist":
|
||||
if (!config.host) return;
|
||||
Object.assign(resultMap, {
|
||||
...commonConfig,
|
||||
picBedName: "sftp",
|
||||
host: config.host,
|
||||
port: config.port || 22,
|
||||
username: config.username,
|
||||
password: config.password,
|
||||
privateKey: config.privateKey,
|
||||
passphrase: config.passphrase,
|
||||
baseDir: config.uploadPath || "/",
|
||||
webPath: config.webPath || "",
|
||||
customUrl: config.customUrl || "",
|
||||
fileMode: config.fileMode || "0664",
|
||||
dirMode: config.dirMode || "0775",
|
||||
transformedConfig: JSON.stringify({
|
||||
sftp: {
|
||||
host: config.host,
|
||||
port: config.port || 22,
|
||||
username: config.username,
|
||||
password: config.password,
|
||||
privateKey: config.privateKey,
|
||||
passphrase: config.passphrase,
|
||||
baseDir: config.uploadPath || "/",
|
||||
webPath: config.webPath || "",
|
||||
customUrl: config.customUrl || "",
|
||||
fileMode: config.fileMode || "0664",
|
||||
dirMode: config.dirMode || "0775"
|
||||
}
|
||||
})
|
||||
});
|
||||
delete resultMap.paging;
|
||||
break;
|
||||
case "aws-s3":
|
||||
case "aws-s3-plist":
|
||||
if (!config.accessKeyID || !config.secretAccessKey) return;
|
||||
Object.assign(resultMap, {
|
||||
...commonConfig,
|
||||
picBedName: "s3plist",
|
||||
accessKeyId: config.accessKeyID,
|
||||
secretAccessKey: config.secretAccessKey,
|
||||
endpoint: config.endpoint || "",
|
||||
bucketName: "",
|
||||
baseDir: "/",
|
||||
itemsPerPage: 50,
|
||||
proxy: "",
|
||||
sslEnabled: config.endpoint ? config.endpoint.startsWith("https") : false,
|
||||
aclForUpload: "public-read",
|
||||
s3ForcePathStyle: config.pathStyleAccess,
|
||||
dogeCloudSupport: false,
|
||||
transformedConfig: JSON.stringify(
|
||||
config.urlPrefix ? {
|
||||
[config.bucketName]: {
|
||||
customUrl: config.urlPrefix
|
||||
}
|
||||
} : {}
|
||||
)
|
||||
});
|
||||
break;
|
||||
case "imgur":
|
||||
if (!config.username || !config.accessToken) return;
|
||||
Object.assign(resultMap, {
|
||||
...commonConfig,
|
||||
username: config.username,
|
||||
accessToken: config.accessToken,
|
||||
proxy: ""
|
||||
});
|
||||
delete resultMap.paging;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
importedNewConfig[alias] = resultMap;
|
||||
}
|
||||
onMounted(() => {
|
||||
getCurrentConfigList();
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_table_column = resolveComponent("el-table-column");
|
||||
const _component_el_table = resolveComponent("el-table");
|
||||
const _component_el_tooltip = resolveComponent("el-tooltip");
|
||||
const _component_el_button = resolveComponent("el-button");
|
||||
const _component_el_popover = resolveComponent("el-popover");
|
||||
const _component_el_button_group = resolveComponent("el-button-group");
|
||||
const _component_el_card = resolveComponent("el-card");
|
||||
const _component_el_col = resolveComponent("el-col");
|
||||
const _component_el_row = resolveComponent("el-row");
|
||||
const _component_el_tab_pane = resolveComponent("el-tab-pane");
|
||||
const _component_el_alert = resolveComponent("el-alert");
|
||||
const _component_el_icon = resolveComponent("el-icon");
|
||||
const _component_el_input = resolveComponent("el-input");
|
||||
const _component_el_switch = resolveComponent("el-switch");
|
||||
const _component_el_option = resolveComponent("el-option");
|
||||
const _component_el_select = resolveComponent("el-select");
|
||||
const _component_el_form_item = resolveComponent("el-form-item");
|
||||
const _component_el_form = resolveComponent("el-form");
|
||||
const _component_el_dropdown_item = resolveComponent("el-dropdown-item");
|
||||
const _component_el_dropdown = resolveComponent("el-dropdown");
|
||||
const _component_el_tabs = resolveComponent("el-tabs");
|
||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
||||
createVNode(_component_el_tabs, {
|
||||
modelValue: activeName.value,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => activeName.value = $event),
|
||||
type: "border-card",
|
||||
stretch: "",
|
||||
style: { "height": "calc(100vh - 50px)", "width": "100%", "overflow-x": "hidden" },
|
||||
"tab-position": "left",
|
||||
lazy: "",
|
||||
onTabChange: _cache[1] || (_cache[1] = ($event) => getExistingConfig(activeName.value))
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_tab_pane, {
|
||||
name: "login",
|
||||
label: unref(T)("MANAGE_LOGIN_PAGE_PANE_NAME"),
|
||||
style: { "width": "100%", "overflow-y": "scroll", "height": "calc(100vh - 50px)" },
|
||||
lazy: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_row, null, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(sortedAllConfigAliasMap.value, (item) => {
|
||||
return openBlock(), createBlock(_component_el_col, {
|
||||
key: item,
|
||||
xs: 24,
|
||||
sm: 12,
|
||||
md: 8,
|
||||
lg: 6,
|
||||
xl: 4
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_card, {
|
||||
class: "box-card",
|
||||
style: { "margin": "10px 0" },
|
||||
shadow: "hover"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_popover, {
|
||||
placement: "top",
|
||||
width: 300,
|
||||
trigger: "click",
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
reference: withCtx(() => [
|
||||
createVNode(_component_el_button, { style: { "width": "100%", "text-align": "center", "overflow": "hidden", "text-overflow": "ellipsis", "white-space": "nowrap" } }, {
|
||||
icon: withCtx(() => [
|
||||
createBaseVNode("img", {
|
||||
src: require(`./assets/${item.picBedName}.webp`),
|
||||
style: { "width": "25px", "height": "25px" }
|
||||
}, null, 8, _hoisted_2)
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_tooltip, {
|
||||
effect: "light",
|
||||
content: item.alias,
|
||||
placement: "top",
|
||||
disabled: !unref(isNeedToShorten)(item.alias),
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(isNeedToShorten)(item.alias) ? unref(safeSliceF)(item.alias, 17) + "..." : item.alias), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["content", "disabled"])
|
||||
]),
|
||||
_: 2
|
||||
}, 1024)
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_table, {
|
||||
data: unref(formObjToTableData)(item.config),
|
||||
style: { "width": "100%" },
|
||||
size: "small",
|
||||
"header-cell-style": { "text-align": "center" },
|
||||
"cell-style": { "text-align": "center" }
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_table_column, {
|
||||
prop: "key",
|
||||
label: unref(T)("MANAGE_LOGIN_PAGE_PANE_KEY_NAME"),
|
||||
width: "100"
|
||||
}, null, 8, ["label"]),
|
||||
createVNode(_component_el_table_column, {
|
||||
prop: "value",
|
||||
label: unref(T)("MANAGE_LOGIN_PAGE_PANE_KEY_VALUE")
|
||||
}, null, 8, ["label"])
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["data"])
|
||||
]),
|
||||
_: 2
|
||||
}, 1024),
|
||||
_cache[2] || (_cache[2] = createBaseVNode("br", null, null, -1)),
|
||||
_cache[3] || (_cache[3] = createBaseVNode("br", null, null, -1)),
|
||||
createVNode(_component_el_button_group, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
icon: unref(pointer_default),
|
||||
plain: "",
|
||||
onClick: ($event) => handleConfigClick(item)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_LOGIN_PAGE_PANE_ENTER")), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["icon", "onClick"]),
|
||||
createVNode(_component_el_button, {
|
||||
type: "warning",
|
||||
icon: unref(delete_default),
|
||||
plain: "",
|
||||
onClick: ($event) => handleConfigRemove(item.alias)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_LOGIN_PAGE_PANE_DELETE")), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["icon", "onClick"])
|
||||
]),
|
||||
_: 2
|
||||
}, 1024)
|
||||
]),
|
||||
_: 2,
|
||||
__: [2, 3]
|
||||
}, 1024)
|
||||
]),
|
||||
_: 2
|
||||
}, 1024);
|
||||
}), 128))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(supportedPicBedList), (item) => {
|
||||
return openBlock(), createBlock(_component_el_tab_pane, {
|
||||
key: item.name,
|
||||
label: item.name,
|
||||
name: item.icon,
|
||||
class: "tab-pane",
|
||||
lazy: "",
|
||||
style: { "width": "100%", "overflow-y": "scroll", "height": "calc(100vh - 50px)" }
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_alert, {
|
||||
title: item.explain,
|
||||
type: "info",
|
||||
"show-icon": "",
|
||||
center: "",
|
||||
closable: false
|
||||
}, null, 8, ["title"]),
|
||||
createVNode(_component_el_alert, {
|
||||
center: "",
|
||||
closable: false
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", null, [
|
||||
createTextVNode(toDisplayString(item.referenceText) + " ", 1),
|
||||
createBaseVNode("a", {
|
||||
style: { "color": "blue", "cursor": "pointer" },
|
||||
onClick: ($event) => handleReferenceClick(item.refLink)
|
||||
}, toDisplayString(item.refLink), 9, _hoisted_3)
|
||||
])
|
||||
]),
|
||||
_: 2
|
||||
}, 1024),
|
||||
createVNode(_component_el_form, {
|
||||
"label-position": "top",
|
||||
"require-asterisk-position": "right",
|
||||
"label-width": "10vw",
|
||||
size: "default",
|
||||
rules: unref(rules),
|
||||
model: configResult
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(supportedPicBedList)[item.icon].options, (option) => {
|
||||
return openBlock(), createBlock(_component_el_form_item, {
|
||||
key: option,
|
||||
prop: item.icon + "." + option
|
||||
}, {
|
||||
label: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(supportedPicBedList)[item.icon].configOptions[option].description) + " ", 1),
|
||||
!!unref(supportedPicBedList)[item.icon].configOptions[option].tooltip ? (openBlock(), createBlock(_component_el_tooltip, {
|
||||
key: 0,
|
||||
effect: "dark",
|
||||
content: unref(supportedPicBedList)[item.icon].configOptions[option].tooltip,
|
||||
placement: "right",
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_icon, { color: "#409EFF" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(info_filled_default))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["content"])) : createCommentVNode("", true)
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
unref(supportedPicBedList)[item.icon].configOptions[option].type === "string" ? (openBlock(), createBlock(_component_el_input, {
|
||||
key: 0,
|
||||
modelValue: configResult[item.icon + "." + option],
|
||||
"onUpdate:modelValue": ($event) => configResult[item.icon + "." + option] = $event,
|
||||
modelModifiers: { trim: true },
|
||||
placeholder: unref(supportedPicBedList)[item.icon].configOptions[option].placeholder,
|
||||
disabled: !!unref(supportedPicBedList)[item.icon].configOptions[option].disabled
|
||||
}, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder", "disabled"])) : unref(supportedPicBedList)[item.icon].configOptions[option].type === "boolean" ? (openBlock(), createBlock(_component_el_switch, {
|
||||
key: 1,
|
||||
modelValue: configResult[item.icon + "." + option],
|
||||
"onUpdate:modelValue": ($event) => configResult[item.icon + "." + option] = $event,
|
||||
style: { "--el-switch-on-color": "#13ce66", "--el-switch-off-color": "#ff4949" }
|
||||
}, null, 8, ["modelValue", "onUpdate:modelValue"])) : unref(supportedPicBedList)[item.icon].configOptions[option].type === "number" ? (openBlock(), createBlock(_component_el_input, {
|
||||
key: 2,
|
||||
modelValue: configResult[item.icon + "." + option],
|
||||
"onUpdate:modelValue": ($event) => configResult[item.icon + "." + option] = $event,
|
||||
modelModifiers: { number: true },
|
||||
placeholder: unref(supportedPicBedList)[item.icon].configOptions[option].placeholder
|
||||
}, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])) : unref(supportedPicBedList)[item.icon].configOptions[option].type === "select" ? (openBlock(), createBlock(_component_el_select, {
|
||||
key: 3,
|
||||
modelValue: configResult[item.icon + "." + option],
|
||||
"onUpdate:modelValue": ($event) => configResult[item.icon + "." + option] = $event,
|
||||
placeholder: unref(T)("MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER"),
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(Object.entries(unref(supportedPicBedList)[item.icon].configOptions[option].selectOptions), (i) => {
|
||||
return openBlock(), createBlock(_component_el_option, {
|
||||
key: i[0],
|
||||
label: i[1],
|
||||
value: i[0]
|
||||
}, null, 8, ["label", "value"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["modelValue", "onUpdate:modelValue", "placeholder"])) : createCommentVNode("", true)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["prop"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["rules", "model"]),
|
||||
createBaseVNode("div", _hoisted_4, [
|
||||
createVNode(_component_el_dropdown, {
|
||||
"split-button": "",
|
||||
type: "success",
|
||||
style: { "margin-left": "10vw" },
|
||||
placement: "top",
|
||||
disabled: currentAliasList.length === 0,
|
||||
teleported: ""
|
||||
}, {
|
||||
dropdown: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(currentAliasList, (i) => {
|
||||
return openBlock(), createBlock(_component_el_dropdown_item, {
|
||||
key: i,
|
||||
onClick: ($event) => handleConfigImport(i)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(i), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["onClick"]);
|
||||
}), 128))
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_LOGIN_PAGE_PANE_IMPORT")) + " ", 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["disabled"]),
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
style: { "margin-left": "10vw" },
|
||||
icon: unref(edit_default),
|
||||
plain: "",
|
||||
onClick: ($event) => handleConfigChange(item.icon)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_LOGIN_PAGE_PANE_SAVE")), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["icon", "onClick"]),
|
||||
createVNode(_component_el_button, {
|
||||
type: "danger",
|
||||
style: { "margin-left": "10vw" },
|
||||
icon: unref(delete_default),
|
||||
plain: "",
|
||||
onClick: ($event) => handleConfigReset(item.icon)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_LOGIN_PAGE_PANE_RESET")), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["icon", "onClick"])
|
||||
]),
|
||||
_cache[4] || (_cache[4] = createBaseVNode("br", null, null, -1)),
|
||||
createVNode(_component_el_alert, {
|
||||
title: unref(T)("MANAGE_LOGIN_PAGE_PANE_TABLE_TITLE"),
|
||||
type: "success",
|
||||
center: "",
|
||||
closable: false
|
||||
}, null, 8, ["title"]),
|
||||
createVNode(_component_el_table, {
|
||||
data: dataForTable,
|
||||
style: { "width": "100%", "margin-top": "10px" },
|
||||
"header-cell-style": { "text-align": "center" },
|
||||
"cell-style": { "text-align": "center" },
|
||||
onCellClick: handleCellClick
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(supportedPicBedList)[item.icon].options, (option) => {
|
||||
return openBlock(), createBlock(_component_el_table_column, {
|
||||
key: option,
|
||||
prop: option,
|
||||
label: unref(supportedPicBedList)[item.icon].configOptions[option].description,
|
||||
sortable: "",
|
||||
"show-overflow-tooltip": ""
|
||||
}, null, 8, ["prop", "label"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["data"])
|
||||
]),
|
||||
_: 2,
|
||||
__: [4]
|
||||
}, 1032, ["label", "name"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue"])
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
1536
dist/renderer/assets/Main-D3yRZ6wJ.js
vendored
166
dist/renderer/assets/Main-DxgNipu7.css
vendored
@@ -1,166 +0,0 @@
|
||||
.setting-list-scroll {
|
||||
height: 800px;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
.picgo-fade-enter,
|
||||
.picgo-fade-leave,
|
||||
.picgo-fade-leave-active {
|
||||
opacity: 0;
|
||||
}
|
||||
.picgo-fade-enter-active,
|
||||
.picgo-fade-leave-active {
|
||||
transition: all 150ms linear;
|
||||
}
|
||||
.view-title {
|
||||
color: #eee;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
margin: 10px auto;
|
||||
}
|
||||
#main-page {
|
||||
height: 100%;
|
||||
}
|
||||
#main-page .qrcode-dialog .qrcode-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
#main-page .qrcode-dialog .el-dialog__body {
|
||||
padding-top: 10px;
|
||||
}
|
||||
#main-page .qrcode-dialog .copy-picbed-config {
|
||||
margin-left: 10px;
|
||||
}
|
||||
#main-page .fake-title-bar {
|
||||
-webkit-app-region: drag;
|
||||
height: 22px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
color: #eee;
|
||||
font-size: 12px;
|
||||
line-height: 22px;
|
||||
position: fixed;
|
||||
z-index: 100;
|
||||
}
|
||||
#main-page .fake-title-bar.darwin {
|
||||
background: transparent;
|
||||
background-image: linear-gradient(to right, transparent 0%, transparent 167px, rgba(33,51,54,0.7) 167px, rgba(33,51,54,0.7) 100%);
|
||||
}
|
||||
#main-page .fake-title-bar.darwin .fake-title-bar__title {
|
||||
padding-left: 167px;
|
||||
}
|
||||
#main-page .fake-title-bar .handle-bar {
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
right: 4px;
|
||||
z-index: 10000;
|
||||
-webkit-app-region: no-drag;
|
||||
}
|
||||
#main-page .fake-title-bar .handle-bar .el-icon {
|
||||
cursor: pointer;
|
||||
font-size: 16px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
#main-page .fake-title-bar .handle-bar .el-icon.minus:hover {
|
||||
color: #409eff;
|
||||
}
|
||||
#main-page .fake-title-bar .handle-bar .el-icon.close:hover {
|
||||
color: #f15140;
|
||||
}
|
||||
#main-page .fake-title-bar .handle-bar .el-icon.plus:hover {
|
||||
color: #69c282;
|
||||
}
|
||||
#main-page .main-wrapper.darwin {
|
||||
background: rgba(33,51,54,0.7);
|
||||
}
|
||||
#main-page .side-bar-menu {
|
||||
position: fixed;
|
||||
height: calc(100vh - 22px);
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
width: 142px;
|
||||
}
|
||||
#main-page .side-bar-menu .info-window {
|
||||
cursor: pointer;
|
||||
position: fixed;
|
||||
bottom: 4px;
|
||||
left: 4px;
|
||||
cursor: poiter;
|
||||
color: #878d99;
|
||||
transition: 0.2s all ease-in-out;
|
||||
}
|
||||
#main-page .side-bar-menu .info-window:hover {
|
||||
color: #409eff;
|
||||
}
|
||||
#main-page .el-menu {
|
||||
border-right: none;
|
||||
background: transparent;
|
||||
width: 142px;
|
||||
}
|
||||
#main-page .el-menu-item {
|
||||
color: #eee;
|
||||
position: relative;
|
||||
}
|
||||
#main-page .el-menu-item:focus,
|
||||
#main-page .el-menu-item:hover {
|
||||
color: #fff;
|
||||
background: transparent;
|
||||
}
|
||||
#main-page .el-menu-item.is-active {
|
||||
color: #409eff;
|
||||
}
|
||||
#main-page .el-menu-item.is-active:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 20px;
|
||||
right: 0;
|
||||
top: 18px;
|
||||
background: #409eff;
|
||||
}
|
||||
#main-page .el-sub-menu__title {
|
||||
color: #eee;
|
||||
}
|
||||
#main-page .el-sub-menu__title:hover {
|
||||
background: transparent;
|
||||
}
|
||||
#main-page .el-sub-menu__title:hover span {
|
||||
color: #fff;
|
||||
}
|
||||
#main-page .el-sub-menu .el-menu-item {
|
||||
min-width: 142px;
|
||||
}
|
||||
#main-page .el-sub-menu .el-menu-item.is-active:before {
|
||||
top: 16px;
|
||||
}
|
||||
#main-page .main-content {
|
||||
padding-top: 22px;
|
||||
position: relative;
|
||||
height: calc(100vh - 22px);
|
||||
z-index: 10;
|
||||
}
|
||||
#main-page .el-dialog__body {
|
||||
padding: 20px;
|
||||
}
|
||||
#main-page .support {
|
||||
text-align: center;
|
||||
}
|
||||
#main-page .support-title {
|
||||
text-align: center;
|
||||
color: #878d99;
|
||||
}
|
||||
#main-page .align-center input {
|
||||
text-align: center;
|
||||
}
|
||||
#main-page *::-webkit-scrollbar {
|
||||
width: 2px;
|
||||
height: 8px;
|
||||
}
|
||||
#main-page *::-webkit-scrollbar-thumb {
|
||||
border-radius: 4px;
|
||||
background: #6f6f6f;
|
||||
}
|
||||
#main-page *::-webkit-scrollbar-track {
|
||||
background-color: transparent;
|
||||
}
|
||||
82
dist/renderer/assets/ManageMain-CSobdUqJ.css
vendored
@@ -1,82 +0,0 @@
|
||||
.layout {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
.layout__menu {
|
||||
background: #fff;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-bottom-right-radius: 4px;
|
||||
z-index: 1;
|
||||
width: 130px;
|
||||
position: relative;
|
||||
}
|
||||
.layout__menu__button {
|
||||
font-weight: bold;
|
||||
text-align: left;
|
||||
padding-left: 0px;
|
||||
padding-top: 10px;
|
||||
}
|
||||
.layout__menu__button__item {
|
||||
color: #2d8cf0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.layout__menu__button__item:hover {
|
||||
cursor: pointer;
|
||||
color: #ffa500;
|
||||
}
|
||||
.layout__menu__button__item__icon {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
}
|
||||
.layout__menu__button__divider__icon:hover {
|
||||
cursor: pointer;
|
||||
color: #ffa500;
|
||||
}
|
||||
.layout__menu__list {
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.layout__menu__list__item {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
color: #2d8cf0;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.layout__menu__list__item:hover {
|
||||
cursor: pointer;
|
||||
color: #ffa500;
|
||||
}
|
||||
.layout__menu__list__item__icon {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
}
|
||||
.layout__menu__setting {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.layout__menu__setting__item {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
color: #000;
|
||||
justify-content: center;
|
||||
font-size: 12px;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
}
|
||||
.layout__menu__setting__item:hover {
|
||||
cursor: pointer;
|
||||
color: #ffa500;
|
||||
}
|
||||
.layout__menu__setting__item__icon {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
}
|
||||
838
dist/renderer/assets/ManageMain-ZMzzX0g0.js
vendored
@@ -1,838 +0,0 @@
|
||||
import { T, d as defineComponent, r as ref, al as useRoute, a as reactive, D as watch, am as computed, o as onBeforeMount, c as createElementBlock, e as openBlock, f as createBaseVNode, q as createVNode, w as withDirectives, B as createTextVNode, u as unref, t as toDisplayString, v as withCtx, y as resolveComponent, i as resolveDirective, N as createBlock, m as triggerRPC, j as IRPCActionType, g as createCommentVNode, an as circle_plus_default, F as Fragment, h as renderList, E as normalizeStyle, ao as folder_opened_default, ap as folder_default, aq as home_filled_default, ar as switch_default, a5 as tools_default, as as chrome_filled_default, at as success_filled_default, au as ElNotification, Q as useRouter } from "./index-BqdcQlNn.js";
|
||||
import { u as useManageStore } from "./manageStore-EteLCVxq.js";
|
||||
import { s as supportedPicBedList } from "./constants-BZfYqEeL.js";
|
||||
import "./dataSender-Bg45AIFL.js";
|
||||
const AliyunAreaCodeName = {
|
||||
"oss-cn-hangzhou": "华东1(杭州)",
|
||||
"oss-cn-shanghai": "华东2(上海)",
|
||||
"oss-cn-nanjing": "华东5(南京)",
|
||||
"oss-cn-fuzhou": "华东6(福州)",
|
||||
"oss-cn-wuhan": "华中1(武汉)",
|
||||
"oss-cn-qingdao": "华北1(青岛)",
|
||||
"oss-cn-beijing": "华北2(北京)",
|
||||
"oss-cn-zhangjiakou": "华北3(张家口)",
|
||||
"oss-cn-huhehaote": "华北5(呼和浩特)",
|
||||
"oss-cn-wulanchabu": "华北6(乌兰察布)",
|
||||
"oss-cn-shenzhen": "华南1(深圳)",
|
||||
"oss-cn-heyuan": "华南2(河源)",
|
||||
"oss-cn-guangzhou": "华南3(广州)",
|
||||
"oss-cn-chengdu": "西南1(成都)",
|
||||
"oss-cn-hongkong": "中国香港",
|
||||
"oss-us-west-1": "美国(硅谷)",
|
||||
"oss-us-east-1": "美国(弗吉尼亚)",
|
||||
"oss-ap-northeast-1": "日本(东京)",
|
||||
"oss-ap-northeast-2": "韩国(首尔)",
|
||||
"oss-ap-southeast-1": "新加坡",
|
||||
"oss-ap-southeast-2": "澳大利亚(悉尼)",
|
||||
"oss-ap-southeast-3": "马来西亚(吉隆坡)",
|
||||
"oss-ap-southeast-5": "印度尼西亚(雅加达)",
|
||||
"oss-ap-southeast-6": "菲律宾(马尼拉)",
|
||||
"oss-ap-southeast-7": "泰国(曼谷)",
|
||||
"oss-ap-south-1": "印度(孟买)",
|
||||
"oss-eu-central-1": "德国(法兰克福)",
|
||||
"oss-eu-west-1": "英国(伦敦)",
|
||||
"oss-me-east-1": "阿联酋(迪拜)",
|
||||
"oss-rg-china-mainland": "无地域属性"
|
||||
};
|
||||
const QiniuAreaCodeName = {
|
||||
z0: "华东-浙江",
|
||||
"cn-east-2": "华东 浙江2",
|
||||
z1: "华北-河北",
|
||||
z2: "华南-广东",
|
||||
na0: "北美-洛杉矶",
|
||||
as0: "亚太-新加坡",
|
||||
"ap-northeast-1": "亚太-首尔",
|
||||
"ap-southeast-2": "亚太-河内"
|
||||
};
|
||||
const TencentAreaCodeName = {
|
||||
"ap-beijing-1": "北京一区",
|
||||
"ap-beijing": "北京",
|
||||
"ap-nanjing": "南京",
|
||||
"ap-shanghai": "上海",
|
||||
"ap-guangzhou": "广州",
|
||||
"ap-chengdu": "成都",
|
||||
"ap-chongqing": "重庆",
|
||||
"ap-shenzhen-fsi": "深圳金融",
|
||||
"ap-shagnhai-fsi": "上海金融",
|
||||
"ap-beijing-fsi": "北京金融",
|
||||
"ap-hongkong": "香港",
|
||||
"ap-singapore": "新加坡",
|
||||
"ap-mumbai": "孟买",
|
||||
"ap-jakarta": "雅加达",
|
||||
"ap-seoul": "首尔",
|
||||
"ap-bangkok": "曼谷",
|
||||
"ap-tokyo": "东京",
|
||||
"na-siliconvalley": "硅谷(美西)",
|
||||
"na-ashburn": "弗吉尼亚(美东)",
|
||||
"na-toronto": "多伦多",
|
||||
"sa-saopaulo": "圣保罗",
|
||||
"eu-frankfurt": "法兰克福"
|
||||
};
|
||||
const newBucketConfig = {
|
||||
tcyun: {
|
||||
name: T("MANAGE_NEW_BUCKET_TCYUN_NAME"),
|
||||
icon: "tcyun",
|
||||
configOptions: {
|
||||
BucketName: {
|
||||
required: true,
|
||||
description: T("MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_DESC"),
|
||||
placeholder: T("MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_PLACEHOLDER"),
|
||||
paraType: "string",
|
||||
component: "input",
|
||||
default: "piclist",
|
||||
rule: [
|
||||
{
|
||||
required: true,
|
||||
message: T("MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_A"),
|
||||
trigger: "blur"
|
||||
},
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
const reg = /^[a-z0-9][a-z0-9-]{1,21}[a-z0-9]$/;
|
||||
if (value.length > 23) {
|
||||
callback(new Error(T("MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_B")));
|
||||
} else if (!reg.test(value)) {
|
||||
callback(new Error(T("MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_C")));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
trigger: "change"
|
||||
}
|
||||
]
|
||||
},
|
||||
region: {
|
||||
required: true,
|
||||
description: T("MANAGE_NEW_BUCKET_TCYUN_REGION"),
|
||||
paraType: "string",
|
||||
component: "select",
|
||||
default: "ap-nanjing",
|
||||
options: TencentAreaCodeName
|
||||
},
|
||||
acl: {
|
||||
required: true,
|
||||
description: T("MANAGE_NEW_BUCKET_TCYUN_ACL_DESC"),
|
||||
paraType: "string",
|
||||
component: "select",
|
||||
default: "private",
|
||||
options: {
|
||||
private: T("MANAGE_NEW_BUCKET_TCYUN_ACL_PRIVATE"),
|
||||
"public-read": T("MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_R"),
|
||||
"public-read-write": T("MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_RW")
|
||||
}
|
||||
}
|
||||
},
|
||||
options: ["BucketName", "region", "acl"]
|
||||
},
|
||||
aliyun: {
|
||||
name: T("MANAGE_NEW_BUCKET_ALIYUN_NAME"),
|
||||
icon: "aliyun",
|
||||
configOptions: {
|
||||
BucketName: {
|
||||
required: true,
|
||||
description: T("MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_DESC"),
|
||||
placeholder: T("MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_PLACEHOLDER"),
|
||||
paraType: "string",
|
||||
component: "input",
|
||||
default: "piclist",
|
||||
rule: [
|
||||
{
|
||||
required: true,
|
||||
message: T("MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_A"),
|
||||
trigger: "blur"
|
||||
},
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
const reg = /^[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/;
|
||||
if (value.length > 63) {
|
||||
callback(new Error(T("MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_B")));
|
||||
} else if (!reg.test(value)) {
|
||||
callback(new Error(T("MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_C")));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
trigger: "change"
|
||||
}
|
||||
]
|
||||
},
|
||||
region: {
|
||||
required: true,
|
||||
description: T("MANAGE_NEW_BUCKET_ALIYUN_REGION"),
|
||||
paraType: "string",
|
||||
component: "select",
|
||||
default: "oss-cn-hangzhou",
|
||||
options: AliyunAreaCodeName
|
||||
},
|
||||
acl: {
|
||||
required: true,
|
||||
description: T("MANAGE_NEW_BUCKET_ALIYUN_ACL_DESC"),
|
||||
paraType: "string",
|
||||
component: "select",
|
||||
default: "private",
|
||||
options: {
|
||||
private: T("MANAGE_NEW_BUCKET_ALIYUN_ACL_PRIVATE"),
|
||||
publicRead: T("MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_R"),
|
||||
publicReadWrite: T("MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_RW")
|
||||
}
|
||||
}
|
||||
},
|
||||
options: ["BucketName", "region", "acl"]
|
||||
},
|
||||
qiniu: {
|
||||
name: T("MANAGE_NEW_BUCKET_QINIU_NAME"),
|
||||
icon: "qiniu",
|
||||
configOptions: {
|
||||
BucketName: {
|
||||
required: true,
|
||||
description: T("MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_DESC"),
|
||||
placeholder: T("MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_PLACEHOLDER"),
|
||||
paraType: "string",
|
||||
component: "input",
|
||||
default: "piclist",
|
||||
rule: [
|
||||
{
|
||||
required: true,
|
||||
message: T("MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_A"),
|
||||
trigger: "blur"
|
||||
},
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
const reg = /^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$/;
|
||||
if (value.length > 63) {
|
||||
callback(new Error(T("MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_B")));
|
||||
} else if (!reg.test(value)) {
|
||||
callback(new Error(T("MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_C")));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
trigger: "change"
|
||||
}
|
||||
]
|
||||
},
|
||||
region: {
|
||||
required: true,
|
||||
description: T("MANAGE_NEW_BUCKET_QINIU_REGION"),
|
||||
paraType: "string",
|
||||
component: "select",
|
||||
default: "z0",
|
||||
options: QiniuAreaCodeName
|
||||
},
|
||||
acl: {
|
||||
required: true,
|
||||
description: T("MANAGE_NEW_BUCKET_QINIU_ACL_DESC"),
|
||||
paraType: "boolean",
|
||||
component: "switch",
|
||||
default: false
|
||||
}
|
||||
},
|
||||
options: ["BucketName", "region", "acl"]
|
||||
},
|
||||
s3plist: {
|
||||
name: T("MANAGE_NEW_BUCKET_S3PLIST_NAME"),
|
||||
icon: "s3plist",
|
||||
configOptions: {
|
||||
BucketName: {
|
||||
required: true,
|
||||
description: T("MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_DESC"),
|
||||
placeholder: T("MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_PLACEHOLDER"),
|
||||
paraType: "string",
|
||||
component: "input",
|
||||
default: "piclist",
|
||||
rule: [
|
||||
{
|
||||
required: true,
|
||||
message: T("MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_RULE_MSG_A"),
|
||||
trigger: "blur"
|
||||
}
|
||||
]
|
||||
},
|
||||
region: {
|
||||
required: true,
|
||||
description: T("MANAGE_NEW_BUCKET_S3PLIST_REGION"),
|
||||
paraType: "string",
|
||||
component: "input",
|
||||
default: "us-east-1"
|
||||
},
|
||||
acl: {
|
||||
required: true,
|
||||
description: T("MANAGE_NEW_BUCKET_S3PLIST_ACL_DESC"),
|
||||
paraType: "string",
|
||||
component: "select",
|
||||
default: "private",
|
||||
options: {
|
||||
private: T("MANAGE_NEW_BUCKET_S3PLIST_ACL_PRIVATE"),
|
||||
"public-read": T("MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_R"),
|
||||
"public-read-write": T("MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_RW"),
|
||||
"authenticated-read": T("MANAGE_NEW_BUCKET_S3PLIST_ACL_AUTHENTICATED_READ")
|
||||
}
|
||||
}
|
||||
},
|
||||
options: ["BucketName", "region", "acl"]
|
||||
}
|
||||
};
|
||||
const _hoisted_1 = { class: "layout" };
|
||||
const _hoisted_2 = { class: "layout__menu" };
|
||||
const _hoisted_3 = { class: "layout__menu__button" };
|
||||
const _hoisted_4 = ["src"];
|
||||
const _hoisted_5 = { style: { "font-size": "14px", "color": "#909399" } };
|
||||
const _hoisted_6 = { class: "layout__menu__setting__item" };
|
||||
const _hoisted_7 = { class: "layout__menu__setting__item" };
|
||||
const _hoisted_8 = { class: "layout__menu__setting__item" };
|
||||
const _hoisted_9 = {
|
||||
class: "layout__content",
|
||||
style: { "height": "100%", "background-color": "transparent", "flex": "1", "width": "0" }
|
||||
};
|
||||
const _hoisted_10 = {
|
||||
class: "choice-cos",
|
||||
style: { "display": "flex", "flex-direction": "row", "flex-wrap": "wrap", "justify-content": "space-around" }
|
||||
};
|
||||
const _hoisted_11 = { style: { "font-size": "13px", "margin-top": "5px", "color": "red" } };
|
||||
const _hoisted_12 = ["onClick"];
|
||||
const _hoisted_13 = { style: { "font-size": "13px", "margin-top": "5px", "color": "cornflowerblue" } };
|
||||
const _hoisted_14 = { style: { "position": "relative", "height": "10vh", "width": "100%" } };
|
||||
const _hoisted_15 = { style: { "position": "relative", "height": "10vh", "width": "100%", "z-index": "1" } };
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "ManageMain",
|
||||
setup(__props) {
|
||||
const manageStore = useManageStore();
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const currentAlias = ref(route.query.alias);
|
||||
const currentPicBedName = ref(route.query.picBedName);
|
||||
let allPicBedConfigure = JSON.parse(route.query.allPicBedConfigure);
|
||||
let currentPagePicBedConfig = reactive(JSON.parse(route.query.config));
|
||||
const newBucketConfigResult = reactive({});
|
||||
const bucketList = ref({});
|
||||
const currentSelectedBucket = ref("");
|
||||
const bucketNameList = ref([]);
|
||||
const isLoadingBucketList = ref(false);
|
||||
const nweBucketDrawerVisible = ref(false);
|
||||
const picBedSwitchDialogVisible = ref(false);
|
||||
watch(route, async (newRoute) => {
|
||||
if (newRoute.fullPath.split("?")[0] === "/main-page/manage-main-page") {
|
||||
currentAlias.value = newRoute.query.alias;
|
||||
currentPicBedName.value = newRoute.query.picBedName;
|
||||
allPicBedConfigure = JSON.parse(newRoute.query.allPicBedConfigure);
|
||||
currentPagePicBedConfig = reactive(JSON.parse(newRoute.query.config));
|
||||
await getBucketList();
|
||||
}
|
||||
});
|
||||
const getCurrentActiveBucket = computed(() => bucketNameList.value.length === 0 ? "" : bucketNameList.value[0]);
|
||||
const urlMap = {
|
||||
aliyun: "https://oss.console.aliyun.com",
|
||||
github: "https://github.com",
|
||||
imgur: "https://imgur.com",
|
||||
local: "https://piclist.cn",
|
||||
qiniu: "https://portal.qiniu.com",
|
||||
s3plist: "https://aws.amazon.com/cn/s3/",
|
||||
sftp: "https://github.com/imba97/picgo-plugin-sftp-uploader",
|
||||
smms: "https://smms.app",
|
||||
tcyun: "https://console.cloud.tencent.com/cos",
|
||||
upyun: "https://console.upyun.com",
|
||||
webdavplist: "https://baike.baidu.com/item/WebDAV/4610909"
|
||||
};
|
||||
const showNewIconList = ["aliyun", "qiniu", "tcyun", "s3plist"];
|
||||
const bucketT = T("MANAGE_MAIN_PAGE_BUCKET");
|
||||
const galleryT = T("MANAGE_MAIN_PAGE_GALLERY");
|
||||
const repositoryT = T("MANAGE_MAIN_PAGE_REPOSITORY");
|
||||
const menuTitleMap = {
|
||||
aliyun: bucketT,
|
||||
qiniu: bucketT,
|
||||
tcyun: bucketT,
|
||||
upyun: bucketT,
|
||||
s3plist: bucketT,
|
||||
sftp: "",
|
||||
smms: galleryT,
|
||||
imgur: galleryT,
|
||||
github: repositoryT,
|
||||
webdavplist: "",
|
||||
local: ""
|
||||
};
|
||||
const rules = ruleMap(newBucketConfig);
|
||||
const openPicBedUrl = () => window.electron.shell.openExternal(urlMap[currentPagePicBedConfig.picBedName]);
|
||||
function ruleMap(options) {
|
||||
return Object.keys(options).reduce((result, key) => {
|
||||
options[key].options.forEach((option) => {
|
||||
const keyName = `${key}.${option}`;
|
||||
const configOption = options[key].configOptions[option];
|
||||
if (configOption.rule) {
|
||||
result[keyName] = configOption.rule;
|
||||
}
|
||||
if (configOption.default) {
|
||||
newBucketConfigResult[keyName] = configOption.default;
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}, {});
|
||||
}
|
||||
function openNewBucketDrawer() {
|
||||
nweBucketDrawerVisible.value = true;
|
||||
}
|
||||
function createNewBucket(picBedName) {
|
||||
const configOptions = newBucketConfig[picBedName].configOptions;
|
||||
const resultMap = Object.keys(configOptions).reduce((result, key) => {
|
||||
const resultKey = `${picBedName}.${key}`;
|
||||
const defaultValue = configOptions[key].default;
|
||||
const resultValue = newBucketConfigResult[resultKey];
|
||||
result[key] = resultValue === "" && defaultValue !== void 0 ? defaultValue : resultValue === void 0 ? defaultValue ?? "" : resultValue;
|
||||
return result;
|
||||
}, {});
|
||||
if (currentPicBedName.value === "tcyun") {
|
||||
resultMap.BucketName = `${resultMap.BucketName}-${currentPagePicBedConfig.appId}`;
|
||||
}
|
||||
resultMap.endpoint = currentPagePicBedConfig.endpoint;
|
||||
triggerRPC(IRPCActionType.MANAGE_CREATE_BUCKET, currentAlias, resultMap).then((result) => {
|
||||
if (result) {
|
||||
ElNotification({
|
||||
title: T("MANAGE_MAIN_PAGE_TIPS"),
|
||||
message: T("MANAGE_MAIN_PAGE_TIPS_SUCCESS"),
|
||||
type: "success"
|
||||
});
|
||||
nweBucketDrawerVisible.value = false;
|
||||
setTimeout(() => {
|
||||
getBucketList();
|
||||
}, 2e3);
|
||||
} else {
|
||||
ElNotification({
|
||||
title: T("MANAGE_MAIN_PAGE_TIPS"),
|
||||
message: T("MANAGE_MAIN_PAGE_TIPS_FAILED"),
|
||||
type: "error"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
async function getBucketList() {
|
||||
bucketList.value = {};
|
||||
bucketNameList.value = [];
|
||||
isLoadingBucketList.value = true;
|
||||
const result = await triggerRPC(IRPCActionType.MANAGE_GET_BUCKET_LIST, currentAlias.value);
|
||||
isLoadingBucketList.value = false;
|
||||
if (result.length > 0) {
|
||||
result.forEach((item) => {
|
||||
bucketList.value[item.Name] = item;
|
||||
bucketNameList.value.push(item.Name);
|
||||
});
|
||||
}
|
||||
}
|
||||
function transPathToUnix(filePath) {
|
||||
if (!filePath) return "";
|
||||
return process.platform === "win32" ? filePath.split(window.node.path.sep).join(window.node.path.posix.sep).replace(/^\/+|\/+$/g, "") : filePath.replace(/^\/+|\/+$/g, "");
|
||||
}
|
||||
function handleSelectMenu(bucketName) {
|
||||
const currentPicBedConfig = manageStore.config.picBed[currentAlias.value];
|
||||
const transformedConfig = JSON.parse(currentPicBedConfig.transformedConfig ?? "{}");
|
||||
let prefix = transformedConfig[bucketName]?.baseDir || "/";
|
||||
const cpicBedName = currentPicBedConfig.picBedName ?? currentPicBedName.value;
|
||||
if (cpicBedName === "local") {
|
||||
prefix = `/${transPathToUnix(prefix)}/`;
|
||||
} else {
|
||||
prefix = prefix.startsWith("/") ? prefix : `/${prefix}`;
|
||||
prefix = prefix.endsWith("/") ? prefix : `${prefix}/`;
|
||||
}
|
||||
const configMap = {
|
||||
prefix,
|
||||
bucketName,
|
||||
customUrl: transformedConfig[bucketName]?.customUrl ?? "",
|
||||
picBedName: cpicBedName,
|
||||
alias: currentAlias.value,
|
||||
bucketConfig: bucketList.value[bucketName],
|
||||
cdnUrl: currentPicBedConfig.customUrl,
|
||||
baseDir: prefix,
|
||||
webPath: currentPicBedConfig.webPath || ""
|
||||
};
|
||||
currentSelectedBucket.value = bucketName;
|
||||
router.push({
|
||||
path: "/main-page/manage-main-page/manage-bucket-page",
|
||||
query: {
|
||||
configMap: JSON.stringify(configMap)
|
||||
}
|
||||
});
|
||||
}
|
||||
function switchPicBed(picBedAlias) {
|
||||
if (picBedAlias === "main") {
|
||||
router.push({
|
||||
path: "/main-page/manage-login-page"
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (route.fullPath.startsWith("/main-page/manage-main-page/manage-bucket-page") || route.fullPath.startsWith("/main-page/manage-main-page/manage-setting-page")) {
|
||||
picBedSwitchDialogVisible.value = false;
|
||||
router.push({
|
||||
path: "/main-page/manage-main-page",
|
||||
query: {
|
||||
alias: picBedAlias,
|
||||
picBedName: allPicBedConfigure[picBedAlias].picBedName,
|
||||
config: JSON.stringify(allPicBedConfigure[picBedAlias]),
|
||||
allPicBedConfigure: JSON.stringify(allPicBedConfigure)
|
||||
}
|
||||
});
|
||||
} else {
|
||||
currentAlias.value = picBedAlias;
|
||||
currentPicBedName.value = allPicBedConfigure[picBedAlias].picBedName;
|
||||
currentPagePicBedConfig = allPicBedConfigure[picBedAlias];
|
||||
picBedSwitchDialogVisible.value = false;
|
||||
currentSelectedBucket.value = "";
|
||||
getBucketList();
|
||||
}
|
||||
}
|
||||
function changePicBed() {
|
||||
picBedSwitchDialogVisible.value = true;
|
||||
}
|
||||
function openBucketPageSetting() {
|
||||
router.push({
|
||||
path: "/main-page/manage-main-page/manage-setting-page"
|
||||
});
|
||||
}
|
||||
onBeforeMount(() => {
|
||||
getBucketList();
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_icon = resolveComponent("el-icon");
|
||||
const _component_el_tooltip = resolveComponent("el-tooltip");
|
||||
const _component_el_divider = resolveComponent("el-divider");
|
||||
const _component_el_menu_item = resolveComponent("el-menu-item");
|
||||
const _component_el_menu = resolveComponent("el-menu");
|
||||
const _component_router_view = resolveComponent("router-view");
|
||||
const _component_el_card = resolveComponent("el-card");
|
||||
const _component_el_image = resolveComponent("el-image");
|
||||
const _component_el_dialog = resolveComponent("el-dialog");
|
||||
const _component_el_input = resolveComponent("el-input");
|
||||
const _component_el_option = resolveComponent("el-option");
|
||||
const _component_el_select = resolveComponent("el-select");
|
||||
const _component_el_switch = resolveComponent("el-switch");
|
||||
const _component_el_form_item = resolveComponent("el-form-item");
|
||||
const _component_el_button = resolveComponent("el-button");
|
||||
const _component_el_form = resolveComponent("el-form");
|
||||
const _component_el_drawer = resolveComponent("el-drawer");
|
||||
const _directive_loading = resolveDirective("loading");
|
||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
||||
createBaseVNode("div", _hoisted_2, [
|
||||
createBaseVNode("div", _hoisted_3, [
|
||||
createBaseVNode("span", {
|
||||
class: "layout__menu__button__item",
|
||||
onClick: openPicBedUrl
|
||||
}, [
|
||||
createBaseVNode("img", {
|
||||
src: require(`./assets/${unref(currentPagePicBedConfig).picBedName}.webp`),
|
||||
class: "layout__menu__button__item__icon"
|
||||
}, null, 8, _hoisted_4),
|
||||
createTextVNode(" " + toDisplayString(unref(supportedPicBedList)[unref(currentPagePicBedConfig).picBedName].name), 1)
|
||||
])
|
||||
]),
|
||||
createVNode(_component_el_divider, {
|
||||
"content-position": "left",
|
||||
class: "layout__menu__button__divider",
|
||||
"border-style": "none"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("span", _hoisted_5, [
|
||||
createTextVNode(toDisplayString(menuTitleMap[currentPicBedName.value]) + " ", 1),
|
||||
showNewIconList.includes(currentPicBedName.value) ? (openBlock(), createBlock(_component_el_tooltip, {
|
||||
key: 0,
|
||||
effect: "dark",
|
||||
content: unref(T)("MANAGE_MAIN_PAGE_NEW_BUCKET"),
|
||||
placement: "right",
|
||||
persistent: false,
|
||||
teleported: "",
|
||||
"popper-class": "layout__menu__button__divider__tooltip"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_icon, {
|
||||
class: "layout__menu__button__divider__icon",
|
||||
color: "red",
|
||||
style: { "top": "2px" },
|
||||
onClick: _cache[0] || (_cache[0] = ($event) => openNewBucketDrawer())
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(circle_plus_default))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["content"])) : createCommentVNode("", true)
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
_cache[6] || (_cache[6] = createBaseVNode("div", null, null, -1)),
|
||||
withDirectives((openBlock(), createBlock(_component_el_menu, {
|
||||
class: "layout__menu__list",
|
||||
"default-active": getCurrentActiveBucket.value,
|
||||
style: { "width": "120px" },
|
||||
"active-text-color": "#409EFF",
|
||||
onSelect: handleSelectMenu
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(bucketNameList.value, (item) => {
|
||||
return openBlock(), createBlock(_component_el_menu_item, {
|
||||
key: item,
|
||||
index: item
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("span", {
|
||||
class: "layout__menu__list__item",
|
||||
style: normalizeStyle({
|
||||
color: item === currentSelectedBucket.value ? "#409EFF" : "#606266"
|
||||
})
|
||||
}, [
|
||||
currentSelectedBucket.value === item && currentPicBedName.value !== "github" ? (openBlock(), createBlock(_component_el_icon, {
|
||||
key: 0,
|
||||
class: "layout__menu__list__item__icon",
|
||||
color: "#409EFF",
|
||||
style: { "top": "2px" }
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(folder_opened_default))
|
||||
]),
|
||||
_: 1
|
||||
})) : currentPicBedName.value !== "github" ? (openBlock(), createBlock(_component_el_icon, {
|
||||
key: 1,
|
||||
class: "layout__menu__list__item__icon",
|
||||
color: "#606266",
|
||||
style: { "top": "2px" }
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(folder_default))
|
||||
]),
|
||||
_: 1
|
||||
})) : createCommentVNode("", true),
|
||||
createTextVNode(" " + toDisplayString(currentPicBedName.value === "tcyun" ? item.slice(0, item.length - 11) : currentPicBedName.value === "github" ? item.length > 10 ? `${item.slice(0, 5)}..${item.slice(-5)}` : item : item), 1)
|
||||
], 4)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["index"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["default-active"])), [
|
||||
[_directive_loading, isLoadingBucketList.value]
|
||||
]),
|
||||
createVNode(_component_el_menu, {
|
||||
class: "layout__menu__setting",
|
||||
style: { "width": "120px" }
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_menu_item, {
|
||||
index: "changePicBed",
|
||||
style: { "height": "40px" },
|
||||
onClick: _cache[1] || (_cache[1] = ($event) => switchPicBed("main"))
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("span", _hoisted_6, [
|
||||
createVNode(_component_el_icon, { class: "layout__menu__setting__item__icon" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(home_filled_default))
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createTextVNode(" " + toDisplayString(unref(T)("MANAGE_MAIN_PAGE_BACK_TO_HOME")), 1)
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_menu_item, {
|
||||
index: "changePicBed",
|
||||
style: { "height": "40px" },
|
||||
onClick: changePicBed
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("span", _hoisted_7, [
|
||||
createVNode(_component_el_icon, { class: "layout__menu__setting__item__icon" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(switch_default))
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createTextVNode(" " + toDisplayString(unref(T)("MANAGE_MAIN_PAGE_SWITCH_PICBED")), 1)
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_menu_item, {
|
||||
index: "bucketPageSetting",
|
||||
style: { "height": "40px" },
|
||||
onClick: openBucketPageSetting
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("span", _hoisted_8, [
|
||||
createVNode(_component_el_icon, { class: "layout__menu__setting__item__icon" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(tools_default))
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createTextVNode(" " + toDisplayString(unref(T)("MANAGE_MAIN_PAGE_SETTING")), 1)
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
createBaseVNode("div", _hoisted_9, [
|
||||
createVNode(_component_router_view)
|
||||
]),
|
||||
createVNode(_component_el_dialog, {
|
||||
modelValue: picBedSwitchDialogVisible.value,
|
||||
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => picBedSwitchDialogVisible.value = $event),
|
||||
top: "30vh",
|
||||
"append-to-body": ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_10, [
|
||||
createVNode(_component_el_card, { shadow: "hover" }, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", {
|
||||
style: { "text-align": "center", "display": "flex", "flex-direction": "column" },
|
||||
onClick: _cache[2] || (_cache[2] = ($event) => switchPicBed("main"))
|
||||
}, [
|
||||
createVNode(_component_el_icon, {
|
||||
color: "red",
|
||||
size: "25px",
|
||||
style: { "margin": "0 auto" }
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(chrome_filled_default))
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createBaseVNode("span", _hoisted_11, toDisplayString(unref(T)("MANAGE_MAIN_PAGE_BACK_TO_HOME")), 1)
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(allPicBedConfigure), (item) => {
|
||||
return openBlock(), createBlock(_component_el_card, {
|
||||
key: item,
|
||||
shadow: "hover"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", {
|
||||
style: { "text-align": "center", "display": "flex", "flex-direction": "column" },
|
||||
onClick: ($event) => switchPicBed(item.alias)
|
||||
}, [
|
||||
createVNode(_component_el_image, {
|
||||
src: require(`./assets/${item.picBedName}.webp`),
|
||||
class: "layout__addNewBucket__icon",
|
||||
style: { "width": "25px", "height": "25px", "margin": "0 auto" }
|
||||
}, null, 8, ["src"]),
|
||||
createBaseVNode("span", _hoisted_13, toDisplayString(item.alias), 1)
|
||||
], 8, _hoisted_12)
|
||||
]),
|
||||
_: 2
|
||||
}, 1024);
|
||||
}), 128))
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue"]),
|
||||
createVNode(_component_el_drawer, {
|
||||
modelValue: nweBucketDrawerVisible.value,
|
||||
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => nweBucketDrawerVisible.value = $event),
|
||||
class: "layout__addNewBucket",
|
||||
"append-to-body": ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_form, {
|
||||
"label-position": "top",
|
||||
"require-asterisk-position": "right",
|
||||
"label-width": "10vw",
|
||||
size: "default",
|
||||
model: newBucketConfigResult,
|
||||
rules: unref(rules)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_14, [
|
||||
createVNode(_component_el_image, {
|
||||
src: require(`./assets/${currentPicBedName.value}.webp`),
|
||||
class: "layout__addNewBucket__icon",
|
||||
style: { "position": "absolute", "top": "50%", "left": "50%", "transform": "translate(-50%, -50%)" }
|
||||
}, null, 8, ["src"])
|
||||
]),
|
||||
createVNode(_component_el_divider, { "border-style": "none" }),
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(newBucketConfig)[currentPicBedName.value].options, (option) => {
|
||||
return openBlock(), createBlock(_component_el_form_item, {
|
||||
key: option,
|
||||
prop: currentPicBedName.value + "." + option,
|
||||
label: unref(newBucketConfig)[currentPicBedName.value].configOptions[option].description
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
unref(newBucketConfig)[currentPicBedName.value].configOptions[option].component === "input" && currentPicBedName.value !== "tcyun" ? (openBlock(), createBlock(_component_el_input, {
|
||||
key: 0,
|
||||
modelValue: newBucketConfigResult[currentPicBedName.value + "." + option],
|
||||
"onUpdate:modelValue": ($event) => newBucketConfigResult[currentPicBedName.value + "." + option] = $event,
|
||||
modelModifiers: { trim: true },
|
||||
placeholder: unref(newBucketConfig)[currentPicBedName.value].configOptions[option].placeholder
|
||||
}, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])) : createCommentVNode("", true),
|
||||
currentPicBedName.value === "tcyun" && unref(newBucketConfig)[currentPicBedName.value].configOptions[option].component === "input" ? (openBlock(), createBlock(_component_el_input, {
|
||||
key: 1,
|
||||
modelValue: newBucketConfigResult[currentPicBedName.value + "." + option],
|
||||
"onUpdate:modelValue": ($event) => newBucketConfigResult[currentPicBedName.value + "." + option] = $event,
|
||||
modelModifiers: { trim: true },
|
||||
placeholder: unref(newBucketConfig)[currentPicBedName.value].configOptions[option].placeholder
|
||||
}, {
|
||||
append: withCtx(() => [
|
||||
createTextVNode(toDisplayString("-" + unref(currentPagePicBedConfig).appId), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["modelValue", "onUpdate:modelValue", "placeholder"])) : createCommentVNode("", true),
|
||||
unref(newBucketConfig)[currentPicBedName.value].configOptions[option].component === "select" ? (openBlock(), createBlock(_component_el_select, {
|
||||
key: 2,
|
||||
modelValue: newBucketConfigResult[currentPicBedName.value + "." + option],
|
||||
"onUpdate:modelValue": ($event) => newBucketConfigResult[currentPicBedName.value + "." + option] = $event,
|
||||
size: "large",
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(Object.keys(unref(newBucketConfig)[currentPicBedName.value].configOptions[option].options), (item) => {
|
||||
return openBlock(), createBlock(_component_el_option, {
|
||||
key: item,
|
||||
label: unref(newBucketConfig)[currentPicBedName.value].configOptions[option].options[item],
|
||||
value: item
|
||||
}, null, 8, ["label", "value"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["modelValue", "onUpdate:modelValue"])) : createCommentVNode("", true),
|
||||
unref(newBucketConfig)[currentPicBedName.value].configOptions[option].component === "switch" ? (openBlock(), createBlock(_component_el_switch, {
|
||||
key: 3,
|
||||
modelValue: newBucketConfigResult[currentPicBedName.value + "." + option],
|
||||
"onUpdate:modelValue": ($event) => newBucketConfigResult[currentPicBedName.value + "." + option] = $event,
|
||||
"active-value": true,
|
||||
"inactive-value": false
|
||||
}, null, 8, ["modelValue", "onUpdate:modelValue"])) : createCommentVNode("", true)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["prop", "label"]);
|
||||
}), 128)),
|
||||
createBaseVNode("div", _hoisted_15, [
|
||||
createVNode(_component_el_button, {
|
||||
icon: unref(success_filled_default),
|
||||
type: "primary",
|
||||
style: { "position": "absolute", "top": "50%", "left": "50%", "transform": "translate(-50%, -50%)" },
|
||||
onClick: _cache[4] || (_cache[4] = ($event) => createNewBucket(currentPicBedName.value))
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_MAIN_PAGE_SUBMIT")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["icon"])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["model", "rules"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue"])
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
@@ -1,4 +0,0 @@
|
||||
#manage-setting {
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
}
|
||||
542
dist/renderer/assets/ManageSetting-CcSbcH15.js
vendored
@@ -1,542 +0,0 @@
|
||||
import { d as defineComponent, av as mergeModels, aw as useModel, N as createBlock, e as openBlock, y as resolveComponent, v as withCtx, q as createVNode, f as createBaseVNode, c as createElementBlock, g as createCommentVNode, F as Fragment, h as renderList, E as normalizeStyle, t as toDisplayString, u as unref, a8 as info_filled_default, r as ref, D as watch, T, o as onBeforeMount, B as createTextVNode, ap as folder_default, m as triggerRPC, j as IRPCActionType, J as ElMessage } from "./index-BqdcQlNn.js";
|
||||
import { f as fileCacheDbInstance } from "./bucketFileDb-qvw68roE.js";
|
||||
import { f as formatFileSize, c as customRenameFormatTable } from "./common-REXFY3_s.js";
|
||||
import { g as getConfig, s as saveConfig } from "./dataSender-Bg45AIFL.js";
|
||||
import "./common-DNjr697i.js";
|
||||
const _hoisted_1$1 = { style: { "position": "absolute", "left": "0" } };
|
||||
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
||||
__name: "DynamicSwitch",
|
||||
props: /* @__PURE__ */ mergeModels({
|
||||
tooltip: {},
|
||||
activeText: {},
|
||||
inactiveText: {},
|
||||
segments: {}
|
||||
}, {
|
||||
"modelValue": { type: Boolean },
|
||||
"modelModifiers": {}
|
||||
}),
|
||||
emits: ["update:modelValue"],
|
||||
setup(__props) {
|
||||
const value = useModel(__props, "modelValue");
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_icon = resolveComponent("el-icon");
|
||||
const _component_el_tooltip = resolveComponent("el-tooltip");
|
||||
const _component_el_switch = resolveComponent("el-switch");
|
||||
const _component_el_form_item = resolveComponent("el-form-item");
|
||||
return openBlock(), createBlock(_component_el_form_item, null, {
|
||||
label: withCtx(() => [
|
||||
createBaseVNode("span", _hoisted_1$1, [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.segments, (segment, index) => {
|
||||
return openBlock(), createElementBlock("span", {
|
||||
key: index,
|
||||
style: normalizeStyle(segment.style)
|
||||
}, toDisplayString(segment.text), 5);
|
||||
}), 128)),
|
||||
_ctx.tooltip ? (openBlock(), createBlock(_component_el_tooltip, {
|
||||
key: 0,
|
||||
content: _ctx.tooltip,
|
||||
effect: "dark",
|
||||
placement: "right",
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_icon, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(info_filled_default))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["content"])) : createCommentVNode("", true)
|
||||
])
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_switch, {
|
||||
modelValue: value.value,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => value.value = $event),
|
||||
"active-text": _ctx.activeText,
|
||||
"inactive-text": _ctx.inactiveText,
|
||||
style: { "--el-switch-on-color": "#13ce66", "--el-switch-off-color": "#ff4949", "position": "absolute", "right": "0" }
|
||||
}, null, 8, ["modelValue", "active-text", "inactive-text"])
|
||||
]),
|
||||
_: 1
|
||||
});
|
||||
};
|
||||
}
|
||||
});
|
||||
const _hoisted_1 = { id: "manage-setting" };
|
||||
const _hoisted_2 = { style: { "position": "absolute", "left": "0" } };
|
||||
const _hoisted_3 = { style: { "color": "#ff4949" } };
|
||||
const _hoisted_4 = { style: { "color": "#ff4949" } };
|
||||
const _hoisted_5 = { key: 3 };
|
||||
const _hoisted_6 = { style: { "position": "absolute", "left": "0" } };
|
||||
const _hoisted_7 = { style: { "position": "absolute", "left": "0" } };
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "ManageSetting",
|
||||
setup(__props) {
|
||||
const form = ref({
|
||||
timestampRename: false,
|
||||
randomStringRename: false,
|
||||
customRename: false,
|
||||
isAutoRefresh: false,
|
||||
isShowThumbnail: false,
|
||||
isShowList: false,
|
||||
isUsePreSignedUrl: false,
|
||||
isIgnoreCase: false,
|
||||
isForceCustomUrlHttps: false,
|
||||
isEncodeUrl: false,
|
||||
isUploadKeepDirStructure: true,
|
||||
isDownloadFileKeepDirStructure: false,
|
||||
isDownloadFolderKeepDirStructure: true,
|
||||
downloadDir: "",
|
||||
pasteFormat: "markdown",
|
||||
customPasteFormat: "$url",
|
||||
PreSignedExpire: 14400,
|
||||
// seconds
|
||||
maxDownloadFileCount: 5,
|
||||
customRenameFormat: "{filename}"
|
||||
});
|
||||
const settingsKeys = Object.keys(form.value);
|
||||
const dbSize = ref(0);
|
||||
const dbSizeAvailableRate = ref("0");
|
||||
const pasteFormatList = ["markdown", "markdown-with-link", "rawurl", "html", "bbcode", "custom"];
|
||||
settingsKeys.forEach((key) => {
|
||||
watch(
|
||||
() => form.value[key],
|
||||
(newValue) => saveConfig({ [`settings.${key}`]: newValue })
|
||||
);
|
||||
});
|
||||
const switchFieldsList = [
|
||||
"isAutoRefresh",
|
||||
"isShowThumbnail",
|
||||
"isShowList",
|
||||
"isUsePreSignedUrl",
|
||||
"isForceCustomUrlHttps",
|
||||
"isEncodeUrl",
|
||||
"isUploadKeepDirStructure",
|
||||
"isIgnoreCase",
|
||||
"timestampRename",
|
||||
"randomStringRename",
|
||||
"customRename"
|
||||
];
|
||||
const switchFieldsNoTipsList = ["isShowThumbnail", "isShowList", "isUsePreSignedUrl"];
|
||||
const switchFieldsHasActiveTextList = ["isShowList"];
|
||||
const switchFieldsConfigList = switchFieldsList.map((item) => ({
|
||||
configName: item,
|
||||
segments: [
|
||||
{
|
||||
text: T(`MANAGE_SETTING_${item.toUpperCase()}_TITLE`),
|
||||
style: "color: black;"
|
||||
}
|
||||
],
|
||||
tooltip: switchFieldsNoTipsList.includes(item) ? void 0 : T(`MANAGE_SETTING_${item.toUpperCase()}_TIPS`),
|
||||
activeText: switchFieldsHasActiveTextList.includes(item) ? T(`MANAGE_SETTING_${item.toUpperCase()}_ON`) : void 0,
|
||||
inactiveText: switchFieldsHasActiveTextList.includes(item) ? T(`MANAGE_SETTING_${item.toUpperCase()}_OFF`) : void 0
|
||||
}));
|
||||
const switchFieldsSpecialList = [
|
||||
{
|
||||
configName: "isDownloadFileKeepDirStructure",
|
||||
segments: [
|
||||
{
|
||||
text: T("MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A"),
|
||||
style: "color: black;"
|
||||
},
|
||||
{
|
||||
text: T("MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_B"),
|
||||
style: "color: orange;"
|
||||
},
|
||||
{
|
||||
text: T("MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C"),
|
||||
style: "color: black;"
|
||||
}
|
||||
],
|
||||
tooltip: T("MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS")
|
||||
},
|
||||
{
|
||||
configName: "isDownloadFolderKeepDirStructure",
|
||||
segments: [
|
||||
{
|
||||
text: T("MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A"),
|
||||
style: "color: black;"
|
||||
},
|
||||
{
|
||||
text: T("MANAGE_SETTING_ISDOWNLOADFOLDERKEEPDIRSTRUCTURE_TITLE_D"),
|
||||
style: "color: coral;"
|
||||
},
|
||||
{
|
||||
text: T("MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C"),
|
||||
style: "color: black;"
|
||||
}
|
||||
],
|
||||
tooltip: T("MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS")
|
||||
}
|
||||
];
|
||||
async function initData() {
|
||||
const config = await getConfig();
|
||||
settingsKeys.forEach((key) => {
|
||||
form.value[key] = config.settings[key] ?? form.value[key];
|
||||
});
|
||||
}
|
||||
async function handleDownloadDirClick() {
|
||||
const result = await triggerRPC(IRPCActionType.MANAGE_SELECT_DOWNLOAD_FOLDER);
|
||||
if (result) {
|
||||
form.value.downloadDir = result;
|
||||
}
|
||||
}
|
||||
const handleCellClick = (row, column) => {
|
||||
navigator.clipboard.writeText(row[column.property]);
|
||||
ElMessage.success(`${T("MANAGE_SETTING_COPY_MESSAGE")}${row[column.property]}`);
|
||||
};
|
||||
function handleClearDb() {
|
||||
fileCacheDbInstance.delete().then(() => {
|
||||
getIndexDbSize();
|
||||
ElMessage.success(T("MANAGE_SETTING_CLEAR_CACHE_SUCCESS"));
|
||||
}).catch(() => {
|
||||
ElMessage.error(T("MANAGE_SETTING_CLEAR_CACHE_FAILED"));
|
||||
});
|
||||
}
|
||||
async function getIndexDbSize() {
|
||||
const size = (await navigator.storage.estimate()).usage ?? 0;
|
||||
const quota = (await navigator.storage.estimate()).quota ?? 0;
|
||||
dbSize.value = size;
|
||||
dbSizeAvailableRate.value = (100 - size / quota * 100).toFixed(2);
|
||||
}
|
||||
onBeforeMount(() => {
|
||||
initData();
|
||||
getIndexDbSize();
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_row = resolveComponent("el-row");
|
||||
const _component_el_icon = resolveComponent("el-icon");
|
||||
const _component_el_tooltip = resolveComponent("el-tooltip");
|
||||
const _component_el_button = resolveComponent("el-button");
|
||||
const _component_el_popconfirm = resolveComponent("el-popconfirm");
|
||||
const _component_el_form_item = resolveComponent("el-form-item");
|
||||
const _component_el_link = resolveComponent("el-link");
|
||||
const _component_el_input = resolveComponent("el-input");
|
||||
const _component_el_table_column = resolveComponent("el-table-column");
|
||||
const _component_el_table = resolveComponent("el-table");
|
||||
const _component_el_input_number = resolveComponent("el-input-number");
|
||||
const _component_el_radio = resolveComponent("el-radio");
|
||||
const _component_el_radio_group = resolveComponent("el-radio-group");
|
||||
const _component_el_form = resolveComponent("el-form");
|
||||
const _component_el_divider = resolveComponent("el-divider");
|
||||
const _component_el_col = resolveComponent("el-col");
|
||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
||||
createVNode(_component_el_row, {
|
||||
class: "view-title",
|
||||
align: "middle",
|
||||
justify: "center",
|
||||
style: { "font-size": "20px", "color": "black" }
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_SETTING_TITLE")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_row, { class: "setting-list" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_col, {
|
||||
span: 20,
|
||||
offset: 2
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_row, { style: { "width": "100%" } }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_form, {
|
||||
"label-position": "left",
|
||||
"label-width": "50%",
|
||||
size: "default",
|
||||
style: { "position": "relative", "width": "100%" }
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_form_item, null, {
|
||||
label: withCtx(() => [
|
||||
createBaseVNode("span", _hoisted_2, [
|
||||
createBaseVNode("span", null, toDisplayString(unref(T)("MANAGE_SETTING_CLEAR_CACHE_TITLE")), 1),
|
||||
createBaseVNode("span", _hoisted_3, toDisplayString(unref(formatFileSize)(dbSize.value) === "" ? 0 : unref(formatFileSize)(dbSize.value)), 1),
|
||||
createBaseVNode("span", null, " " + toDisplayString(unref(T)("MANAGE_SETTING_CLEAR_CACHE_FREE_TITLE")), 1),
|
||||
createBaseVNode("span", _hoisted_4, toDisplayString(dbSizeAvailableRate.value) + " %", 1),
|
||||
createVNode(_component_el_tooltip, {
|
||||
effect: "dark",
|
||||
content: unref(T)("MANAGE_SETTING_CLEAR_CACHE_TIPS"),
|
||||
placement: "right",
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_icon, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(info_filled_default))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["content"])
|
||||
])
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_popconfirm, {
|
||||
title: unref(T)("MANAGE_SETTING_CLEAR_CACHE_PROMPT"),
|
||||
"confirm-button-text": unref(T)("CONFIRM"),
|
||||
"cancel-button-text": unref(T)("CANCEL"),
|
||||
"hide-icon": "",
|
||||
persistent: false,
|
||||
teleported: "",
|
||||
onConfirm: handleClearDb
|
||||
}, {
|
||||
reference: withCtx(() => [
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
plain: "",
|
||||
style: { "position": "absolute", "right": "0" }
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_SETTING_CLEAR_CACHE_BUTTON")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["title", "confirm-button-text", "cancel-button-text"])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(switchFieldsConfigList), (item) => {
|
||||
return openBlock(), createBlock(_sfc_main$1, {
|
||||
key: item.configName,
|
||||
modelValue: form.value[item.configName],
|
||||
"onUpdate:modelValue": ($event) => form.value[item.configName] = $event,
|
||||
segments: item.segments,
|
||||
tooltip: item.tooltip,
|
||||
"config-name": item.configName,
|
||||
"active-text": item.activeText,
|
||||
"inactive-text": item.inactiveText
|
||||
}, null, 8, ["modelValue", "onUpdate:modelValue", "segments", "tooltip", "config-name", "active-text", "inactive-text"]);
|
||||
}), 128)),
|
||||
form.value.customRename ? (openBlock(), createBlock(_component_el_link, {
|
||||
key: 0,
|
||||
style: { "margin-top": "10px", "margin-bottom": "10px", "color": "#409eff" },
|
||||
underline: false
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_SETTING_CUSTOM_PATTERN_TITLE")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})) : createCommentVNode("", true),
|
||||
form.value.customRename ? (openBlock(), createBlock(_component_el_input, {
|
||||
key: 1,
|
||||
modelValue: form.value.customRenameFormat,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => form.value.customRenameFormat = $event),
|
||||
placeholder: unref(T)("MANAGE_SETTING_CUSTOM_PATTERN_TIPS"),
|
||||
style: { "width": "100%" }
|
||||
}, null, 8, ["modelValue", "placeholder"])) : createCommentVNode("", true),
|
||||
form.value.customRename ? (openBlock(), createBlock(_component_el_table, {
|
||||
key: 2,
|
||||
data: unref(customRenameFormatTable),
|
||||
style: { "width": "100%", "margin-top": "10px", "margin-left": "10%" },
|
||||
"header-cell-style": { "text-align": "center" },
|
||||
"cell-style": { "text-align": "center" },
|
||||
onCellClick: handleCellClick
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(), createElementBlock(Fragment, null, renderList(["placeholder", "description", "placeholderB", "descriptionB"], (prop) => {
|
||||
return createVNode(_component_el_table_column, {
|
||||
key: prop,
|
||||
prop,
|
||||
label: unref(T)("MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TITLE"),
|
||||
width: "150"
|
||||
}, null, 8, ["prop", "label"]);
|
||||
}), 64))
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["data"])) : createCommentVNode("", true),
|
||||
form.value.customRename ? (openBlock(), createElementBlock("br", _hoisted_5)) : createCommentVNode("", true),
|
||||
(openBlock(), createElementBlock(Fragment, null, renderList(switchFieldsSpecialList, (item) => {
|
||||
return createVNode(_sfc_main$1, {
|
||||
key: item.configName,
|
||||
modelValue: form.value[item.configName],
|
||||
"onUpdate:modelValue": ($event) => form.value[item.configName] = $event,
|
||||
segments: item.segments,
|
||||
tooltip: item.tooltip,
|
||||
"config-name": item.configName
|
||||
}, null, 8, ["modelValue", "onUpdate:modelValue", "segments", "tooltip", "config-name"]);
|
||||
}), 64)),
|
||||
createVNode(_component_el_form_item, null, {
|
||||
label: withCtx(() => [
|
||||
createBaseVNode("span", _hoisted_6, [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TITLE")) + " ", 1),
|
||||
createVNode(_component_el_tooltip, {
|
||||
effect: "dark",
|
||||
content: unref(T)("MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS"),
|
||||
placement: "right",
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_icon, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(info_filled_default))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["content"])
|
||||
])
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input_number, {
|
||||
modelValue: form.value.maxDownloadFileCount,
|
||||
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => form.value.maxDownloadFileCount = $event),
|
||||
style: { "position": "absolute", "right": "0" },
|
||||
placeholder: unref(T)("MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_INPUT_TIPS"),
|
||||
min: 1,
|
||||
max: 9999,
|
||||
step: 1
|
||||
}, null, 8, ["modelValue", "placeholder"])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_form_item, null, {
|
||||
label: withCtx(() => [
|
||||
createBaseVNode("span", _hoisted_7, [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TITLE")) + " ", 1),
|
||||
createVNode(_component_el_tooltip, {
|
||||
effect: "dark",
|
||||
content: unref(T)("MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS"),
|
||||
placement: "right",
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_icon, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(info_filled_default))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["content"])
|
||||
])
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input_number, {
|
||||
modelValue: form.value.PreSignedExpire,
|
||||
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => form.value.PreSignedExpire = $event),
|
||||
style: { "position": "absolute", "right": "0" },
|
||||
placeholder: unref(T)("MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS"),
|
||||
min: 1,
|
||||
step: 1
|
||||
}, null, 8, ["modelValue", "placeholder"])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_link, {
|
||||
style: { "margin-top": "10px", "margin-bottom": "10px", "color": "#409eff" },
|
||||
underline: false
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_SETTING_CHOOSE_COPY_FORMAT_TITLE")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
_cache[6] || (_cache[6] = createBaseVNode("br", null, null, -1)),
|
||||
createVNode(_component_el_radio_group, {
|
||||
modelValue: form.value.pasteFormat,
|
||||
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => form.value.pasteFormat = $event)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(), createElementBlock(Fragment, null, renderList(pasteFormatList, (item) => {
|
||||
return createVNode(_component_el_radio, {
|
||||
key: item,
|
||||
value: item
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)(`MANAGE_SETTING_CHOOSE_COPY_FORMAT_${item.toUpperCase().replace(/-/g, "_")}`)), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["value"]);
|
||||
}), 64))
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue"]),
|
||||
form.value.pasteFormat === "custom" ? (openBlock(), createBlock(_component_el_link, {
|
||||
key: 4,
|
||||
style: { "margin-top": "10px", "margin-bottom": "10px", "color": "#409eff" },
|
||||
underline: false
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_SETTING_CUSTOM_COPY_FORMAT_TITLE")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})) : createCommentVNode("", true),
|
||||
form.value.pasteFormat === "custom" ? (openBlock(), createBlock(_component_el_input, {
|
||||
key: 5,
|
||||
modelValue: form.value.customPasteFormat,
|
||||
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => form.value.customPasteFormat = $event),
|
||||
placeholder: unref(T)("MANAGE_SETTING_CUSTOM_COPY_FORMAT_TIPS"),
|
||||
style: { "width": "100%" }
|
||||
}, null, 8, ["modelValue", "placeholder"])) : createCommentVNode("", true),
|
||||
createBaseVNode("div", null, [
|
||||
createVNode(_component_el_link, {
|
||||
style: { "margin-top": "10px", "margin-bottom": "10px", "color": "#409eff" },
|
||||
underline: false
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TITLE")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
createVNode(_component_el_input, {
|
||||
modelValue: form.value.downloadDir,
|
||||
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => form.value.downloadDir = $event),
|
||||
disabled: "",
|
||||
placeholder: unref(T)("MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TIPS"),
|
||||
style: { "width": "100%", "margin-top": "10px" }
|
||||
}, {
|
||||
append: withCtx(() => [
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
onClick: handleDownloadDirClick
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_icon, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(folder_default))
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createTextVNode(" " + toDisplayString(unref(T)("MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue", "placeholder"])
|
||||
]),
|
||||
_: 1,
|
||||
__: [6]
|
||||
}),
|
||||
createVNode(_component_el_divider, { "border-style": "none" })
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
182
dist/renderer/assets/MiniPage-Cu5L_RYi.js
vendored
@@ -1,182 +0,0 @@
|
||||
import { d as defineComponent, r as ref, o as onBeforeMount, D as watch, s as sendRPC, j as IRPCActionType, b as onBeforeUnmount, c as createElementBlock, e as openBlock, f as createBaseVNode, g as createCommentVNode, x as withModifiers, E as normalizeStyle, n as normalizeClass, u as unref, H as osGlobal, k as getConfig, m as triggerRPC, J as ElMessage, T } from "./index-BqdcQlNn.js";
|
||||
import { i as isUrl } from "./common-DNjr697i.js";
|
||||
const _hoisted_1 = { id: "mini-page" };
|
||||
const _hoisted_2 = ["src"];
|
||||
const __default__ = {
|
||||
name: "MiniPage"
|
||||
};
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
...__default__,
|
||||
setup(__props) {
|
||||
const logoPath = ref("");
|
||||
const dragover = ref(false);
|
||||
const progress = ref(0);
|
||||
const isShowingProgress = ref(false);
|
||||
const draggingState = ref(false);
|
||||
const wX = ref(-1);
|
||||
const wY = ref(-1);
|
||||
const screenX = ref(-1);
|
||||
const screenY = ref(-1);
|
||||
async function initLogoPath() {
|
||||
const config = await getConfig();
|
||||
if (config) {
|
||||
if (config.settings?.isCustomMiniIcon && config.settings?.customMiniIcon) {
|
||||
logoPath.value = "data:image/jpg;base64," + await triggerRPC(IRPCActionType.MANAGE_CONVERT_PATH_TO_BASE64, config.settings.customMiniIcon);
|
||||
}
|
||||
}
|
||||
}
|
||||
onBeforeMount(async () => {
|
||||
await initLogoPath();
|
||||
window.electron.electronAPI.ipcRenderer.on("uploadProgress", (_, _progress) => {
|
||||
if (_progress !== -1) {
|
||||
isShowingProgress.value = true;
|
||||
progress.value = _progress;
|
||||
} else {
|
||||
progress.value = 100;
|
||||
}
|
||||
});
|
||||
window.electron.electronAPI.ipcRenderer.on("updateMiniIcon", async () => {
|
||||
await initLogoPath();
|
||||
});
|
||||
window.addEventListener("mousedown", handleMouseDown, false);
|
||||
window.addEventListener("mousemove", handleMouseMove, false);
|
||||
window.addEventListener("mouseup", handleMouseUp, false);
|
||||
});
|
||||
watch(progress, (val) => {
|
||||
if (val === 100) {
|
||||
setTimeout(() => {
|
||||
isShowingProgress.value = false;
|
||||
}, 1e3);
|
||||
setTimeout(() => {
|
||||
progress.value = 0;
|
||||
}, 1200);
|
||||
}
|
||||
});
|
||||
function onDrop(e) {
|
||||
dragover.value = false;
|
||||
if (e.dataTransfer?.files?.length) {
|
||||
ipcSendFiles(e.dataTransfer.files);
|
||||
} else if (e.dataTransfer?.items) {
|
||||
const items = e.dataTransfer.items;
|
||||
if (items.length === 2 && items[0].type === "text/uri-list") {
|
||||
handleURLDrag(items, e.dataTransfer);
|
||||
} else if (items[0].type === "text/plain") {
|
||||
const str = e.dataTransfer.getData(items[0].type);
|
||||
if (isUrl(str)) {
|
||||
sendRPC(IRPCActionType.UPLOAD_CHOOSED_FILES, [{ path: str }]);
|
||||
} else {
|
||||
ElMessage.error(T("TIPS_DRAG_VALID_PICTURE_OR_URL"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function handleURLDrag(items, dataTransfer) {
|
||||
const urlString = dataTransfer.getData(items[1].type);
|
||||
const urlMatch = urlString.match(/<img.*src="(.*?)"/);
|
||||
if (urlMatch) {
|
||||
sendRPC(IRPCActionType.UPLOAD_CHOOSED_FILES, [
|
||||
{
|
||||
path: urlMatch[1]
|
||||
}
|
||||
]);
|
||||
} else {
|
||||
ElMessage.error(T("TIPS_DRAG_VALID_PICTURE_OR_URL"));
|
||||
}
|
||||
}
|
||||
function openUploadWindow() {
|
||||
document.getElementById("file-uploader").click();
|
||||
}
|
||||
function onChange(e) {
|
||||
ipcSendFiles(e.target.files);
|
||||
document.getElementById("file-uploader").value = "";
|
||||
}
|
||||
function ipcSendFiles(files) {
|
||||
const sendFiles = [];
|
||||
Array.from(files).forEach((item) => {
|
||||
const obj = {
|
||||
name: item.name,
|
||||
path: item.webkitRelativePath
|
||||
};
|
||||
sendFiles.push(obj);
|
||||
});
|
||||
sendRPC(IRPCActionType.UPLOAD_CHOOSED_FILES, sendFiles);
|
||||
}
|
||||
function handleMouseDown(e) {
|
||||
draggingState.value = true;
|
||||
wX.value = e.pageX;
|
||||
wY.value = e.pageY;
|
||||
screenX.value = e.screenX;
|
||||
screenY.value = e.screenY;
|
||||
}
|
||||
function handleMouseMove(e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
if (draggingState.value) {
|
||||
const xLoc = e.screenX - wX.value;
|
||||
const yLoc = e.screenY - wY.value;
|
||||
sendRPC(IRPCActionType.SET_MINI_WINDOW_POS, {
|
||||
x: xLoc,
|
||||
y: yLoc,
|
||||
width: 64,
|
||||
height: 64
|
||||
});
|
||||
}
|
||||
}
|
||||
function handleMouseUp(e) {
|
||||
draggingState.value = false;
|
||||
if (screenX.value === e.screenX && screenY.value === e.screenY) {
|
||||
if (e.button === 0) {
|
||||
openUploadWindow();
|
||||
} else {
|
||||
openContextMenu();
|
||||
}
|
||||
}
|
||||
}
|
||||
function openContextMenu() {
|
||||
sendRPC(IRPCActionType.SHOW_MINI_PAGE_MENU);
|
||||
}
|
||||
onBeforeUnmount(() => {
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners("uploadProgress");
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners("updateMiniIcon");
|
||||
window.removeEventListener("mousedown", handleMouseDown, false);
|
||||
window.removeEventListener("mousemove", handleMouseMove, false);
|
||||
window.removeEventListener("mouseup", handleMouseUp, false);
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
||||
createBaseVNode("div", {
|
||||
id: "upload-area",
|
||||
class: normalizeClass({
|
||||
"is-dragover": dragover.value,
|
||||
uploading: isShowingProgress.value,
|
||||
linux: unref(osGlobal) === "linux"
|
||||
}),
|
||||
style: normalizeStyle({ backgroundPosition: "0 " + progress.value + "%" }),
|
||||
onDrop: withModifiers(onDrop, ["prevent"]),
|
||||
onDragover: _cache[0] || (_cache[0] = withModifiers(($event) => dragover.value = true, ["prevent"])),
|
||||
onDragleave: _cache[1] || (_cache[1] = withModifiers(($event) => dragover.value = false, ["prevent"]))
|
||||
}, [
|
||||
!dragover.value && !isShowingProgress.value ? (openBlock(), createElementBlock("img", {
|
||||
key: 0,
|
||||
src: logoPath.value ? logoPath.value : require("../assets/squareLogo.png"),
|
||||
style: { "width": "100%", "height": "100%", "border-radius": "50%" }
|
||||
}, null, 8, _hoisted_2)) : createCommentVNode("", true),
|
||||
createBaseVNode("div", {
|
||||
id: "upload-dragger",
|
||||
onDblclick: openUploadWindow
|
||||
}, [
|
||||
createBaseVNode("input", {
|
||||
id: "file-uploader",
|
||||
type: "file",
|
||||
multiple: "",
|
||||
onChange
|
||||
}, null, 32)
|
||||
], 32)
|
||||
], 38)
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
43
dist/renderer/assets/MiniPage-e-N9dAYG.css
vendored
@@ -1,43 +0,0 @@
|
||||
#mini-page {
|
||||
background: #409eff;
|
||||
color: #fff;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
border-radius: 50%;
|
||||
text-align: center;
|
||||
line-height: 100vh;
|
||||
font-size: 40px;
|
||||
background-size: 90vh 90vw;
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
position: relative;
|
||||
border: 4px solid #fff;
|
||||
box-sizing: border-box;
|
||||
cursor: pointer;
|
||||
}
|
||||
#mini-page.linux {
|
||||
border-radius: 0;
|
||||
background-size: 100vh 100vw;
|
||||
}
|
||||
#mini-page #upload-area {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
border-radius: 50%;
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
#mini-page #upload-area.linux {
|
||||
border-radius: 0;
|
||||
}
|
||||
#mini-page #upload-area.uploading {
|
||||
background: linear-gradient(to top, #409eff 50%, #fff 51%);
|
||||
background-size: 200%;
|
||||
}
|
||||
#mini-page #upload-area #upload-dragger {
|
||||
height: 100%;
|
||||
}
|
||||
#mini-page #upload-area.is-dragover {
|
||||
background: rgba(0,0,0,0.3);
|
||||
}
|
||||
#mini-page #file-uploader {
|
||||
display: none;
|
||||
}
|
||||
2854
dist/renderer/assets/PicGoSetting-BLDICmxR.js
vendored
111
dist/renderer/assets/PicGoSetting-CmM9FTij.css
vendored
@@ -1,111 +0,0 @@
|
||||
.el-message {
|
||||
left: 60%;
|
||||
}
|
||||
.view-title .el-icon-document {
|
||||
margin-left: 8px;
|
||||
cursor: pointer;
|
||||
transition: color 0.2s ease-in-out;
|
||||
}
|
||||
.view-title .el-icon-document:hover {
|
||||
color: #49b1f5;
|
||||
}
|
||||
.el-tabs__item {
|
||||
color: #fff;
|
||||
}
|
||||
#piclist-setting {
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
left: 142px;
|
||||
right: 0;
|
||||
}
|
||||
#piclist-setting .sub-title {
|
||||
font-size: 14px;
|
||||
}
|
||||
#piclist-setting .setting-list {
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
width: 100%;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form {
|
||||
width: 100%;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-top: 8px;
|
||||
padding-bottom: 8px;
|
||||
border-bottom: 1px solid #777;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form-item::after {
|
||||
display: none;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form-item::before {
|
||||
display: none;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form-item__content {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-basis: 50%;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form .el-form-item__label {
|
||||
line-height: 32px;
|
||||
padding-bottom: 0;
|
||||
color: #eee;
|
||||
flex-basis: 50%;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form .el-form-item__custom-label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form .el-button-group {
|
||||
width: 100%;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form .el-button-group .el-button {
|
||||
width: 50%;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form .el-radio-group {
|
||||
margin-left: 25px;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form .el-switch__label {
|
||||
color: #eee;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form .el-switch__label.is-active {
|
||||
color: #409eff;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form .el-icon-question {
|
||||
margin-left: 4px;
|
||||
color: #eee;
|
||||
cursor: pointer;
|
||||
transition: 0.2s color ease-in-out;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form .el-icon-question:hover {
|
||||
color: #409eff;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form .el-checkbox-group label {
|
||||
margin-right: 30px;
|
||||
width: 100px;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form .el-checkbox+.el-checkbox {
|
||||
margin-right: 30px;
|
||||
margin-left: 0;
|
||||
}
|
||||
#piclist-setting .setting-list .el-form .confirm-button {
|
||||
width: 100%;
|
||||
}
|
||||
#piclist-setting .server-dialog .notice-text {
|
||||
text-align: center;
|
||||
color: #49b1f5;
|
||||
}
|
||||
#piclist-setting .server-dialog .el-dialog__body {
|
||||
padding-top: 0;
|
||||
}
|
||||
#piclist-setting .server-dialog .el-form-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
234
dist/renderer/assets/Plugin-Bpit55id.css
vendored
@@ -1,234 +0,0 @@
|
||||
#config-form .el-form label {
|
||||
line-height: 22px;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
#config-form .el-form-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
border-bottom: 1px solid #777;
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
#config-form .el-form-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
#config-form .el-form-item__content {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
#config-form .el-form .el-button-group {
|
||||
width: 100%;
|
||||
}
|
||||
#config-form .el-form .el-button-group .el-button {
|
||||
width: 50%;
|
||||
}
|
||||
#config-form .el-form .el-radio-group {
|
||||
margin-left: 25px;
|
||||
}
|
||||
#config-form .el-form .el-switch__label.is-active {
|
||||
color: #409eff;
|
||||
}
|
||||
#config-form.white .el-form-item {
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
#plugin-view {
|
||||
position: absolute;
|
||||
left: 142px;
|
||||
right: 0;
|
||||
}
|
||||
#plugin-view .el-loading-mask {
|
||||
background-color: rgba(0,0,0,0.8);
|
||||
}
|
||||
#plugin-view .plugin-list {
|
||||
align-content: flex-start;
|
||||
height: 600px;
|
||||
box-sizing: border-box;
|
||||
padding: 8px 15px;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
position: absolute;
|
||||
top: 70px;
|
||||
left: 5px;
|
||||
transition: all 0.2s ease-in-out 0.1s;
|
||||
width: 100%;
|
||||
}
|
||||
#plugin-view .plugin-list .el-loading-mask {
|
||||
left: 20px;
|
||||
width: calc(100% - 40px);
|
||||
}
|
||||
#plugin-view .view-title {
|
||||
color: #eee;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
margin: 10px auto;
|
||||
position: relative;
|
||||
}
|
||||
#plugin-view .view-title i.el-icon-goods {
|
||||
margin-left: 4px;
|
||||
font-size: 20px;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
transition: color 0.2s ease-in-out;
|
||||
}
|
||||
#plugin-view .view-title i.el-icon-goods:hover {
|
||||
color: #49b1f5;
|
||||
}
|
||||
#plugin-view .view-title i.el-icon-update {
|
||||
position: absolute;
|
||||
right: 35px;
|
||||
top: 8px;
|
||||
font-size: 20px;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
transition: color 0.2s ease-in-out;
|
||||
}
|
||||
#plugin-view .view-title i.el-icon-update:hover {
|
||||
color: #49b1f5;
|
||||
}
|
||||
#plugin-view .view-title i.el-icon-download {
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
top: 8px;
|
||||
font-size: 20px;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
transition: color 0.2s ease-in-out;
|
||||
}
|
||||
#plugin-view .view-title i.el-icon-download:hover {
|
||||
color: #49b1f5;
|
||||
}
|
||||
#plugin-view .handle-bar {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
#plugin-view .handle-bar.cut-width {
|
||||
padding-right: 8px;
|
||||
}
|
||||
#plugin-view .el-input__inner {
|
||||
border-radius: 0;
|
||||
}
|
||||
#plugin-view .plugin-item {
|
||||
box-sizing: border-box;
|
||||
height: 80px;
|
||||
background: #444;
|
||||
padding: 8px;
|
||||
user-select: text;
|
||||
transition: all 0.2s ease-in-out;
|
||||
position: relative;
|
||||
}
|
||||
#plugin-view .plugin-item__container {
|
||||
height: 80px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
#plugin-view .plugin-item .cli-only-badge {
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
top: 0;
|
||||
font-size: 12px;
|
||||
padding: 3px 8px;
|
||||
background: #49b1f5;
|
||||
color: #eee;
|
||||
}
|
||||
#plugin-view .plugin-item.darwin {
|
||||
background: rgba(31,48,51,0.75);
|
||||
}
|
||||
#plugin-view .plugin-item.darwin:hover {
|
||||
background: rgba(27,42,45,0.85);
|
||||
}
|
||||
#plugin-view .plugin-item:hover {
|
||||
background: #333;
|
||||
}
|
||||
#plugin-view .plugin-item__logo {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
float: left;
|
||||
}
|
||||
#plugin-view .plugin-item__content {
|
||||
float: left;
|
||||
width: calc(100% - 72px);
|
||||
height: 64px;
|
||||
color: #ddd;
|
||||
margin-left: 8px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
}
|
||||
#plugin-view .plugin-item__content.disabled {
|
||||
color: #aaa;
|
||||
}
|
||||
#plugin-view .plugin-item__name {
|
||||
font-size: 16px;
|
||||
height: 22px;
|
||||
line-height: 22px;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
#plugin-view .plugin-item__name:hover {
|
||||
color: #1b9ef3;
|
||||
}
|
||||
#plugin-view .plugin-item__desc {
|
||||
font-size: 14px;
|
||||
height: 21px;
|
||||
line-height: 21px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#plugin-view .plugin-item__info-bar {
|
||||
font-size: 14px;
|
||||
height: 21px;
|
||||
line-height: 28px;
|
||||
position: relative;
|
||||
}
|
||||
#plugin-view .plugin-item__author {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#plugin-view .plugin-item__config {
|
||||
float: right;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
#plugin-view .plugin-item__config:hover {
|
||||
color: #1b9ef3;
|
||||
}
|
||||
#plugin-view .plugin-item .config-button {
|
||||
font-size: 12px;
|
||||
color: #ddd;
|
||||
background: #222;
|
||||
padding: 1px 8px;
|
||||
height: 18px;
|
||||
line-height: 18px;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
right: 20px;
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
#plugin-view .plugin-item .config-button.reload {
|
||||
right: 0px;
|
||||
}
|
||||
#plugin-view .plugin-item .config-button.ing {
|
||||
right: 0px;
|
||||
}
|
||||
#plugin-view .plugin-item .config-button.install {
|
||||
right: 0px;
|
||||
}
|
||||
#plugin-view .plugin-item .config-button.install:hover {
|
||||
background: #1b9ef3;
|
||||
color: #fff;
|
||||
}
|
||||
#plugin-view .reload-mask {
|
||||
position: absolute;
|
||||
width: calc(100% - 40px);
|
||||
bottom: -320px;
|
||||
text-align: center;
|
||||
background: rgba(0,0,0,0.4);
|
||||
padding: 10px 0;
|
||||
}
|
||||
#plugin-view .reload-mask.cut-width {
|
||||
width: calc(100% - 48px);
|
||||
}
|
||||
793
dist/renderer/assets/Plugin-DOBpniPg.js
vendored
@@ -1,793 +0,0 @@
|
||||
import { d as defineComponent, r as ref, a as reactive, D as watch, c as createElementBlock, e as openBlock, n as normalizeClass, q as createVNode, y as resolveComponent, v as withCtx, b1 as renderSlot, u as unref, T, F as Fragment, h as renderList, N as createBlock, g as createCommentVNode, b2 as cloneDeep, b3 as union, k as getConfig, ae as ElMessageBox, am as computed, o as onBeforeMount, bf as PICGO_HANDLE_PLUGIN_DONE, U as updatePicBedGlobal, bg as PICGO_CONFIG_PLUGIN, bh as PICGO_HANDLE_PLUGIN_ING, bi as PICGO_TOGGLE_PLUGIN, bj as debounce, M as onMounted, s as sendRPC, j as IRPCActionType, af as saveConfig, b as onBeforeUnmount, f as createBaseVNode, w as withDirectives, B as createTextVNode, t as toDisplayString, i as resolveDirective, ac as vShow, p as configPaths, bk as goods_default, aT as refresh_default, aI as download_default, A as close_default, a5 as tools_default, bl as remove_default, H as osGlobal, bd as toRaw } from "./index-BqdcQlNn.js";
|
||||
import { b as handleStreamlinePluginName } from "./common-DNjr697i.js";
|
||||
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
||||
__name: "ConfigFormForPlugin",
|
||||
props: {
|
||||
config: {},
|
||||
type: {},
|
||||
id: {},
|
||||
colorMode: {}
|
||||
},
|
||||
setup(__props, { expose: __expose }) {
|
||||
const props = __props;
|
||||
const $form = ref();
|
||||
const configList = ref([]);
|
||||
const ruleForm = reactive({});
|
||||
watch(
|
||||
() => props.config,
|
||||
(val) => {
|
||||
handleConfigChange(val);
|
||||
},
|
||||
{
|
||||
deep: true,
|
||||
immediate: true
|
||||
}
|
||||
);
|
||||
function handleConfigChange(val) {
|
||||
handleConfig(val);
|
||||
}
|
||||
async function validate() {
|
||||
return new Promise((resolve) => {
|
||||
$form.value?.validate((valid) => {
|
||||
if (valid) {
|
||||
resolve(ruleForm);
|
||||
} else {
|
||||
resolve(false);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
function getConfigType() {
|
||||
switch (props.type) {
|
||||
case "plugin": {
|
||||
return props.id;
|
||||
}
|
||||
case "uploader": {
|
||||
return `picBed.${props.id}`;
|
||||
}
|
||||
case "transformer": {
|
||||
return `transformer.${props.id}`;
|
||||
}
|
||||
default:
|
||||
return "unknown";
|
||||
}
|
||||
}
|
||||
async function handleConfig(val) {
|
||||
const config = await getCurConfigFormData();
|
||||
Object.assign(ruleForm, config);
|
||||
if (val.length > 0) {
|
||||
configList.value = cloneDeep(val).map((item) => {
|
||||
let defaultValue = item.default !== void 0 ? item.default : item.type === "checkbox" ? [] : null;
|
||||
if (item.type === "checkbox") {
|
||||
const defaults = item.choices?.filter((i) => {
|
||||
return i.checked;
|
||||
}).map((i) => i.value) || [];
|
||||
defaultValue = union(defaultValue, defaults);
|
||||
}
|
||||
if (config && config[item.name] !== void 0) {
|
||||
defaultValue = config[item.name];
|
||||
}
|
||||
ruleForm[item.name] = defaultValue;
|
||||
return item;
|
||||
});
|
||||
}
|
||||
}
|
||||
async function getCurConfigFormData() {
|
||||
return await getConfig(`${props.id}`) || {};
|
||||
}
|
||||
function updateRuleForm(key, value) {
|
||||
try {
|
||||
ruleForm[key] = value;
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
__expose({
|
||||
updateRuleForm,
|
||||
validate,
|
||||
getConfigType
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_input = resolveComponent("el-input");
|
||||
const _component_el_form_item = resolveComponent("el-form-item");
|
||||
const _component_el_option = resolveComponent("el-option");
|
||||
const _component_el_select = resolveComponent("el-select");
|
||||
const _component_el_switch = resolveComponent("el-switch");
|
||||
const _component_el_form = resolveComponent("el-form");
|
||||
return openBlock(), createElementBlock("div", {
|
||||
id: "config-form",
|
||||
class: normalizeClass(props.colorMode === "white" ? "white" : "")
|
||||
}, [
|
||||
createVNode(_component_el_form, {
|
||||
ref_key: "$form",
|
||||
ref: $form,
|
||||
"label-position": "left",
|
||||
"label-width": "50%",
|
||||
model: ruleForm,
|
||||
size: "small"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOADER_CONFIG_NAME"),
|
||||
required: "",
|
||||
prop: "_configName"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input, {
|
||||
modelValue: ruleForm._configName,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => ruleForm._configName = $event),
|
||||
type: "input",
|
||||
placeholder: unref(T)("UPLOADER_CONFIG_PLACEHOLDER")
|
||||
}, null, 8, ["modelValue", "placeholder"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(configList.value, (item, index) => {
|
||||
return openBlock(), createBlock(_component_el_form_item, {
|
||||
key: item.name + index,
|
||||
label: item.alias || item.name,
|
||||
required: item.required,
|
||||
prop: item.name
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
item.type === "input" || item.type === "password" ? (openBlock(), createBlock(_component_el_input, {
|
||||
key: 0,
|
||||
modelValue: ruleForm[item.name],
|
||||
"onUpdate:modelValue": ($event) => ruleForm[item.name] = $event,
|
||||
type: "input",
|
||||
placeholder: item.message || item.name
|
||||
}, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])) : item.type === "list" && item.choices ? (openBlock(), createBlock(_component_el_select, {
|
||||
key: 1,
|
||||
modelValue: ruleForm[item.name],
|
||||
"onUpdate:modelValue": ($event) => ruleForm[item.name] = $event,
|
||||
placeholder: item.message || item.name,
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(item.choices, (choice) => {
|
||||
return openBlock(), createBlock(_component_el_option, {
|
||||
key: choice.name || choice.value || choice,
|
||||
label: choice.name || choice.value || choice,
|
||||
value: choice.value || choice
|
||||
}, null, 8, ["label", "value"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["modelValue", "onUpdate:modelValue", "placeholder"])) : item.type === "checkbox" && item.choices ? (openBlock(), createBlock(_component_el_select, {
|
||||
key: 2,
|
||||
modelValue: ruleForm[item.name],
|
||||
"onUpdate:modelValue": ($event) => ruleForm[item.name] = $event,
|
||||
placeholder: item.message || item.name,
|
||||
multiple: "",
|
||||
"collapse-tags": "",
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(item.choices, (choice) => {
|
||||
return openBlock(), createBlock(_component_el_option, {
|
||||
key: choice.value || choice,
|
||||
label: choice.name || choice.value || choice,
|
||||
value: choice.value || choice
|
||||
}, null, 8, ["label", "value"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["modelValue", "onUpdate:modelValue", "placeholder"])) : item.type === "confirm" ? (openBlock(), createBlock(_component_el_switch, {
|
||||
key: 3,
|
||||
modelValue: ruleForm[item.name],
|
||||
"onUpdate:modelValue": ($event) => ruleForm[item.name] = $event,
|
||||
"active-text": "yes",
|
||||
"inactive-text": "no"
|
||||
}, null, 8, ["modelValue", "onUpdate:modelValue"])) : createCommentVNode("", true)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["label", "required", "prop"]);
|
||||
}), 128)),
|
||||
renderSlot(_ctx.$slots, "default")
|
||||
]),
|
||||
_: 3
|
||||
}, 8, ["model"])
|
||||
], 2);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _hoisted_1 = { id: "plugin-view" };
|
||||
const _hoisted_2 = { class: "view-title" };
|
||||
const _hoisted_3 = {
|
||||
key: 0,
|
||||
class: "cli-only-badge",
|
||||
title: "CLI only"
|
||||
};
|
||||
const _hoisted_4 = ["src", "onerror"];
|
||||
const _hoisted_5 = ["onClick"];
|
||||
const _hoisted_6 = ["title"];
|
||||
const _hoisted_7 = { class: "plugin-item__info-bar" };
|
||||
const _hoisted_8 = { class: "plugin-item__author" };
|
||||
const _hoisted_9 = { class: "plugin-item__config" };
|
||||
const _hoisted_10 = ["onClick"];
|
||||
const _hoisted_11 = {
|
||||
key: 1,
|
||||
class: "config-button ing"
|
||||
};
|
||||
const _hoisted_12 = {
|
||||
key: 1,
|
||||
class: "config-button ing"
|
||||
};
|
||||
const _hoisted_13 = {
|
||||
key: 0,
|
||||
class: "config-button ing"
|
||||
};
|
||||
const __default__ = {
|
||||
name: "PluginPage"
|
||||
};
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
...__default__,
|
||||
setup(__props) {
|
||||
const $confirm = ElMessageBox.confirm;
|
||||
const searchText = ref("");
|
||||
const pluginList = ref([]);
|
||||
const config = ref([]);
|
||||
const currentType = ref("plugin");
|
||||
const configName = ref("");
|
||||
const dialogVisible = ref(false);
|
||||
const pluginNameList = ref([]);
|
||||
const loading = ref(true);
|
||||
const needReload = ref(false);
|
||||
const latestVersionMap = reactive({});
|
||||
const pluginListToolTip = T("PLUGIN_LIST");
|
||||
const importLocalPluginToolTip = T("PLUGIN_IMPORT_LOCAL");
|
||||
const updateAllToolTip = T("PLUGIN_UPDATE_ALL");
|
||||
const defaultLogo = ref('this.src="file://roundLogo.png"');
|
||||
const $configForm = ref(null);
|
||||
const npmSearchText = computed(() => {
|
||||
return searchText.value.match("picgo-plugin-") ? searchText.value : searchText.value !== "" ? `picgo-plugin-${searchText.value}` : searchText.value;
|
||||
});
|
||||
let getSearchResult;
|
||||
watch(npmSearchText, (val) => {
|
||||
if (val) {
|
||||
loading.value = true;
|
||||
pluginList.value = [];
|
||||
getSearchResult(val);
|
||||
} else {
|
||||
getPluginList();
|
||||
}
|
||||
});
|
||||
watch(dialogVisible, (val) => {
|
||||
if (val) {
|
||||
document.querySelector(".main-content.el-row").style.zIndex = 101;
|
||||
} else {
|
||||
document.querySelector(".main-content.el-row").style.zIndex = 10;
|
||||
}
|
||||
});
|
||||
async function getLatestVersionOfPlugIn(pluginName) {
|
||||
try {
|
||||
const res = await window.node.axios.get(`https://registry.npmjs.com/${pluginName}`);
|
||||
latestVersionMap[pluginName] = res.data["dist-tags"].latest;
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
onBeforeMount(async () => {
|
||||
window.electron.electronAPI.ipcRenderer.on("hideLoading", () => {
|
||||
loading.value = false;
|
||||
});
|
||||
window.electron.electronAPI.ipcRenderer.on(PICGO_HANDLE_PLUGIN_DONE, (_, fullName) => {
|
||||
pluginList.value.forEach((item) => {
|
||||
if (item.fullName === fullName || item.name === fullName) {
|
||||
item.ing = false;
|
||||
}
|
||||
});
|
||||
loading.value = false;
|
||||
});
|
||||
window.electron.electronAPI.ipcRenderer.on("pluginList", (_, list) => {
|
||||
pluginList.value = list;
|
||||
pluginNameList.value = list.map((item) => item.fullName);
|
||||
for (const item of pluginList.value) {
|
||||
getLatestVersionOfPlugIn(item.fullName);
|
||||
}
|
||||
loading.value = false;
|
||||
});
|
||||
window.electron.electronAPI.ipcRenderer.on(
|
||||
"installPlugin",
|
||||
(_, {
|
||||
success,
|
||||
body
|
||||
}) => {
|
||||
loading.value = false;
|
||||
pluginList.value.forEach((item) => {
|
||||
if (item.fullName === body) {
|
||||
item.ing = false;
|
||||
item.hasInstall = success;
|
||||
}
|
||||
});
|
||||
}
|
||||
);
|
||||
window.electron.electronAPI.ipcRenderer.on("updateSuccess", (_, plugin) => {
|
||||
loading.value = false;
|
||||
pluginList.value.forEach((item) => {
|
||||
if (item.fullName === plugin) {
|
||||
item.ing = false;
|
||||
item.hasInstall = true;
|
||||
}
|
||||
updatePicBedGlobal();
|
||||
});
|
||||
handleReload();
|
||||
getPluginList();
|
||||
});
|
||||
window.electron.electronAPI.ipcRenderer.on("uninstallSuccess", (_, plugin) => {
|
||||
loading.value = false;
|
||||
pluginList.value = pluginList.value.filter((item) => {
|
||||
if (item.fullName === plugin) {
|
||||
if (item.config.transformer.name) {
|
||||
handleRestoreState("transformer", item.config.transformer.name);
|
||||
}
|
||||
if (item.config.uploader.name) {
|
||||
handleRestoreState("uploader", item.config.uploader.name);
|
||||
}
|
||||
updatePicBedGlobal();
|
||||
}
|
||||
return item.fullName !== plugin;
|
||||
});
|
||||
pluginNameList.value = pluginNameList.value.filter((item) => item !== plugin);
|
||||
});
|
||||
window.electron.electronAPI.ipcRenderer.on(
|
||||
PICGO_CONFIG_PLUGIN,
|
||||
(_, _currentType, _configName, _config) => {
|
||||
currentType.value = _currentType;
|
||||
configName.value = _configName;
|
||||
config.value = _config;
|
||||
dialogVisible.value = true;
|
||||
}
|
||||
);
|
||||
window.electron.electronAPI.ipcRenderer.on(PICGO_HANDLE_PLUGIN_ING, (_, fullName) => {
|
||||
pluginList.value.forEach((item) => {
|
||||
if (item.fullName === fullName || item.name === fullName) {
|
||||
item.ing = true;
|
||||
}
|
||||
});
|
||||
loading.value = true;
|
||||
});
|
||||
window.electron.electronAPI.ipcRenderer.on(PICGO_TOGGLE_PLUGIN, (_, fullName, enabled) => {
|
||||
const plugin = pluginList.value.find((item) => item.fullName === fullName);
|
||||
if (plugin) {
|
||||
plugin.enabled = enabled;
|
||||
updatePicBedGlobal();
|
||||
needReload.value = true;
|
||||
}
|
||||
});
|
||||
getPluginList();
|
||||
getSearchResult = debounce(_getSearchResult, 50);
|
||||
needReload.value = await getConfig(configPaths.needReload) || false;
|
||||
});
|
||||
async function buildContextMenu(plugin) {
|
||||
sendRPC(IRPCActionType.SHOW_PLUGIN_PAGE_MENU, plugin);
|
||||
}
|
||||
function handleResize() {
|
||||
const myDiv = document.getElementById("pluginList");
|
||||
const windowHeight = window.innerHeight;
|
||||
const newHeight = windowHeight * 0.75;
|
||||
myDiv.style.height = newHeight + "px";
|
||||
}
|
||||
onMounted(() => {
|
||||
window.addEventListener("resize", handleResize);
|
||||
});
|
||||
function getPluginList() {
|
||||
sendRPC(IRPCActionType.PLUGIN_GET_LIST);
|
||||
}
|
||||
function installPlugin(item) {
|
||||
if (!item.gui) {
|
||||
$confirm(T("TIPS_PLUGIN_NOT_GUI_IMPLEMENT"), T("TIPS_NOTICE"), {
|
||||
confirmButtonText: T("CONFIRM"),
|
||||
cancelButtonText: T("CANCEL"),
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
item.ing = true;
|
||||
sendRPC(IRPCActionType.PLUGIN_INSTALL, item.fullName);
|
||||
}).catch(() => {
|
||||
console.log("Install canceled");
|
||||
});
|
||||
} else {
|
||||
item.ing = true;
|
||||
sendRPC(IRPCActionType.PLUGIN_INSTALL, item.fullName);
|
||||
}
|
||||
}
|
||||
function reloadApp() {
|
||||
sendRPC(IRPCActionType.RELOAD_APP);
|
||||
}
|
||||
async function handleReload() {
|
||||
saveConfig({
|
||||
needReload: true
|
||||
});
|
||||
needReload.value = true;
|
||||
const successNotification = new Notification(T("PLUGIN_UPDATE_SUCCEED"), {
|
||||
body: T("TIPS_NEED_RELOAD")
|
||||
});
|
||||
successNotification.onclick = () => {
|
||||
reloadApp();
|
||||
};
|
||||
}
|
||||
function cleanSearch() {
|
||||
searchText.value = "";
|
||||
}
|
||||
async function handleConfirmConfig() {
|
||||
const result = await $configForm.value?.validate() || false;
|
||||
if (result !== false) {
|
||||
switch (currentType.value) {
|
||||
case "plugin":
|
||||
saveConfig({
|
||||
[`${configName.value}`]: result
|
||||
});
|
||||
break;
|
||||
case "uploader":
|
||||
saveConfig({
|
||||
[`picBed.${configName.value}`]: result
|
||||
});
|
||||
break;
|
||||
case "transformer":
|
||||
saveConfig({
|
||||
[`transformer.${configName.value}`]: result
|
||||
});
|
||||
break;
|
||||
}
|
||||
const successNotification = new Notification(T("SETTINGS_RESULT"), {
|
||||
body: T("TIPS_SET_SUCCEED")
|
||||
});
|
||||
successNotification.onclick = () => {
|
||||
return true;
|
||||
};
|
||||
dialogVisible.value = false;
|
||||
getPluginList();
|
||||
}
|
||||
}
|
||||
function _getSearchResult(val) {
|
||||
window.node.axios.get(`https://registry.npmjs.com/-/v1/search?text=${val}`).then((res) => {
|
||||
pluginList.value = res.data.objects.filter((item) => {
|
||||
return item.package.name.includes("picgo-plugin-");
|
||||
}).map((item) => {
|
||||
return handleSearchResult(item);
|
||||
});
|
||||
loading.value = false;
|
||||
}).catch((err) => {
|
||||
console.log(err);
|
||||
loading.value = false;
|
||||
});
|
||||
}
|
||||
function handleSearchResult(item) {
|
||||
const pkg = item.package;
|
||||
const name = handleStreamlinePluginName(pkg.name);
|
||||
let gui = false;
|
||||
if (pkg.keywords && pkg.keywords.length > 0) {
|
||||
if (pkg.keywords.includes("picgo-gui-plugin")) {
|
||||
gui = true;
|
||||
}
|
||||
}
|
||||
return {
|
||||
name,
|
||||
fullName: pkg.name,
|
||||
author: pkg.author?.name || pkg.publisher?.username || "unknown",
|
||||
description: pkg.description,
|
||||
logo: `https://cdn.jsdelivr.net/npm/${pkg.name}/logo.png`,
|
||||
config: {},
|
||||
homepage: pkg.links ? pkg.links.homepage : "",
|
||||
hasInstall: pluginNameList.value.some((plugin) => plugin === pkg.name),
|
||||
version: pkg.version,
|
||||
gui,
|
||||
ing: false
|
||||
// installing or uninstalling
|
||||
};
|
||||
}
|
||||
async function handleRestoreState(item, name) {
|
||||
if (item === "uploader") {
|
||||
const current = await getConfig(configPaths.picBed.current);
|
||||
if (current === name) {
|
||||
saveConfig({
|
||||
[configPaths.picBed.current]: "smms",
|
||||
[configPaths.picBed.uploader]: "smms"
|
||||
});
|
||||
}
|
||||
}
|
||||
if (item === "transformer") {
|
||||
const current = await getConfig(configPaths.picBed.transformer);
|
||||
if (current === name) {
|
||||
saveConfig({
|
||||
[configPaths.picBed.transformer]: "path"
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
function openHomepage(url) {
|
||||
if (url) {
|
||||
sendRPC(IRPCActionType.OPEN_URL, url);
|
||||
}
|
||||
}
|
||||
function goAwesomeList() {
|
||||
sendRPC(IRPCActionType.OPEN_URL, "https://github.com/PicGo/Awesome-PicGo");
|
||||
}
|
||||
function handleImportLocalPlugin() {
|
||||
sendRPC(IRPCActionType.PLUGIN_IMPORT_LOCAL);
|
||||
loading.value = true;
|
||||
}
|
||||
function handleUpdateAllPlugin() {
|
||||
sendRPC(IRPCActionType.PLUGIN_UPDATE_ALL, toRaw(pluginNameList.value));
|
||||
}
|
||||
onBeforeUnmount(() => {
|
||||
window.removeEventListener("resize", handleResize);
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners("pluginList");
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners("installPlugin");
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners("uninstallSuccess");
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners("updateSuccess");
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners("hideLoading");
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners(PICGO_HANDLE_PLUGIN_DONE);
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_icon = resolveComponent("el-icon");
|
||||
const _component_el_tooltip = resolveComponent("el-tooltip");
|
||||
const _component_el_input = resolveComponent("el-input");
|
||||
const _component_el_row = resolveComponent("el-row");
|
||||
const _component_el_tag = resolveComponent("el-tag");
|
||||
const _component_el_col = resolveComponent("el-col");
|
||||
const _component_el_button = resolveComponent("el-button");
|
||||
const _component_el_dialog = resolveComponent("el-dialog");
|
||||
const _directive_loading = resolveDirective("loading");
|
||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
||||
createBaseVNode("div", _hoisted_2, [
|
||||
createTextVNode(toDisplayString(unref(T)("PLUGIN_SETTINGS")) + " - ", 1),
|
||||
createVNode(_component_el_tooltip, {
|
||||
content: unref(pluginListToolTip),
|
||||
placement: "right",
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_icon, {
|
||||
class: "el-icon-goods",
|
||||
onClick: goAwesomeList
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(goods_default))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["content"]),
|
||||
createVNode(_component_el_tooltip, {
|
||||
content: unref(updateAllToolTip),
|
||||
placement: "left",
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_icon, {
|
||||
class: "el-icon-update",
|
||||
onClick: handleUpdateAllPlugin
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(refresh_default))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["content"]),
|
||||
createVNode(_component_el_tooltip, {
|
||||
content: unref(importLocalPluginToolTip),
|
||||
placement: "left"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_icon, {
|
||||
class: "el-icon-download",
|
||||
persistent: false,
|
||||
teleported: "",
|
||||
onClick: handleImportLocalPlugin
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(download_default))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["content"])
|
||||
]),
|
||||
createVNode(_component_el_row, {
|
||||
class: normalizeClass(["handle-bar", { "cut-width": pluginList.value.length > 6 }])
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input, {
|
||||
modelValue: searchText.value,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchText.value = $event),
|
||||
placeholder: unref(T)("PLUGIN_SEARCH_PLACEHOLDER"),
|
||||
size: "small"
|
||||
}, {
|
||||
suffix: withCtx(() => [
|
||||
createVNode(_component_el_icon, {
|
||||
class: "el-input__icon",
|
||||
style: { "cursor": "pointer" },
|
||||
onClick: cleanSearch
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(close_default))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue", "placeholder"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["class"]),
|
||||
withDirectives((openBlock(), createBlock(_component_el_row, {
|
||||
id: "pluginList",
|
||||
gutter: 10,
|
||||
class: "plugin-list"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(pluginList.value, (item) => {
|
||||
return openBlock(), createBlock(_component_el_col, {
|
||||
key: item.fullName,
|
||||
class: "plugin-item__container",
|
||||
xs: 24,
|
||||
sm: pluginList.value.length === 1 ? 24 : 12,
|
||||
md: pluginList.value.length === 1 ? 24 : 12,
|
||||
lg: pluginList.value.length === 1 ? 24 : 12,
|
||||
xl: pluginList.value.length === 1 ? 24 : 12
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", {
|
||||
class: normalizeClass(["plugin-item", { darwin: unref(osGlobal) === "darwin" }])
|
||||
}, [
|
||||
!item.gui ? (openBlock(), createElementBlock("div", _hoisted_3, " CLI ")) : createCommentVNode("", true),
|
||||
createBaseVNode("img", {
|
||||
class: "plugin-item__logo",
|
||||
src: item.logo,
|
||||
onerror: defaultLogo.value
|
||||
}, null, 8, _hoisted_4),
|
||||
createBaseVNode("div", {
|
||||
class: normalizeClass(["plugin-item__content", { disabled: !item.enabled }])
|
||||
}, [
|
||||
createBaseVNode("div", {
|
||||
class: "plugin-item__name",
|
||||
onClick: ($event) => openHomepage(item.homepage)
|
||||
}, [
|
||||
createTextVNode(toDisplayString(item.name) + " ", 1),
|
||||
createBaseVNode("small", null, toDisplayString(" " + item.version), 1),
|
||||
_cache[4] || (_cache[4] = createTextVNode(" ", -1)),
|
||||
latestVersionMap[item.fullName] && latestVersionMap[item.fullName] !== item.version ? (openBlock(), createBlock(_component_el_tag, {
|
||||
key: 0,
|
||||
type: "success",
|
||||
size: "small",
|
||||
round: "",
|
||||
effect: "plain"
|
||||
}, {
|
||||
default: withCtx(() => _cache[3] || (_cache[3] = [
|
||||
createTextVNode(" new ", -1)
|
||||
])),
|
||||
_: 1,
|
||||
__: [3]
|
||||
})) : createCommentVNode("", true)
|
||||
], 8, _hoisted_5),
|
||||
createBaseVNode("div", {
|
||||
class: "plugin-item__desc",
|
||||
title: item.description
|
||||
}, toDisplayString(item.description), 9, _hoisted_6),
|
||||
createBaseVNode("div", _hoisted_7, [
|
||||
createBaseVNode("span", _hoisted_8, toDisplayString(item.author.replace(/<.*>/, "")), 1),
|
||||
createBaseVNode("span", _hoisted_9, [
|
||||
searchText.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
||||
!item.hasInstall ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
||||
!item.ing ? (openBlock(), createElementBlock("span", {
|
||||
key: 0,
|
||||
class: "config-button install",
|
||||
onClick: ($event) => installPlugin(item)
|
||||
}, toDisplayString(unref(T)("PLUGIN_INSTALL")), 9, _hoisted_10)) : item.ing ? (openBlock(), createElementBlock("span", _hoisted_11, toDisplayString(unref(T)("PLUGIN_INSTALLING")), 1)) : createCommentVNode("", true)
|
||||
], 64)) : (openBlock(), createElementBlock("span", _hoisted_12, toDisplayString(unref(T)("PLUGIN_INSTALLED")), 1))
|
||||
], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
||||
item.ing ? (openBlock(), createElementBlock("span", _hoisted_13, toDisplayString(unref(T)("PLUGIN_DOING_SOMETHING")), 1)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
||||
item.enabled ? (openBlock(), createBlock(_component_el_icon, {
|
||||
key: 0,
|
||||
class: "el-icon-setting",
|
||||
onClick: ($event) => buildContextMenu(item)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(tools_default))
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["onClick"])) : (openBlock(), createBlock(_component_el_icon, {
|
||||
key: 1,
|
||||
class: "el-icon-remove-outline",
|
||||
onClick: ($event) => buildContextMenu(item)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(remove_default))
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["onClick"]))
|
||||
], 64))
|
||||
], 64))
|
||||
])
|
||||
])
|
||||
], 2)
|
||||
], 2)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["sm", "md", "lg", "xl"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 1
|
||||
})), [
|
||||
[_directive_loading, loading.value]
|
||||
]),
|
||||
withDirectives(createVNode(_component_el_row, {
|
||||
class: normalizeClass(["reload-mask", { "cut-width": pluginList.value.length > 6 }]),
|
||||
justify: "center"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
size: "small",
|
||||
round: "",
|
||||
onClick: reloadApp
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("TIPS_NEED_RELOAD")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["class"]), [
|
||||
[vShow, needReload.value]
|
||||
]),
|
||||
createVNode(_component_el_dialog, {
|
||||
modelValue: dialogVisible.value,
|
||||
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => dialogVisible.value = $event),
|
||||
"modal-append-to-body": false,
|
||||
title: unref(T)("CONFIG_THING", {
|
||||
c: configName.value
|
||||
}),
|
||||
width: "70%",
|
||||
"append-to-body": ""
|
||||
}, {
|
||||
footer: withCtx(() => [
|
||||
createVNode(_component_el_button, {
|
||||
round: "",
|
||||
onClick: _cache[1] || (_cache[1] = ($event) => dialogVisible.value = false)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("CANCEL")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
round: "",
|
||||
onClick: handleConfirmConfig
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("CONFIRM")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createVNode(_sfc_main$1, {
|
||||
id: configName.value,
|
||||
ref_key: "$configForm",
|
||||
ref: $configForm,
|
||||
config: config.value,
|
||||
type: currentType.value,
|
||||
"color-mode": "white"
|
||||
}, null, 8, ["id", "config", "type"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue", "title"])
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
122
dist/renderer/assets/RenamePage-CYXv9h-U.js
vendored
@@ -1,122 +0,0 @@
|
||||
import { d as defineComponent, r as ref, a as reactive, o as onBeforeMount, G as GET_RENAME_FILE_NAME, b as onBeforeUnmount, R as RENAME_FILE_NAME, c as createElementBlock, e as openBlock, q as createVNode, v as withCtx, x as withModifiers, y as resolveComponent, u as unref, T, z as withKeys, A as close_default, f as createBaseVNode, B as createTextVNode, t as toDisplayString, C as sendToMain } from "./index-BqdcQlNn.js";
|
||||
import { u as useIPCOn } from "./useIPC-O_oSdR6Q.js";
|
||||
const _hoisted_1 = { id: "rename-page" };
|
||||
const _hoisted_2 = { class: "pull-right" };
|
||||
const __default__ = {
|
||||
name: "RenamePage"
|
||||
};
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
...__default__,
|
||||
setup(__props) {
|
||||
const id = ref(null);
|
||||
const formRef = ref();
|
||||
const form = reactive({
|
||||
fileName: "",
|
||||
originName: ""
|
||||
});
|
||||
const handleFileName = (_, newName, _originName, _id) => {
|
||||
form.fileName = newName;
|
||||
form.originName = _originName;
|
||||
id.value = _id;
|
||||
};
|
||||
useIPCOn(RENAME_FILE_NAME, handleFileName);
|
||||
onBeforeMount(() => {
|
||||
window.electron.electronAPI.ipcRenderer.send(GET_RENAME_FILE_NAME);
|
||||
});
|
||||
function confirmName() {
|
||||
formRef.value?.validate((valid) => {
|
||||
if (valid) {
|
||||
sendToMain(`${RENAME_FILE_NAME}${id.value}`, form.fileName);
|
||||
}
|
||||
});
|
||||
}
|
||||
function cancel() {
|
||||
sendToMain(`${RENAME_FILE_NAME}${id.value}`, form.originName);
|
||||
}
|
||||
onBeforeUnmount(() => {
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners(RENAME_FILE_NAME);
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_icon = resolveComponent("el-icon");
|
||||
const _component_el_input = resolveComponent("el-input");
|
||||
const _component_el_form_item = resolveComponent("el-form-item");
|
||||
const _component_el_form = resolveComponent("el-form");
|
||||
const _component_el_button = resolveComponent("el-button");
|
||||
const _component_el_row = resolveComponent("el-row");
|
||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
||||
createVNode(_component_el_form, {
|
||||
ref_key: "formRef",
|
||||
ref: formRef,
|
||||
model: form,
|
||||
onSubmit: _cache[2] || (_cache[2] = withModifiers(() => {
|
||||
}, ["prevent"]))
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_form_item, {
|
||||
label: unref(T)("FILE_RENAME"),
|
||||
prop: "fileName",
|
||||
rules: [{ required: true, message: "file name is required", trigger: "blur" }]
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input, {
|
||||
modelValue: form.fileName,
|
||||
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => form.fileName = $event),
|
||||
size: "small",
|
||||
autofocus: "",
|
||||
onKeyup: withKeys(confirmName, ["enter"])
|
||||
}, {
|
||||
suffix: withCtx(() => [
|
||||
createVNode(_component_el_icon, {
|
||||
class: "el-input__icon",
|
||||
style: { "cursor": "pointer" },
|
||||
onClick: _cache[0] || (_cache[0] = ($event) => form.fileName = "")
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(close_default))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["model"]),
|
||||
createVNode(_component_el_row, null, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_2, [
|
||||
createVNode(_component_el_button, {
|
||||
round: "",
|
||||
size: "small",
|
||||
onClick: cancel
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("CANCEL")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
round: "",
|
||||
size: "small",
|
||||
onClick: confirmName
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("CONFIRM")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
9
dist/renderer/assets/RenamePage-Dc09j0Xq.css
vendored
@@ -1,9 +0,0 @@
|
||||
#rename-page {
|
||||
padding: 0 20px;
|
||||
}
|
||||
#rename-page .pull-right {
|
||||
float: right;
|
||||
}
|
||||
#rename-page .el-form-item__label {
|
||||
color: #ddd;
|
||||
}
|
||||
42
dist/renderer/assets/ShortKey-BEjx61e-.css
vendored
@@ -1,42 +0,0 @@
|
||||
#shortcut-page .shortcut-page-table-border {
|
||||
border-color: #777;
|
||||
}
|
||||
#shortcut-page .el-dialog__body {
|
||||
padding: 10px 20px;
|
||||
}
|
||||
#shortcut-page .el-dialog__body .el-form-item {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
#shortcut-page .el-button.disabled {
|
||||
color: #f56c6c;
|
||||
}
|
||||
#shortcut-page .el-button.edit {
|
||||
color: #67c23a;
|
||||
}
|
||||
#shortcut-page .el-button--text {
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
}
|
||||
#shortcut-page .el-table {
|
||||
background-color: transparent;
|
||||
color: #ddd;
|
||||
}
|
||||
#shortcut-page .el-table::before {
|
||||
background-color: #777;
|
||||
}
|
||||
#shortcut-page .el-table thead {
|
||||
color: #bbb;
|
||||
}
|
||||
#shortcut-page .el-table th,
|
||||
#shortcut-page .el-table tr {
|
||||
background-color: transparent;
|
||||
}
|
||||
#shortcut-page .el-table__body tr.el-table__row--striped td {
|
||||
background: transparent;
|
||||
}
|
||||
#shortcut-page .el-table--enable-row-hover .el-table__body tr:hover>td {
|
||||
background: #333;
|
||||
}
|
||||
#shortcut-page .el-button+.el-button {
|
||||
margin-left: 4px;
|
||||
}
|
||||
260
dist/renderer/assets/ShortKey-Bk8jitxF.js
vendored
@@ -1,260 +0,0 @@
|
||||
import { d as defineComponent, r as ref, o as onBeforeMount, k as getConfig, D as watch, b as onBeforeUnmount, s as sendRPC, j as IRPCActionType, c as createElementBlock, e as openBlock, f as createBaseVNode, q as createVNode, t as toDisplayString, u as unref, T, v as withCtx, y as resolveComponent, p as configPaths, B as createTextVNode, n as normalizeClass, x as withModifiers, m as triggerRPC } from "./index-BqdcQlNn.js";
|
||||
const isSpecialKey = (key) => {
|
||||
const keyArr = ["Shift", "Control", "Alt", "Meta"];
|
||||
return keyArr.includes(key);
|
||||
};
|
||||
const keyBinding = (event) => {
|
||||
const meta = process.platform === "darwin" ? "Cmd" : "Super";
|
||||
const specialKey = {
|
||||
Ctrl: event.ctrlKey,
|
||||
Shift: event.shiftKey,
|
||||
Alt: event.altKey,
|
||||
[meta]: event.metaKey
|
||||
};
|
||||
const pressKey = [];
|
||||
for (const i in specialKey) {
|
||||
if (specialKey[i]) {
|
||||
pressKey.push(i);
|
||||
}
|
||||
}
|
||||
if (!isSpecialKey(event.key)) {
|
||||
pressKey.push(event.key.toUpperCase());
|
||||
}
|
||||
return pressKey;
|
||||
};
|
||||
const _hoisted_1 = { id: "shortcut-page" };
|
||||
const _hoisted_2 = { class: "view-title" };
|
||||
const __default__ = {
|
||||
name: "ShortkeyPage"
|
||||
};
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
...__default__,
|
||||
setup(__props) {
|
||||
const list = ref([]);
|
||||
const keyBindingVisible = ref(false);
|
||||
const command = ref("");
|
||||
const shortKey = ref("");
|
||||
const currentIndex = ref(0);
|
||||
onBeforeMount(async () => {
|
||||
const shortKeyConfig = await getConfig(configPaths.settings.shortKey._path);
|
||||
list.value = Object.keys(shortKeyConfig).map((item) => {
|
||||
return {
|
||||
...shortKeyConfig[item],
|
||||
from: calcOrigin(item)
|
||||
};
|
||||
});
|
||||
});
|
||||
watch(keyBindingVisible, (val) => {
|
||||
sendRPC(IRPCActionType.SHORTKEY_TOGGLE_SHORTKEY_MODIFIED_MODE, val);
|
||||
});
|
||||
function calcOrigin(item) {
|
||||
const [origin] = item.split(":");
|
||||
return origin;
|
||||
}
|
||||
function calcOriginShowName(item) {
|
||||
return item.replace("picgo-plugin-", "");
|
||||
}
|
||||
function toggleEnable(item) {
|
||||
const status = !item.enable;
|
||||
item.enable = status;
|
||||
sendRPC(IRPCActionType.SHORTKEY_BIND_OR_UNBIND, item, item.from);
|
||||
}
|
||||
function keyDetect(event) {
|
||||
shortKey.value = keyBinding(event).join("+");
|
||||
}
|
||||
async function openKeyBindingDialog(config, index) {
|
||||
command.value = `${config.from}:${config.name}`;
|
||||
shortKey.value = await getConfig(`settings.shortKey.${command.value}.key`) || "";
|
||||
currentIndex.value = index;
|
||||
keyBindingVisible.value = true;
|
||||
}
|
||||
async function cancelKeyBinding() {
|
||||
keyBindingVisible.value = false;
|
||||
shortKey.value = await getConfig(`settings.shortKey.${command.value}.key`) || "";
|
||||
}
|
||||
async function confirmKeyBinding() {
|
||||
const oldKey = await getConfig(`settings.shortKey.${command.value}.key`);
|
||||
const config = { ...list.value[currentIndex.value] };
|
||||
config.key = shortKey.value;
|
||||
const result = await triggerRPC(IRPCActionType.SHORTKEY_UPDATE, config, oldKey, config.from);
|
||||
if (result) {
|
||||
keyBindingVisible.value = false;
|
||||
list.value[currentIndex.value].key = shortKey.value;
|
||||
}
|
||||
}
|
||||
onBeforeUnmount(() => {
|
||||
sendRPC(IRPCActionType.SHORTKEY_TOGGLE_SHORTKEY_MODIFIED_MODE, false);
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_table_column = resolveComponent("el-table-column");
|
||||
const _component_el_tag = resolveComponent("el-tag");
|
||||
const _component_el_button = resolveComponent("el-button");
|
||||
const _component_el_row = resolveComponent("el-row");
|
||||
const _component_el_table = resolveComponent("el-table");
|
||||
const _component_el_col = resolveComponent("el-col");
|
||||
const _component_el_input = resolveComponent("el-input");
|
||||
const _component_el_form_item = resolveComponent("el-form-item");
|
||||
const _component_el_form = resolveComponent("el-form");
|
||||
const _component_el_dialog = resolveComponent("el-dialog");
|
||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
||||
createBaseVNode("div", _hoisted_2, toDisplayString(unref(T)("SETTINGS_SET_SHORTCUT")), 1),
|
||||
createVNode(_component_el_row, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_col, {
|
||||
span: 20,
|
||||
offset: 2
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_table, {
|
||||
class: "shortcut-page-table-border",
|
||||
data: list.value,
|
||||
size: "small",
|
||||
"header-cell-class-name": "shortcut-page-table-border",
|
||||
"cell-class-name": "shortcut-page-table-border"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_table_column, {
|
||||
label: unref(T)("SHORTCUT_NAME")
|
||||
}, {
|
||||
default: withCtx((scope) => [
|
||||
createTextVNode(toDisplayString(scope.row.label ? scope.row.label : scope.row.name), 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
createVNode(_component_el_table_column, {
|
||||
width: "160px",
|
||||
label: unref(T)("SHORTCUT_BIND"),
|
||||
prop: "key"
|
||||
}, null, 8, ["label"]),
|
||||
createVNode(_component_el_table_column, {
|
||||
label: unref(T)("SHORTCUT_STATUS")
|
||||
}, {
|
||||
default: withCtx((scope) => [
|
||||
createVNode(_component_el_tag, {
|
||||
size: "small",
|
||||
type: scope.row.enable ? "success" : "danger"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(scope.row.enable ? unref(T)("SHORTCUT_ENABLED") : unref(T)("SHORTCUT_DISABLED")), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["type"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
createVNode(_component_el_table_column, {
|
||||
label: unref(T)("SHORTCUT_SOURCE"),
|
||||
width: "100px"
|
||||
}, {
|
||||
default: withCtx((scope) => [
|
||||
createTextVNode(toDisplayString(calcOriginShowName(scope.row.from)), 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
createVNode(_component_el_table_column, {
|
||||
label: unref(T)("SHORTCUT_HANDLE"),
|
||||
width: "100px"
|
||||
}, {
|
||||
default: withCtx((scope) => [
|
||||
createVNode(_component_el_row, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_button, {
|
||||
size: "small",
|
||||
class: normalizeClass({
|
||||
disabled: scope.row.enable
|
||||
}),
|
||||
type: "info",
|
||||
link: true,
|
||||
onClick: ($event) => toggleEnable(scope.row)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(scope.row.enable ? unref(T)("SHORTCUT_DISABLE") : unref(T)("SHORTCUT_ENABLE")), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["class", "onClick"]),
|
||||
createVNode(_component_el_button, {
|
||||
class: "edit",
|
||||
size: "small",
|
||||
type: "info",
|
||||
link: true,
|
||||
onClick: ($event) => openKeyBindingDialog(scope.row, scope.$index)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("SHORTCUT_EDIT")), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["onClick"])
|
||||
]),
|
||||
_: 2
|
||||
}, 1024)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["data"])
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_dialog, {
|
||||
modelValue: keyBindingVisible.value,
|
||||
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => keyBindingVisible.value = $event),
|
||||
title: unref(T)("SHORTCUT_CHANGE_UPLOAD"),
|
||||
"modal-append-to-body": false,
|
||||
"append-to-body": ""
|
||||
}, {
|
||||
footer: withCtx(() => [
|
||||
createVNode(_component_el_button, {
|
||||
round: "",
|
||||
onClick: cancelKeyBinding
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("CANCEL")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
round: "",
|
||||
onClick: confirmKeyBinding
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("CONFIRM")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_form, {
|
||||
"label-position": "top",
|
||||
"label-width": "80px"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_form_item, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input, {
|
||||
modelValue: shortKey.value,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => shortKey.value = $event),
|
||||
class: "align-center",
|
||||
autofocus: true,
|
||||
onKeydown: _cache[1] || (_cache[1] = withModifiers(($event) => keyDetect($event), ["prevent"]))
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue", "title"])
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
68
dist/renderer/assets/Toolbox-BBhxAVY5.css
vendored
@@ -1,68 +0,0 @@
|
||||
.toolbox-status-icon {
|
||||
margin-left: 8px;
|
||||
}
|
||||
.toolbox {
|
||||
padding: 0 40px;
|
||||
}
|
||||
.toolbox-header {
|
||||
width: 100%;
|
||||
color: #eee;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20px 0px;
|
||||
}
|
||||
.toolbox-header__logo {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
.toolbox-header__text {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
.toolbox-header__title {
|
||||
color: #ddd;
|
||||
font-size: 20px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
.toolbox-header__sub-title {
|
||||
color: #aaa;
|
||||
font-size: 16px;
|
||||
}
|
||||
.toolbox .progress {
|
||||
width: 100%;
|
||||
}
|
||||
.toolbox .progress .el-progress--line {
|
||||
width: 100%;
|
||||
}
|
||||
.toolbox .progress .el-progress__text {
|
||||
min-width: 0;
|
||||
}
|
||||
.toolbox .el-collapse {
|
||||
margin-top: 20px;
|
||||
--el-collapse-border-color: #777;
|
||||
--el-collapse-header-height: 48px;
|
||||
--el-collapse-header-bg-color: transparent;
|
||||
--el-collapse-header-text-color: #ddd;
|
||||
--el-collapse-header-font-size: 13px;
|
||||
--el-collapse-content-bg-color: transparent;
|
||||
--el-collapse-content-font-size: 13px;
|
||||
--el-collapse-content-text-color: #ddd;
|
||||
}
|
||||
.toolbox .el-collapse-item__content {
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
.toolbox-item-msg {
|
||||
color: #aaa;
|
||||
}
|
||||
.toolbox-tips {
|
||||
padding: 12px 0;
|
||||
}
|
||||
.toolbox-cant-fix {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.toolbox-cant-fix__btn {
|
||||
margin-left: 8px;
|
||||
}
|
||||
323
dist/renderer/assets/Toolbox-C8d1wmoC.js
vendored
@@ -1,323 +0,0 @@
|
||||
import { d as defineComponent, c as createElementBlock, e as openBlock, q as createVNode, y as resolveComponent, v as withCtx, B as createTextVNode, t as toDisplayString, am as computed, bp as IToolboxItemCheckStatus, N as createBlock, g as createCommentVNode, u as unref, at as success_filled_default, bq as circle_close_filled_default, ax as loading_default, ae as ElMessageBox, r as ref, a as reactive, T, br as IToolboxItemType, s as sendRPC, j as IRPCActionType, f as createBaseVNode, F as Fragment, h as renderList, m as triggerRPC } from "./index-BqdcQlNn.js";
|
||||
import { a as useIPC } from "./useIPC-O_oSdR6Q.js";
|
||||
const _hoisted_1$1 = { class: "toolbox-handler" };
|
||||
const __default__$2 = {
|
||||
name: "ToolboxHandler"
|
||||
};
|
||||
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
||||
...__default__$2,
|
||||
props: {
|
||||
status: {},
|
||||
value: {},
|
||||
handlerText: {},
|
||||
handler: { type: Function }
|
||||
},
|
||||
setup(__props) {
|
||||
const props = __props;
|
||||
return (_ctx, _cache) => {
|
||||
const _component_ElButton = resolveComponent("ElButton");
|
||||
return openBlock(), createElementBlock("div", _hoisted_1$1, [
|
||||
createVNode(_component_ElButton, {
|
||||
type: "primary",
|
||||
link: true,
|
||||
onClick: _cache[0] || (_cache[0] = () => props.handler(_ctx.value))
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(props.handlerText), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
const __default__$1 = {
|
||||
name: "ToolboxStatusIcon"
|
||||
};
|
||||
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
||||
...__default__$1,
|
||||
props: {
|
||||
status: {}
|
||||
},
|
||||
setup(__props) {
|
||||
const props = __props;
|
||||
const color = computed(() => {
|
||||
switch (props.status) {
|
||||
case IToolboxItemCheckStatus.SUCCESS:
|
||||
return "#67C23A";
|
||||
case IToolboxItemCheckStatus.ERROR:
|
||||
return "#F56C6C";
|
||||
default:
|
||||
return "#909399";
|
||||
}
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_icon = resolveComponent("el-icon");
|
||||
return openBlock(), createBlock(_component_el_icon, {
|
||||
color: color.value,
|
||||
class: "toolbox-status-icon"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
props.status === unref(IToolboxItemCheckStatus).SUCCESS ? (openBlock(), createBlock(unref(success_filled_default), { key: 0 })) : createCommentVNode("", true),
|
||||
props.status === unref(IToolboxItemCheckStatus).ERROR ? (openBlock(), createBlock(unref(circle_close_filled_default), { key: 1 })) : createCommentVNode("", true),
|
||||
props.status === unref(IToolboxItemCheckStatus).LOADING ? (openBlock(), createBlock(unref(loading_default), { key: 2 })) : createCommentVNode("", true)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["color"]);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _hoisted_1 = { class: "toolbox" };
|
||||
const _hoisted_2 = ["src"];
|
||||
const _hoisted_3 = {
|
||||
key: 1,
|
||||
class: "toolbox-tips"
|
||||
};
|
||||
const _hoisted_4 = {
|
||||
key: 1,
|
||||
class: "toolbox-cant-fix toolbox-tips"
|
||||
};
|
||||
const _hoisted_5 = { class: "toolbox-item-msg" };
|
||||
const __default__ = {
|
||||
name: "ToolBoxPage"
|
||||
};
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
...__default__,
|
||||
setup(__props) {
|
||||
const $confirm = ElMessageBox.confirm;
|
||||
const defaultLogo = ref("file://roundLogo.png");
|
||||
const activeTypes = ref([]);
|
||||
const fixList = reactive({
|
||||
[IToolboxItemType.IS_CONFIG_FILE_BROKEN]: {
|
||||
title: T("TOOLBOX_CHECK_CONFIG_FILE_BROKEN"),
|
||||
status: IToolboxItemCheckStatus.INIT,
|
||||
handlerText: T("SETTINGS_OPEN_CONFIG_FILE"),
|
||||
handler(value) {
|
||||
sendRPC(IRPCActionType.OPEN_FILE, value);
|
||||
}
|
||||
},
|
||||
[IToolboxItemType.IS_GALLERY_FILE_BROKEN]: {
|
||||
title: T("TOOLBOX_CHECK_GALLERY_FILE_BROKEN"),
|
||||
status: IToolboxItemCheckStatus.INIT
|
||||
},
|
||||
[IToolboxItemType.HAS_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD]: {
|
||||
title: T("TOOLBOX_CHECK_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD"),
|
||||
// picgo-image-clipboard folder
|
||||
status: IToolboxItemCheckStatus.INIT,
|
||||
handlerText: T("OPEN_FILE_PATH"),
|
||||
handler(value) {
|
||||
sendRPC(IRPCActionType.OPEN_FILE, value);
|
||||
}
|
||||
},
|
||||
[IToolboxItemType.HAS_PROBLEM_WITH_PROXY]: {
|
||||
title: T("TOOLBOX_CHECK_PROBLEM_WITH_PROXY"),
|
||||
status: IToolboxItemCheckStatus.INIT,
|
||||
hasNoFixMethod: true
|
||||
}
|
||||
});
|
||||
const progress = computed(() => {
|
||||
const total = Object.keys(fixList).length;
|
||||
const done = Object.keys(fixList).filter((key) => {
|
||||
const status = fixList[key].status;
|
||||
return status !== IToolboxItemCheckStatus.INIT && status !== IToolboxItemCheckStatus.LOADING;
|
||||
}).length;
|
||||
return done / total * 100;
|
||||
});
|
||||
const isAllSuccess = computed(() => {
|
||||
return Object.keys(fixList).every((key) => {
|
||||
const status = fixList[key].status;
|
||||
return status === IToolboxItemCheckStatus.SUCCESS;
|
||||
});
|
||||
});
|
||||
const isLoading = computed(() => {
|
||||
return Object.keys(fixList).some((key) => {
|
||||
const status = fixList[key].status;
|
||||
return status === IToolboxItemCheckStatus.LOADING;
|
||||
});
|
||||
});
|
||||
const canFixLength = computed(() => {
|
||||
return Object.keys(fixList).filter((key) => {
|
||||
const status = fixList[key].status;
|
||||
return status === IToolboxItemCheckStatus.ERROR && !fixList[key].hasNoFixMethod;
|
||||
}).length;
|
||||
});
|
||||
const format = (_percentage) => "";
|
||||
const ipc = useIPC();
|
||||
ipc.on(IRPCActionType.TOOLBOX_CHECK_RES, (_event, { type, msg = "", status, value = "" }) => {
|
||||
fixList[type].status = status;
|
||||
fixList[type].msg = msg;
|
||||
fixList[type].value = value;
|
||||
if (status === IToolboxItemCheckStatus.ERROR) {
|
||||
activeTypes.value.push(type);
|
||||
}
|
||||
});
|
||||
const handleCheck = () => {
|
||||
activeTypes.value = [];
|
||||
Object.keys(fixList).forEach((key) => {
|
||||
fixList[key].status = IToolboxItemCheckStatus.LOADING;
|
||||
fixList[key].msg = "";
|
||||
fixList[key].value = "";
|
||||
});
|
||||
sendRPC(IRPCActionType.TOOLBOX_CHECK);
|
||||
};
|
||||
const handleFix = async () => {
|
||||
const fixRes = await Promise.all(
|
||||
Object.keys(fixList).filter((key) => {
|
||||
const status = fixList[key].status;
|
||||
return status === IToolboxItemCheckStatus.ERROR && !fixList[key].hasNoFixMethod;
|
||||
}).map(async (key) => {
|
||||
return triggerRPC(IRPCActionType.TOOLBOX_CHECK_FIX, key);
|
||||
})
|
||||
);
|
||||
fixRes.filter((item) => item !== null).forEach((item) => {
|
||||
if (item) {
|
||||
fixList[item.type].status = item.status;
|
||||
fixList[item.type].msg = item.msg;
|
||||
fixList[item.type].value = item.value;
|
||||
}
|
||||
});
|
||||
$confirm(T("TOOLBOX_FIX_DONE_NEED_RELOAD"), T("TIPS_NOTICE"), {
|
||||
confirmButtonText: T("CONFIRM"),
|
||||
cancelButtonText: T("CANCEL"),
|
||||
type: "info"
|
||||
}).then(() => {
|
||||
sendRPC(IRPCActionType.RELOAD_APP);
|
||||
}).catch(() => {
|
||||
});
|
||||
};
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_row = resolveComponent("el-row");
|
||||
const _component_el_button = resolveComponent("el-button");
|
||||
const _component_el_progress = resolveComponent("el-progress");
|
||||
const _component_el_collapse_item = resolveComponent("el-collapse-item");
|
||||
const _component_el_collapse = resolveComponent("el-collapse");
|
||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
||||
createVNode(_component_el_row, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_row, { class: "toolbox-header" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_row, null, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("img", {
|
||||
class: "toolbox-header__logo",
|
||||
src: defaultLogo.value
|
||||
}, null, 8, _hoisted_2),
|
||||
createVNode(_component_el_row, { class: "toolbox-header__text" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_row, { class: "toolbox-header__title" }, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("TOOLBOX_TITLE")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_row, { class: "toolbox-header__sub-title" }, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("TOOLBOX_SUB_TITLE")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_row, null, {
|
||||
default: withCtx(() => [
|
||||
progress.value !== 100 ? (openBlock(), createBlock(_component_el_button, {
|
||||
key: 0,
|
||||
type: "primary",
|
||||
round: "",
|
||||
disabled: isLoading.value,
|
||||
onClick: handleCheck
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("TOOLBOX_START_SCAN")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["disabled"])) : isAllSuccess.value ? (openBlock(), createElementBlock("div", _hoisted_3, toDisplayString(unref(T)("TOOLBOX_SUCCESS_TIPS")), 1)) : !isAllSuccess.value ? (openBlock(), createElementBlock(Fragment, { key: 2 }, [
|
||||
canFixLength.value !== 0 ? (openBlock(), createBlock(_component_el_button, {
|
||||
key: 0,
|
||||
type: "primary",
|
||||
round: "",
|
||||
onClick: handleFix
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("TOOLBOX_START_FIX")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})) : (openBlock(), createElementBlock("div", _hoisted_4, [
|
||||
createTextVNode(toDisplayString(unref(T)("TOOLBOX_CANT_AUTO_FIX")) + " ", 1),
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
round: "",
|
||||
class: "toolbox-cant-fix__btn",
|
||||
onClick: handleCheck
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("TOOLBOX_RE_SCAN")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]))
|
||||
], 64)) : createCommentVNode("", true)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_row, { class: "progress" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_progress, {
|
||||
percentage: progress.value,
|
||||
format
|
||||
}, null, 8, ["percentage"])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_collapse, {
|
||||
modelValue: activeTypes.value,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => activeTypes.value = $event),
|
||||
accordion: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(fixList, (item, key) => {
|
||||
return openBlock(), createBlock(_component_el_collapse_item, {
|
||||
key,
|
||||
name: key
|
||||
}, {
|
||||
title: withCtx(() => [
|
||||
createTextVNode(toDisplayString(item.title) + " ", 1),
|
||||
createVNode(_sfc_main$1, {
|
||||
status: item.status
|
||||
}, null, 8, ["status"])
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_5, [
|
||||
createTextVNode(toDisplayString(item.msg || "") + " ", 1),
|
||||
item.handler && item.handlerText && item.value ? (openBlock(), createBlock(_sfc_main$2, {
|
||||
key: 0,
|
||||
value: item.value,
|
||||
status: item.status,
|
||||
handler: item.handler,
|
||||
"handler-text": item.handlerText
|
||||
}, null, 8, ["value", "status", "handler", "handler-text"])) : createCommentVNode("", true)
|
||||
])
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["name"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue"])
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
87
dist/renderer/assets/TrayPage-D2S-w9HD.css
vendored
@@ -1,87 +0,0 @@
|
||||
body::-webkit-scrollbar {
|
||||
width: 0px;
|
||||
}
|
||||
#tray-page {
|
||||
background-color: transparent;
|
||||
}
|
||||
#tray-page .open-main-window {
|
||||
background: #000;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
color: #858585;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
#tray-page .open-main-window:hover {
|
||||
color: #fff;
|
||||
background: #49b1f5;
|
||||
}
|
||||
#tray-page .list-title {
|
||||
text-align: center;
|
||||
color: #858585;
|
||||
font-size: 12px;
|
||||
padding: 6px 0;
|
||||
position: relative;
|
||||
}
|
||||
#tray-page .list-title:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
height: 1px;
|
||||
width: calc(100% - 36px);
|
||||
bottom: 0;
|
||||
left: 18px;
|
||||
background: #858585;
|
||||
}
|
||||
#tray-page .content {
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
width: 100%;
|
||||
}
|
||||
#tray-page .img-list {
|
||||
padding: 4px 8px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
#tray-page .img-list:hover {
|
||||
background: #49b1f5;
|
||||
}
|
||||
#tray-page .img-list:hover .upload-img__index {
|
||||
color: #fff;
|
||||
}
|
||||
#tray-page .img-list .upload-img__container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
#tray-page .upload-img {
|
||||
max-width: 100%;
|
||||
object-fit: scale-down;
|
||||
margin: 0 auto;
|
||||
}
|
||||
#tray-page .upload-img__container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
padding: 8px 8px 4px;
|
||||
height: 100%;
|
||||
}
|
||||
#tray-page .upload-img__container.upload {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
#tray-page .upload-img__title {
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
color: #ddd;
|
||||
font-size: 14px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
202
dist/renderer/assets/TrayPage-D6P4rVmM.js
vendored
@@ -1,202 +0,0 @@
|
||||
import { d as defineComponent, r as ref, a as reactive, T, o as onBeforeMount, $ as $$db, b as onBeforeUnmount, c as createElementBlock, e as openBlock, f as createBaseVNode, t as toDisplayString, u as unref, g as createCommentVNode, F as Fragment, h as renderList, n as normalizeClass, w as withDirectives, i as resolveDirective, s as sendRPC, I as IWindowList, j as IRPCActionType, k as getConfig, l as IPasteStyle, m as triggerRPC, p as configPaths } from "./index-BqdcQlNn.js";
|
||||
import { h as handleUrlEncode } from "./common-DNjr697i.js";
|
||||
const _hoisted_1 = { id: "tray-page" };
|
||||
const _hoisted_2 = { class: "content" };
|
||||
const _hoisted_3 = {
|
||||
key: 0,
|
||||
class: "wait-upload-img"
|
||||
};
|
||||
const _hoisted_4 = { class: "list-title" };
|
||||
const _hoisted_5 = ["src"];
|
||||
const _hoisted_6 = { class: "uploaded-img" };
|
||||
const _hoisted_7 = { class: "list-title" };
|
||||
const _hoisted_8 = ["onClick"];
|
||||
const _hoisted_9 = { class: "upload-img" };
|
||||
const _hoisted_10 = ["title"];
|
||||
const __default__ = {
|
||||
name: "TrayPage"
|
||||
};
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
...__default__,
|
||||
setup(__props) {
|
||||
const files = ref([]);
|
||||
const notification = reactive({
|
||||
title: T("COPY_LINK_SUCCEED"),
|
||||
body: ""
|
||||
});
|
||||
const clipboardFiles = ref([]);
|
||||
const uploadFlag = ref(false);
|
||||
function openSettingWindow() {
|
||||
sendRPC(IRPCActionType.OPEN_WINDOW, IWindowList.SETTING_WINDOW);
|
||||
}
|
||||
async function getData() {
|
||||
files.value = (await $$db.get({ orderBy: "desc", limit: 5 })).data;
|
||||
}
|
||||
const formatCustomLink = (customLink, item) => {
|
||||
const fileName = item.fileName.replace(new RegExp(`\\${item.extname}$`), "");
|
||||
const url = item.url || item.imgUrl;
|
||||
const extName = item.extname;
|
||||
const formatObj = {
|
||||
url,
|
||||
fileName,
|
||||
extName
|
||||
};
|
||||
const keys = Object.keys(formatObj);
|
||||
keys.forEach((item2) => {
|
||||
if (customLink.indexOf(`$${item2}`) !== -1) {
|
||||
const reg = new RegExp(`\\$${item2}`, "g");
|
||||
customLink = customLink.replace(reg, formatObj[item2]);
|
||||
}
|
||||
});
|
||||
return customLink;
|
||||
};
|
||||
async function copyTheLink(item) {
|
||||
const pasteStyle = await getConfig(configPaths.settings.pasteStyle) || IPasteStyle.MARKDOWN;
|
||||
const customLink = await getConfig(configPaths.settings.customLink);
|
||||
const txt = await pasteTemplate(pasteStyle, item, customLink);
|
||||
window.electron.clipboard.writeText(txt);
|
||||
const myNotification = new Notification(notification.title, notification);
|
||||
myNotification.onclick = () => {
|
||||
return true;
|
||||
};
|
||||
}
|
||||
async function pasteTemplate(style, item, customLink) {
|
||||
let url = item.url || item.imgUrl;
|
||||
if (item.type === "aws-s3" || item.type === "aws-s3-plist") {
|
||||
url = item.imgUrl || item.url || "";
|
||||
}
|
||||
if (await getConfig(configPaths.settings.encodeOutputURL) === true) {
|
||||
url = handleUrlEncode(url);
|
||||
}
|
||||
const useShortUrl = await getConfig(configPaths.settings.useShortUrl) || false;
|
||||
if (useShortUrl) {
|
||||
url = await triggerRPC(IRPCActionType.TRAY_GET_SHORT_URL, url) || url;
|
||||
}
|
||||
notification.body = url;
|
||||
const _customLink = customLink || "";
|
||||
const tpl = {
|
||||
markdown: ``,
|
||||
HTML: `<img src="${url}"/>`,
|
||||
URL: url,
|
||||
UBB: `[IMG]${url}[/IMG]`,
|
||||
Custom: formatCustomLink(_customLink, {
|
||||
...item,
|
||||
url
|
||||
})
|
||||
};
|
||||
return tpl[style];
|
||||
}
|
||||
function disableDragFile() {
|
||||
window.addEventListener(
|
||||
"dragover",
|
||||
(e) => {
|
||||
e = e || event;
|
||||
e.preventDefault();
|
||||
},
|
||||
false
|
||||
);
|
||||
window.addEventListener(
|
||||
"drop",
|
||||
(e) => {
|
||||
e = e || event;
|
||||
e.preventDefault();
|
||||
},
|
||||
false
|
||||
);
|
||||
}
|
||||
function uploadClipboardFiles() {
|
||||
if (uploadFlag.value) {
|
||||
return;
|
||||
}
|
||||
uploadFlag.value = true;
|
||||
sendRPC(IRPCActionType.TRAY_UPLOAD_CLIPBOARD_FILES);
|
||||
}
|
||||
onBeforeMount(() => {
|
||||
disableDragFile();
|
||||
getData();
|
||||
window.electron.electronAPI.ipcRenderer.on("dragFiles", async (_, _files) => {
|
||||
for (const file of _files) {
|
||||
await $$db.insert(file);
|
||||
}
|
||||
files.value = (await $$db.get({
|
||||
orderBy: "desc",
|
||||
limit: 5
|
||||
})).data;
|
||||
});
|
||||
window.electron.electronAPI.ipcRenderer.on("clipboardFiles", (_, files2) => {
|
||||
clipboardFiles.value = files2;
|
||||
});
|
||||
window.electron.electronAPI.ipcRenderer.on("uploadFiles", async () => {
|
||||
files.value = (await $$db.get({
|
||||
orderBy: "desc",
|
||||
limit: 5
|
||||
})).data;
|
||||
uploadFlag.value = false;
|
||||
});
|
||||
window.electron.electronAPI.ipcRenderer.on("updateFiles", () => {
|
||||
getData();
|
||||
});
|
||||
});
|
||||
onBeforeUnmount(() => {
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners("dragFiles");
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners("clipboardFiles");
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners("uploadFiles");
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners("updateFiles");
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
const _directive_lazy = resolveDirective("lazy");
|
||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
||||
createBaseVNode("div", {
|
||||
class: "open-main-window",
|
||||
onClick: openSettingWindow
|
||||
}, toDisplayString(unref(T)("OPEN_MAIN_WINDOW")), 1),
|
||||
createBaseVNode("div", _hoisted_2, [
|
||||
clipboardFiles.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_3, [
|
||||
createBaseVNode("div", _hoisted_4, toDisplayString(unref(T)("WAIT_TO_UPLOAD")), 1),
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(clipboardFiles.value, (item, index) => {
|
||||
return openBlock(), createElementBlock("div", {
|
||||
key: index,
|
||||
class: "img-list"
|
||||
}, [
|
||||
createBaseVNode("div", {
|
||||
class: normalizeClass(["upload-img__container", { upload: uploadFlag.value }]),
|
||||
onClick: uploadClipboardFiles
|
||||
}, [
|
||||
createBaseVNode("img", {
|
||||
src: item.imgUrl,
|
||||
class: "upload-img"
|
||||
}, null, 8, _hoisted_5)
|
||||
], 2)
|
||||
]);
|
||||
}), 128))
|
||||
])) : createCommentVNode("", true),
|
||||
createBaseVNode("div", _hoisted_6, [
|
||||
createBaseVNode("div", _hoisted_7, toDisplayString(unref(T)("ALREADY_UPLOAD")), 1),
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(files.value, (item) => {
|
||||
return openBlock(), createElementBlock("div", {
|
||||
key: item.imgUrl,
|
||||
class: "img-list"
|
||||
}, [
|
||||
createBaseVNode("div", {
|
||||
class: "upload-img__container",
|
||||
onClick: ($event) => copyTheLink(item)
|
||||
}, [
|
||||
withDirectives(createBaseVNode("img", _hoisted_9, null, 512), [
|
||||
[_directive_lazy, item.imgUrl]
|
||||
]),
|
||||
createBaseVNode("div", {
|
||||
class: "upload-img__title",
|
||||
title: item.fileName
|
||||
}, toDisplayString(item.fileName), 9, _hoisted_10)
|
||||
], 8, _hoisted_8)
|
||||
]);
|
||||
}), 128))
|
||||
])
|
||||
])
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
425
dist/renderer/assets/Upload-BgeyAvpo.js
vendored
@@ -1,425 +0,0 @@
|
||||
import { M as onMounted, b as onBeforeUnmount, d as defineComponent, r as ref, l as IPasteStyle, D as watch, o as onBeforeMount, U as updatePicBedGlobal, O as SHOW_INPUT_BOX_RESPONSE, k as getConfig, s as sendRPC, j as IRPCActionType, J as ElMessage, T, a3 as picBedGlobal, c as createElementBlock, e as openBlock, q as createVNode, v as withCtx, y as resolveComponent, u as unref, p as configPaths, f as createBaseVNode, t as toDisplayString, aj as caret_bottom_default, B as createTextVNode, a0 as upload_filled_default, x as withModifiers, n as normalizeClass, F as Fragment, h as renderList, N as createBlock, m as triggerRPC, Q as useRouter, ak as PICBEDS_PAGE, af as saveConfig, S as SHOW_INPUT_BOX } from "./index-BqdcQlNn.js";
|
||||
import { _ as _sfc_main$1 } from "./ImageProcessSetting.vue_vue_type_script_setup_true_lang-DFtMAQE7.js";
|
||||
import { e as emitter } from "./bus-BjW7Y6FA.js";
|
||||
import { i as isUrl } from "./common-DNjr697i.js";
|
||||
function disableDrag(e) {
|
||||
const dropzone = document.getElementById("upload-area");
|
||||
if (dropzone === null || !dropzone.contains(e.target)) {
|
||||
e.preventDefault();
|
||||
e.dataTransfer.effectAllowed = "none";
|
||||
e.dataTransfer.dropEffect = "none";
|
||||
}
|
||||
}
|
||||
function useDragEventListeners() {
|
||||
onMounted(() => {
|
||||
window.addEventListener("dragenter", disableDrag, false);
|
||||
window.addEventListener("dragover", disableDrag);
|
||||
window.addEventListener("drop", disableDrag);
|
||||
});
|
||||
onBeforeUnmount(() => {
|
||||
window.removeEventListener("dragenter", disableDrag, false);
|
||||
window.removeEventListener("dragover", disableDrag);
|
||||
window.removeEventListener("drop", disableDrag);
|
||||
});
|
||||
}
|
||||
const _hoisted_1 = { id: "upload-view" };
|
||||
const _hoisted_2 = { class: "view-title" };
|
||||
const _hoisted_3 = { class: "upload-dragger__text" };
|
||||
const _hoisted_4 = { class: "paste-style" };
|
||||
const _hoisted_5 = { class: "el-col-12" };
|
||||
const _hoisted_6 = { class: "paste-style__text" };
|
||||
const _hoisted_7 = { class: "el-col-8" };
|
||||
const _hoisted_8 = { class: "paste-style__text" };
|
||||
const __default__ = {
|
||||
name: "UploadPage"
|
||||
};
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
...__default__,
|
||||
setup(__props) {
|
||||
useDragEventListeners();
|
||||
const $router = useRouter();
|
||||
const imageProcessDialogVisible = ref(false);
|
||||
const useShortUrl = ref(false);
|
||||
const dragover = ref(false);
|
||||
const progress = ref(0);
|
||||
const showProgress = ref(false);
|
||||
const showError = ref(false);
|
||||
const pasteStyle = ref("");
|
||||
const picBedName = ref("");
|
||||
const picBedConfigName = ref("");
|
||||
const pasteFormatList = ref({
|
||||
[IPasteStyle.MARKDOWN]: "",
|
||||
[IPasteStyle.HTML]: '<img src="url"/>',
|
||||
[IPasteStyle.URL]: "http://test.com/test.png",
|
||||
[IPasteStyle.UBB]: "[img]url[/img]",
|
||||
[IPasteStyle.CUSTOM]: ""
|
||||
});
|
||||
watch(picBedGlobal, () => {
|
||||
getDefaultPicBed();
|
||||
});
|
||||
onBeforeMount(() => {
|
||||
updatePicBedGlobal();
|
||||
window.electron.electronAPI.ipcRenderer.on("uploadProgress", (_event, _progress) => {
|
||||
if (_progress !== -1) {
|
||||
showProgress.value = true;
|
||||
progress.value = _progress;
|
||||
} else {
|
||||
progress.value = 100;
|
||||
showError.value = true;
|
||||
}
|
||||
});
|
||||
getUseShortUrl();
|
||||
getPasteStyle();
|
||||
getDefaultPicBed();
|
||||
window.electron.electronAPI.ipcRenderer.on("syncPicBed", () => {
|
||||
getDefaultPicBed();
|
||||
});
|
||||
emitter.on(SHOW_INPUT_BOX_RESPONSE, handleInputBoxValue);
|
||||
});
|
||||
const handleImageProcess = () => {
|
||||
imageProcessDialogVisible.value = true;
|
||||
};
|
||||
watch(progress, onProgressChange);
|
||||
function onProgressChange(val) {
|
||||
if (val === 100) {
|
||||
setTimeout(() => {
|
||||
showProgress.value = false;
|
||||
showError.value = false;
|
||||
}, 1e3);
|
||||
setTimeout(() => {
|
||||
progress.value = 0;
|
||||
}, 1200);
|
||||
}
|
||||
}
|
||||
async function handlePicBedNameClick(_picBedName, picBedConfigName2) {
|
||||
const formatedpicBedConfigName = picBedConfigName2 || "Default";
|
||||
const currentPicBed = await getConfig(configPaths.picBed.current);
|
||||
const currentPicBedConfig = await getConfig(`uploader.${currentPicBed}`) || {};
|
||||
const configList = await triggerRPC(IRPCActionType.PICBED_GET_CONFIG_LIST, currentPicBed);
|
||||
const currentConfigList = configList?.configList ?? [];
|
||||
const config = currentConfigList.find((item) => item._configName === formatedpicBedConfigName);
|
||||
$router.push({
|
||||
name: PICBEDS_PAGE,
|
||||
params: {
|
||||
type: currentPicBed,
|
||||
configId: config?._id || ""
|
||||
},
|
||||
query: {
|
||||
defaultConfigId: currentPicBedConfig.defaultId || ""
|
||||
}
|
||||
});
|
||||
}
|
||||
onBeforeUnmount(() => {
|
||||
emitter.off(SHOW_INPUT_BOX_RESPONSE);
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners("uploadProgress");
|
||||
window.electron.electronAPI.ipcRenderer.removeAllListeners("syncPicBed");
|
||||
});
|
||||
function onDrop(e) {
|
||||
dragover.value = false;
|
||||
if (e.dataTransfer?.files?.length) {
|
||||
ipcSendFiles(e.dataTransfer.files);
|
||||
} else if (e.dataTransfer?.items) {
|
||||
const items = e.dataTransfer.items;
|
||||
if (items.length === 2 && items[0].type === "text/uri-list") {
|
||||
handleURLDrag(items, e.dataTransfer);
|
||||
} else if (items[0].type === "text/plain") {
|
||||
const str = e.dataTransfer.getData(items[0].type);
|
||||
if (isUrl(str)) {
|
||||
sendRPC(IRPCActionType.UPLOAD_CHOOSED_FILES, [{ path: str }]);
|
||||
} else {
|
||||
ElMessage.error(T("TIPS_DRAG_VALID_PICTURE_OR_URL"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function handleURLDrag(items, dataTransfer) {
|
||||
const urlString = dataTransfer.getData(items[1].type);
|
||||
const urlMatch = urlString.match(/<img.*src="(.*?)"/);
|
||||
if (urlMatch) {
|
||||
sendRPC(IRPCActionType.UPLOAD_CHOOSED_FILES, [
|
||||
{
|
||||
path: urlMatch[1]
|
||||
}
|
||||
]);
|
||||
} else {
|
||||
ElMessage.error(T("TIPS_DRAG_VALID_PICTURE_OR_URL"));
|
||||
}
|
||||
}
|
||||
function openUplodWindow() {
|
||||
document.getElementById("file-uploader").click();
|
||||
}
|
||||
function onChange(e) {
|
||||
ipcSendFiles(e.target.files);
|
||||
document.getElementById("file-uploader").value = "";
|
||||
}
|
||||
function ipcSendFiles(files) {
|
||||
const sendFiles = [];
|
||||
Array.from(files).forEach((item) => {
|
||||
const obj = {
|
||||
name: item.name,
|
||||
path: item.webkitRelativePath
|
||||
};
|
||||
sendFiles.push(obj);
|
||||
});
|
||||
sendRPC(IRPCActionType.UPLOAD_CHOOSED_FILES, sendFiles);
|
||||
}
|
||||
async function getPasteStyle() {
|
||||
pasteStyle.value = await getConfig(configPaths.settings.pasteStyle) || IPasteStyle.MARKDOWN;
|
||||
pasteFormatList.value.Custom = await getConfig(configPaths.settings.customLink) || "";
|
||||
}
|
||||
async function getUseShortUrl() {
|
||||
useShortUrl.value = await getConfig(configPaths.settings.useShortUrl) || false;
|
||||
}
|
||||
async function handleUseShortUrlChange() {
|
||||
saveConfig({
|
||||
[configPaths.settings.useShortUrl]: useShortUrl.value
|
||||
});
|
||||
}
|
||||
function handlePasteStyleChange(val) {
|
||||
saveConfig({
|
||||
[configPaths.settings.pasteStyle]: val || IPasteStyle.MARKDOWN
|
||||
});
|
||||
}
|
||||
function uploadClipboardFiles() {
|
||||
sendRPC(IRPCActionType.UPLOAD_CLIPBOARD_FILES_FROM_UPLOAD_PAGE);
|
||||
}
|
||||
async function uploadURLFiles() {
|
||||
const str = await navigator.clipboard.readText();
|
||||
emitter.emit(SHOW_INPUT_BOX, {
|
||||
value: isUrl(str) ? str : "",
|
||||
title: T("TIPS_INPUT_URL"),
|
||||
placeholder: T("TIPS_HTTP_PREFIX")
|
||||
});
|
||||
}
|
||||
function handleInputBoxValue(val) {
|
||||
if (val === "") return;
|
||||
if (isUrl(val)) {
|
||||
sendRPC(IRPCActionType.UPLOAD_CHOOSED_FILES, [
|
||||
{
|
||||
path: val
|
||||
}
|
||||
]);
|
||||
} else {
|
||||
ElMessage.error(T("TIPS_INPUT_VALID_URL"));
|
||||
}
|
||||
}
|
||||
async function getDefaultPicBed() {
|
||||
const currentPicBed = await getConfig(configPaths.picBed.current);
|
||||
picBedGlobal.value.forEach((item) => {
|
||||
if (item.type === currentPicBed) {
|
||||
picBedName.value = item.name;
|
||||
}
|
||||
});
|
||||
picBedConfigName.value = await getConfig(`picBed.${currentPicBed}._configName`) || "";
|
||||
}
|
||||
async function handleChangePicBed() {
|
||||
sendRPC(IRPCActionType.SHOW_UPLOAD_PAGE_MENU);
|
||||
}
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_tooltip = resolveComponent("el-tooltip");
|
||||
const _component_el_icon = resolveComponent("el-icon");
|
||||
const _component_el_button = resolveComponent("el-button");
|
||||
const _component_el_progress = resolveComponent("el-progress");
|
||||
const _component_el_radio_button = resolveComponent("el-radio-button");
|
||||
const _component_el_radio_group = resolveComponent("el-radio-group");
|
||||
const _component_el_col = resolveComponent("el-col");
|
||||
const _component_el_row = resolveComponent("el-row");
|
||||
const _component_el_dialog = resolveComponent("el-dialog");
|
||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
||||
createVNode(_component_el_row, {
|
||||
gutter: 16,
|
||||
align: "middle"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_col, { span: 24 }, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_2, [
|
||||
createVNode(_component_el_tooltip, {
|
||||
placement: "top",
|
||||
effect: "light",
|
||||
content: unref(T)("UPLOAD_VIEW_HINT"),
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("span", {
|
||||
id: "upload-view-title",
|
||||
onClick: _cache[0] || (_cache[0] = ($event) => handlePicBedNameClick(picBedName.value, picBedConfigName.value))
|
||||
}, toDisplayString(picBedName.value) + " - " + toDisplayString(picBedConfigName.value || "Default"), 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["content"]),
|
||||
createVNode(_component_el_icon, {
|
||||
style: { "cursor": "pointer", "margin-left": "4px" },
|
||||
onClick: handleChangePicBed
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(caret_bottom_default))
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
round: "",
|
||||
size: "small",
|
||||
class: "quick-upload",
|
||||
style: { "margin-left": "6px" },
|
||||
onClick: handleImageProcess
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_NAME")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
createBaseVNode("div", {
|
||||
id: "upload-area",
|
||||
class: normalizeClass({ "is-dragover": dragover.value }),
|
||||
onDrop: withModifiers(onDrop, ["prevent"]),
|
||||
onDragover: _cache[1] || (_cache[1] = withModifiers(($event) => dragover.value = true, ["prevent"])),
|
||||
onDragleave: _cache[2] || (_cache[2] = withModifiers(($event) => dragover.value = false, ["prevent"]))
|
||||
}, [
|
||||
createBaseVNode("div", {
|
||||
id: "upload-dragger",
|
||||
onClick: openUplodWindow
|
||||
}, [
|
||||
createVNode(_component_el_icon, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(upload_filled_default))
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createBaseVNode("div", _hoisted_3, [
|
||||
createTextVNode(toDisplayString(unref(T)("DRAG_FILE_TO_HERE")) + " ", 1),
|
||||
createBaseVNode("span", null, toDisplayString(unref(T)("CLICK_TO_UPLOAD")), 1)
|
||||
]),
|
||||
createBaseVNode("input", {
|
||||
id: "file-uploader",
|
||||
type: "file",
|
||||
multiple: "",
|
||||
onChange
|
||||
}, null, 32)
|
||||
])
|
||||
], 34),
|
||||
createVNode(_component_el_progress, {
|
||||
percentage: progress.value,
|
||||
"show-text": false,
|
||||
class: normalizeClass(["upload-progress", { show: showProgress.value }]),
|
||||
status: showError.value ? "exception" : void 0
|
||||
}, null, 8, ["percentage", "class", "status"]),
|
||||
createBaseVNode("div", _hoisted_4, [
|
||||
createBaseVNode("div", _hoisted_5, [
|
||||
createBaseVNode("div", _hoisted_6, toDisplayString(unref(T)("LINK_FORMAT")), 1),
|
||||
createVNode(_component_el_radio_group, {
|
||||
modelValue: pasteStyle.value,
|
||||
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => pasteStyle.value = $event),
|
||||
size: "small",
|
||||
onChange: handlePasteStyleChange
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(pasteFormatList.value, (item, key) => {
|
||||
return openBlock(), createBlock(_component_el_radio_button, {
|
||||
key,
|
||||
value: key,
|
||||
title: item
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(key), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["value", "title"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue"]),
|
||||
createVNode(_component_el_radio_group, {
|
||||
modelValue: useShortUrl.value,
|
||||
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => useShortUrl.value = $event),
|
||||
size: "small",
|
||||
onChange: handleUseShortUrlChange
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_radio_button, {
|
||||
value: true,
|
||||
style: { "border-radius": "5px" }
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("UPLOAD_SHORT_URL")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_radio_button, {
|
||||
value: false,
|
||||
style: { "border-radius": "5px" }
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("UPLOAD_NORMAL_URL")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue"])
|
||||
]),
|
||||
createBaseVNode("div", _hoisted_7, [
|
||||
createBaseVNode("div", _hoisted_8, toDisplayString(unref(T)("QUICK_UPLOAD")), 1),
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
round: "",
|
||||
size: "small",
|
||||
class: "quick-upload",
|
||||
style: { "width": "50%" },
|
||||
onClick: uploadClipboardFiles
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("CLIPBOARD_PICTURE")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
round: "",
|
||||
size: "small",
|
||||
class: "quick-upload",
|
||||
style: { "width": "46%", "margin-left": "6px" },
|
||||
onClick: uploadURLFiles
|
||||
}, {
|
||||
default: withCtx(() => _cache[7] || (_cache[7] = [
|
||||
createTextVNode(" URL ", -1)
|
||||
])),
|
||||
_: 1,
|
||||
__: [7]
|
||||
})
|
||||
])
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_dialog, {
|
||||
modelValue: imageProcessDialogVisible.value,
|
||||
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => imageProcessDialogVisible.value = $event),
|
||||
title: unref(T)("UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE"),
|
||||
width: "50%",
|
||||
draggable: "",
|
||||
center: "",
|
||||
"align-center": "",
|
||||
"append-to-body": ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_sfc_main$1, {
|
||||
modelValue: imageProcessDialogVisible.value,
|
||||
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => imageProcessDialogVisible.value = $event)
|
||||
}, null, 8, ["modelValue"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["modelValue", "title"])
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
93
dist/renderer/assets/Upload-DQdUIROq.css
vendored
@@ -1,93 +0,0 @@
|
||||
.view-title {
|
||||
display: flex;
|
||||
color: #eee;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
margin: 10px auto;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
#upload-view-title:hover {
|
||||
cursor: pointer;
|
||||
color: #409eff;
|
||||
}
|
||||
#upload-view {
|
||||
position: absolute;
|
||||
left: 142px;
|
||||
right: 0;
|
||||
height: 100%;
|
||||
}
|
||||
#upload-view .view-title {
|
||||
margin: 10vh auto 10px;
|
||||
}
|
||||
#upload-view #upload-area {
|
||||
height: 50vh;
|
||||
border: 2px dashed #ddd;
|
||||
border-radius: 8px;
|
||||
text-align: center;
|
||||
width: 60vw;
|
||||
margin: 0 auto;
|
||||
color: #ddd;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease-in-out;
|
||||
align-items: center;
|
||||
}
|
||||
#upload-view #upload-area #upload-dragger {
|
||||
height: 100%;
|
||||
item-align: center;
|
||||
}
|
||||
#upload-view #upload-area.is-dragover,
|
||||
#upload-view #upload-area:hover {
|
||||
border: 2px dashed #a4d8fa;
|
||||
background-color: rgba(164,216,250,0.3);
|
||||
color: #fff;
|
||||
}
|
||||
#upload-view #upload-area i {
|
||||
height: 80%;
|
||||
font-size: 10vh;
|
||||
margin: 0;
|
||||
}
|
||||
#upload-view #upload-area span {
|
||||
color: #409eff;
|
||||
}
|
||||
#upload-view #file-uploader {
|
||||
display: none;
|
||||
}
|
||||
#upload-view .upload-progress {
|
||||
opacity: 0;
|
||||
transition: all 0.2s ease-in-out;
|
||||
width: 450px;
|
||||
margin: 20px auto 0;
|
||||
}
|
||||
#upload-view .upload-progress.show {
|
||||
opacity: 1;
|
||||
}
|
||||
#upload-view .upload-progress .el-progress-bar__inner {
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
#upload-view .paste-style {
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
margin-top: 16px;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
}
|
||||
#upload-view .paste-style__text {
|
||||
font-size: 12px;
|
||||
color: #eee;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
#upload-view .el-radio-button:first-child .el-radio-button__inner {
|
||||
border-left: none;
|
||||
}
|
||||
#upload-view .el-radio-button:first-child .el-radio-button__inner {
|
||||
border-left: none;
|
||||
border-radius: 14px 0 0 14px;
|
||||
}
|
||||
#upload-view .el-radio-button:last-child .el-radio-button__inner {
|
||||
border-left: none;
|
||||
border-radius: 0 14px 14px 0;
|
||||
}
|
||||
#upload-view .el-icon-caret-bottom {
|
||||
cursor: pointer;
|
||||
}
|
||||
207
dist/renderer/assets/UploaderConfigPage-BvifEShU.js
vendored
@@ -1,207 +0,0 @@
|
||||
import { d as defineComponent, r as ref, W as onBeforeRouteUpdate, o as onBeforeMount, al as useRoute, m as triggerRPC, j as IRPCActionType, c as createElementBlock, e as openBlock, f as createBaseVNode, q as createVNode, t as toDisplayString, u as unref, T, v as withCtx, y as resolveComponent, F as Fragment, h as renderList, N as createBlock, g as createCommentVNode, aJ as edit_default, x as withModifiers, n as normalizeClass, a_ as delete_default, bm as plus_default, bn as useStore, B as createTextVNode, s as sendRPC, Q as useRouter, ak as PICBEDS_PAGE, b4 as dayjs, af as saveConfig, p as configPaths, bo as UPLOADER_CONFIG_PAGE } from "./index-BqdcQlNn.js";
|
||||
const _hoisted_1 = { id: "config-list-view" };
|
||||
const _hoisted_2 = { class: "view-title" };
|
||||
const _hoisted_3 = ["onClick"];
|
||||
const _hoisted_4 = { class: "config-name" };
|
||||
const _hoisted_5 = { class: "config-update-time" };
|
||||
const _hoisted_6 = {
|
||||
key: 0,
|
||||
class: "default-text"
|
||||
};
|
||||
const _hoisted_7 = { class: "operation-container" };
|
||||
const __default__ = {
|
||||
name: "UploaderConfigPage"
|
||||
};
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
...__default__,
|
||||
setup(__props) {
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const type = ref("");
|
||||
const curConfigList = ref([]);
|
||||
const defaultConfigId = ref("");
|
||||
const store = useStore();
|
||||
async function selectItem(id) {
|
||||
await triggerRPC(IRPCActionType.UPLOADER_SELECT, type.value, id);
|
||||
if (store?.state.defaultPicBed === type.value) {
|
||||
sendRPC(
|
||||
IRPCActionType.TRAY_SET_TOOL_TIP,
|
||||
`${type.value} ${curConfigList.value.find((item) => item._id === id)?._configName || ""}`
|
||||
);
|
||||
}
|
||||
defaultConfigId.value = id;
|
||||
}
|
||||
onBeforeRouteUpdate((to, _, next) => {
|
||||
if (to.params.type && to.name === UPLOADER_CONFIG_PAGE) {
|
||||
type.value = to.params.type;
|
||||
getCurrentConfigList();
|
||||
}
|
||||
next();
|
||||
});
|
||||
onBeforeMount(() => {
|
||||
type.value = route.params.type;
|
||||
getCurrentConfigList();
|
||||
});
|
||||
async function getCurrentConfigList() {
|
||||
const configList = await triggerRPC(IRPCActionType.PICBED_GET_CONFIG_LIST, type.value);
|
||||
curConfigList.value = configList?.configList ?? [];
|
||||
defaultConfigId.value = configList?.defaultId ?? "";
|
||||
}
|
||||
function openEditPage(configId) {
|
||||
router.push({
|
||||
name: PICBEDS_PAGE,
|
||||
params: {
|
||||
type: type.value,
|
||||
configId
|
||||
},
|
||||
query: {
|
||||
defaultConfigId: defaultConfigId.value
|
||||
}
|
||||
});
|
||||
}
|
||||
function formatTime(time) {
|
||||
return dayjs(time).format("YY-MM-DD HH:mm");
|
||||
}
|
||||
async function deleteConfig(id) {
|
||||
const res = await triggerRPC(IRPCActionType.PICBED_DELETE_CONFIG, type.value, id);
|
||||
if (!res) return;
|
||||
curConfigList.value = res.configList;
|
||||
defaultConfigId.value = res.defaultId;
|
||||
}
|
||||
function addNewConfig() {
|
||||
router.push({
|
||||
name: PICBEDS_PAGE,
|
||||
params: {
|
||||
type: type.value,
|
||||
configId: ""
|
||||
}
|
||||
});
|
||||
}
|
||||
function setDefaultPicBed(type2) {
|
||||
saveConfig({
|
||||
[configPaths.picBed.current]: type2,
|
||||
[configPaths.picBed.uploader]: type2
|
||||
});
|
||||
store?.setDefaultPicBed(type2);
|
||||
const currentConfigName = curConfigList.value.find((item) => item._id === defaultConfigId.value)?._configName;
|
||||
sendRPC(IRPCActionType.TRAY_SET_TOOL_TIP, `${type2} ${currentConfigName || ""}`);
|
||||
const successNotification = new Notification(T("SETTINGS_DEFAULT_PICBED"), {
|
||||
body: T("TIPS_SET_SUCCEED")
|
||||
});
|
||||
successNotification.onclick = () => {
|
||||
return true;
|
||||
};
|
||||
}
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_icon = resolveComponent("el-icon");
|
||||
const _component_el_col = resolveComponent("el-col");
|
||||
const _component_el_row = resolveComponent("el-row");
|
||||
const _component_el_button = resolveComponent("el-button");
|
||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
||||
createBaseVNode("div", _hoisted_2, toDisplayString(unref(T)("SETTINGS")), 1),
|
||||
createVNode(_component_el_row, {
|
||||
gutter: 15,
|
||||
justify: "space-between",
|
||||
align: "middle",
|
||||
type: "flex",
|
||||
class: "config-list"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(curConfigList.value, (item) => {
|
||||
return openBlock(), createBlock(_component_el_col, {
|
||||
key: item._id,
|
||||
class: "config-item-col",
|
||||
xs: 24,
|
||||
sm: curConfigList.value.length === 1 ? 24 : 12,
|
||||
md: curConfigList.value.length === 1 ? 24 : 12,
|
||||
lg: curConfigList.value.length === 1 ? 12 : 6,
|
||||
xl: curConfigList.value.length === 1 ? 12 : 3
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", {
|
||||
class: normalizeClass(`config-item ${defaultConfigId.value === item._id ? "selected" : ""}`),
|
||||
onClick: () => selectItem(item._id)
|
||||
}, [
|
||||
createBaseVNode("div", _hoisted_4, toDisplayString(item._configName), 1),
|
||||
createBaseVNode("div", _hoisted_5, toDisplayString(formatTime(item._updatedAt)), 1),
|
||||
defaultConfigId.value === item._id ? (openBlock(), createElementBlock("div", _hoisted_6, toDisplayString(unref(T)("SELECTED_SETTING_HINT")), 1)) : createCommentVNode("", true),
|
||||
createBaseVNode("div", _hoisted_7, [
|
||||
createVNode(_component_el_icon, {
|
||||
class: "el-icon-edit",
|
||||
onClick: ($event) => openEditPage(item._id)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(edit_default))
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["onClick"]),
|
||||
createVNode(_component_el_icon, {
|
||||
class: normalizeClass(["el-icon-delete", curConfigList.value.length <= 1 ? "disabled" : ""]),
|
||||
onClick: withModifiers(() => deleteConfig(item._id), ["stop"])
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(delete_default))
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["class", "onClick"])
|
||||
])
|
||||
], 10, _hoisted_3)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["sm", "md", "lg", "xl"]);
|
||||
}), 128)),
|
||||
createVNode(_component_el_col, {
|
||||
class: "config-item-col",
|
||||
xs: 24,
|
||||
sm: curConfigList.value.length === 1 ? 24 : 12,
|
||||
md: curConfigList.value.length === 1 ? 24 : 12,
|
||||
lg: curConfigList.value.length === 1 ? 12 : 6,
|
||||
xl: curConfigList.value.length === 1 ? 12 : 3
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", {
|
||||
class: "config-item config-item-add",
|
||||
onClick: addNewConfig
|
||||
}, [
|
||||
createVNode(_component_el_icon, { class: "el-icon-plus" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(plus_default))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["sm", "md", "lg", "xl"])
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_row, {
|
||||
type: "flex",
|
||||
justify: "center",
|
||||
span: 24,
|
||||
class: "set-default-container"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_button, {
|
||||
class: "set-default-btn",
|
||||
type: "success",
|
||||
round: "",
|
||||
disabled: unref(store)?.state.defaultPicBed === type.value,
|
||||
onClick: _cache[0] || (_cache[0] = ($event) => setDefaultPicBed(type.value))
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("SETTINGS_SET_DEFAULT_PICBED")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["disabled"])
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
@@ -1,90 +0,0 @@
|
||||
#config-list-view {
|
||||
position: absolute;
|
||||
min-height: 100%;
|
||||
left: 162px;
|
||||
right: 0;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
padding-bottom: 50px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#config-list-view .config-list {
|
||||
flex-wrap: wrap;
|
||||
width: 98%;
|
||||
}
|
||||
#config-list-view .config-list .config-item {
|
||||
height: 85px;
|
||||
margin-bottom: 20px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
box-sizing: border-box;
|
||||
padding: 8px;
|
||||
background: rgba(130,130,130,0.2);
|
||||
border: 1px solid transparent;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.12), 0 0 6px rgba(0,0,0,0.04);
|
||||
position: relative;
|
||||
}
|
||||
#config-list-view .config-list .config-item .config-name {
|
||||
color: #eee;
|
||||
font-size: 16px;
|
||||
}
|
||||
#config-list-view .config-list .config-item .config-update-time {
|
||||
color: #aaa;
|
||||
font-size: 14px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
#config-list-view .config-list .config-item .default-text {
|
||||
color: #67c23a;
|
||||
font-size: 12px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
#config-list-view .config-list .config-item .operation-container {
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
top: 8px;
|
||||
left: 0;
|
||||
font-size: 18pxc;
|
||||
word-break: break-all;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
color: #eee;
|
||||
}
|
||||
#config-list-view .config-list .config-item .operation-container .el-icon-edit {
|
||||
right: 20px;
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
#config-list-view .config-list .config-item .operation-container .el-icon-delete {
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
margin-right: 10px;
|
||||
right: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
#config-list-view .config-list .config-item .operation-container .el-icon-edit {
|
||||
margin-right: 10px;
|
||||
}
|
||||
#config-list-view .config-list .config-item .operation-container .disabled {
|
||||
cursor: not-allowed;
|
||||
color: #aaa;
|
||||
}
|
||||
#config-list-view .config-list .config-item-add {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
color: #eee;
|
||||
font-size: 28px;
|
||||
}
|
||||
#config-list-view .config-list .selected {
|
||||
border: 1px solid #409eff;
|
||||
}
|
||||
#config-list-view .set-default-container {
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
width: 100%;
|
||||
}
|
||||
#config-list-view .set-default-container .set-default-btn {
|
||||
width: 250px;
|
||||
}
|
||||
2586
dist/renderer/assets/bucketFileDb-qvw68roE.js
vendored
20
dist/renderer/assets/bus-BjW7Y6FA.js
vendored
@@ -1,20 +0,0 @@
|
||||
function mitt(n) {
|
||||
return { all: n = n || /* @__PURE__ */ new Map(), on: function(t, e) {
|
||||
var i = n.get(t);
|
||||
i ? i.push(e) : n.set(t, [e]);
|
||||
}, off: function(t, e) {
|
||||
var i = n.get(t);
|
||||
i && (e ? i.splice(i.indexOf(e) >>> 0, 1) : n.set(t, []));
|
||||
}, emit: function(t, e) {
|
||||
var i = n.get(t);
|
||||
i && i.slice().map(function(n2) {
|
||||
n2(e);
|
||||
}), (i = n.get("*")) && i.slice().map(function(n2) {
|
||||
n2(t, e);
|
||||
});
|
||||
} };
|
||||
}
|
||||
const emitter = mitt();
|
||||
export {
|
||||
emitter as e
|
||||
};
|
||||
51
dist/renderer/assets/common-DNjr697i.js
vendored
@@ -1,51 +0,0 @@
|
||||
const isUrl = (url) => {
|
||||
try {
|
||||
return Boolean(new URL(url));
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
const isUrlEncode = (url) => {
|
||||
url = url || "";
|
||||
try {
|
||||
return url !== decodeURI(url);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
const handleUrlEncode = (url) => isUrlEncode(url) ? url : encodeURI(url);
|
||||
const handleStreamlinePluginName = (name) => name.replace(/(@[^/]+\/)?picgo-plugin-/, "");
|
||||
const enforceNumber = (num) => isNaN(+num) ? 0 : +num;
|
||||
function isNeedToShorten(alias, cutOff = 20) {
|
||||
return [...alias].reduce((len, char) => len + (char.charCodeAt(0) > 255 ? 2 : 1), 0) > cutOff;
|
||||
}
|
||||
function safeSliceF(str, total) {
|
||||
let result = "";
|
||||
let totalLen = 0;
|
||||
for (const s of str) {
|
||||
if (totalLen >= total) {
|
||||
break;
|
||||
}
|
||||
result += s;
|
||||
totalLen += s.charCodeAt(0) > 255 ? 2 : 1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
const formatEndpoint = (endpoint, sslEnabled) => {
|
||||
const hasProtocol = /^https?:\/\//.test(endpoint);
|
||||
if (!hasProtocol) {
|
||||
return `${sslEnabled ? "https" : "http"}://${endpoint}`;
|
||||
}
|
||||
return sslEnabled ? endpoint.replace(/^http:\/\//, "https://") : endpoint.replace(/^https:\/\//, "http://");
|
||||
};
|
||||
const trimPath = (path) => path.replace(/^\/+|\/+$/g, "").replace(/\/+/g, "/");
|
||||
export {
|
||||
isNeedToShorten as a,
|
||||
handleStreamlinePluginName as b,
|
||||
enforceNumber as e,
|
||||
formatEndpoint as f,
|
||||
handleUrlEncode as h,
|
||||
isUrl as i,
|
||||
safeSliceF as s,
|
||||
trimPath as t
|
||||
};
|
||||
513
dist/renderer/assets/common-REXFY3_s.js
vendored
@@ -1,513 +0,0 @@
|
||||
import { g as getConfig } from "./dataSender-Bg45AIFL.js";
|
||||
import { s as safeSliceF, a as isNeedToShorten, h as handleUrlEncode } from "./common-DNjr697i.js";
|
||||
const byteToHex = [];
|
||||
for (let i = 0; i < 256; ++i) {
|
||||
byteToHex.push((i + 256).toString(16).slice(1));
|
||||
}
|
||||
function unsafeStringify(arr, offset = 0) {
|
||||
return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
|
||||
}
|
||||
let getRandomValues;
|
||||
const rnds8 = new Uint8Array(16);
|
||||
function rng() {
|
||||
if (!getRandomValues) {
|
||||
if (typeof crypto === "undefined" || !crypto.getRandomValues) {
|
||||
throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
|
||||
}
|
||||
getRandomValues = crypto.getRandomValues.bind(crypto);
|
||||
}
|
||||
return getRandomValues(rnds8);
|
||||
}
|
||||
const randomUUID = typeof crypto !== "undefined" && crypto.randomUUID && crypto.randomUUID.bind(crypto);
|
||||
const native = { randomUUID };
|
||||
function v4(options, buf, offset) {
|
||||
if (native.randomUUID && true && !options) {
|
||||
return native.randomUUID();
|
||||
}
|
||||
options = options || {};
|
||||
const rnds = options.random ?? options.rng?.() ?? rng();
|
||||
if (rnds.length < 16) {
|
||||
throw new Error("Random bytes length must be >= 16");
|
||||
}
|
||||
rnds[6] = rnds[6] & 15 | 64;
|
||||
rnds[8] = rnds[8] & 63 | 128;
|
||||
return unsafeStringify(rnds);
|
||||
}
|
||||
const availableIconList = [
|
||||
"_blank",
|
||||
"_page",
|
||||
"3g2",
|
||||
"3gp",
|
||||
"7z",
|
||||
"aac",
|
||||
"accdb",
|
||||
"adt",
|
||||
"ai",
|
||||
"aiff",
|
||||
"aly",
|
||||
"amiga",
|
||||
"amr",
|
||||
"ape",
|
||||
"apk",
|
||||
"arj",
|
||||
"asf",
|
||||
"asm",
|
||||
"asx",
|
||||
"au",
|
||||
"avc",
|
||||
"avi",
|
||||
"avif",
|
||||
"avs",
|
||||
"bak",
|
||||
"bas",
|
||||
"bat",
|
||||
"bmp",
|
||||
"bom",
|
||||
"c",
|
||||
"cda",
|
||||
"cdr",
|
||||
"chm",
|
||||
"class",
|
||||
"cmd",
|
||||
"com",
|
||||
"cpp",
|
||||
"css",
|
||||
"csv",
|
||||
"dart",
|
||||
"dat",
|
||||
"ddb",
|
||||
"dif",
|
||||
"divx",
|
||||
"dll",
|
||||
"dmg",
|
||||
"doc",
|
||||
"docm",
|
||||
"docx",
|
||||
"dot",
|
||||
"dotm",
|
||||
"dotx",
|
||||
"dsl",
|
||||
"dv",
|
||||
"dvd",
|
||||
"dvdaudio",
|
||||
"dwg",
|
||||
"dxf",
|
||||
"emf",
|
||||
"env",
|
||||
"eot",
|
||||
"eps",
|
||||
"exe",
|
||||
"exif",
|
||||
"fakesmms",
|
||||
"flc",
|
||||
"fli",
|
||||
"flv",
|
||||
"folder",
|
||||
"fon",
|
||||
"font",
|
||||
"for",
|
||||
"fpx",
|
||||
"fv",
|
||||
"gif",
|
||||
"gitingore",
|
||||
"gitkeep",
|
||||
"gz",
|
||||
"h",
|
||||
"hdri",
|
||||
"hlp",
|
||||
"hpp",
|
||||
"htm",
|
||||
"html",
|
||||
"ico",
|
||||
"ics",
|
||||
"int",
|
||||
"ipynb",
|
||||
"iso",
|
||||
"java",
|
||||
"jpeg",
|
||||
"jpg",
|
||||
"js",
|
||||
"json",
|
||||
"key",
|
||||
"ksp",
|
||||
"less",
|
||||
"lib",
|
||||
"lic",
|
||||
"license",
|
||||
"log",
|
||||
"lst",
|
||||
"lua",
|
||||
"mac",
|
||||
"map",
|
||||
"markdown",
|
||||
"md",
|
||||
"mdf",
|
||||
"mht",
|
||||
"mhtml",
|
||||
"mid",
|
||||
"midi",
|
||||
"mkv",
|
||||
"mmf",
|
||||
"mod",
|
||||
"mov",
|
||||
"mp2",
|
||||
"mp3",
|
||||
"mp4",
|
||||
"mpa",
|
||||
"mpe",
|
||||
"mpeg",
|
||||
"mpeg1",
|
||||
"mpeg2",
|
||||
"mpg",
|
||||
"mppro",
|
||||
"msg",
|
||||
"mts",
|
||||
"mux",
|
||||
"mv",
|
||||
"navi",
|
||||
"obj",
|
||||
"odf",
|
||||
"ods",
|
||||
"odt",
|
||||
"ogg",
|
||||
"one",
|
||||
"otf",
|
||||
"otp",
|
||||
"ots",
|
||||
"ott",
|
||||
"pas",
|
||||
"pcd",
|
||||
"pcx",
|
||||
"pdf",
|
||||
"php",
|
||||
"pic",
|
||||
"png",
|
||||
"ppt",
|
||||
"pptx",
|
||||
"proe",
|
||||
"prt",
|
||||
"psd",
|
||||
"py",
|
||||
"pyc",
|
||||
"qsv",
|
||||
"qt",
|
||||
"quicktime",
|
||||
"ra",
|
||||
"ram",
|
||||
"rar",
|
||||
"raw",
|
||||
"rb",
|
||||
"realaudio",
|
||||
"rm",
|
||||
"rmvb",
|
||||
"rp",
|
||||
"rtf",
|
||||
"s48",
|
||||
"sacd",
|
||||
"sass",
|
||||
"sch",
|
||||
"scss",
|
||||
"sh",
|
||||
"sql",
|
||||
"stp",
|
||||
"svcd",
|
||||
"svg",
|
||||
"swf",
|
||||
"sys",
|
||||
"tga",
|
||||
"tgz",
|
||||
"tiff",
|
||||
"tmp",
|
||||
"ts",
|
||||
"ttc",
|
||||
"ttf",
|
||||
"txt",
|
||||
"ufo",
|
||||
"unknown",
|
||||
"vcd",
|
||||
"vob",
|
||||
"voc",
|
||||
"vqf",
|
||||
"vue",
|
||||
"wav",
|
||||
"wdl",
|
||||
"webm",
|
||||
"webp",
|
||||
"wki",
|
||||
"wma",
|
||||
"wmf",
|
||||
"wmv",
|
||||
"wmvhd",
|
||||
"woff",
|
||||
"woff2",
|
||||
"wps",
|
||||
"wpt",
|
||||
"x_t",
|
||||
"xls",
|
||||
"xlsm",
|
||||
"xlsx",
|
||||
"xlt",
|
||||
"xltm",
|
||||
"xltx",
|
||||
"xmind",
|
||||
"xml",
|
||||
"xv",
|
||||
"xvid",
|
||||
"yaml",
|
||||
"yml",
|
||||
"z",
|
||||
"zip"
|
||||
];
|
||||
function randomStringGenerator(length) {
|
||||
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||
return Array.from({ length }).map(() => chars.charAt(Math.floor(Math.random() * chars.length))).join("");
|
||||
}
|
||||
function renameFileNameWithTimestamp(oldName) {
|
||||
return `${Math.floor(Date.now() / 1e3)}${randomStringGenerator(5)}${window.node.path.extname(oldName)}`;
|
||||
}
|
||||
function renameFileNameWithRandomString(oldName, length = 5) {
|
||||
return `${randomStringGenerator(length)}${window.node.path.extname(oldName)}`;
|
||||
}
|
||||
function renameFormatHelper(num) {
|
||||
return num.toString().length === 1 ? `0${num}` : num.toString();
|
||||
}
|
||||
function getMd5(input) {
|
||||
return window.node.crypto.createHash("md5").update(input).digest("hex");
|
||||
}
|
||||
function renameFileNameWithCustomString(oldName, customFormat, affixFileName) {
|
||||
const date = /* @__PURE__ */ new Date();
|
||||
const year = date.getFullYear().toString();
|
||||
const fileBaseName = window.node.path.basename(oldName, window.node.path.extname(oldName));
|
||||
const conversionMap = {
|
||||
"{Y}": () => year,
|
||||
"{y}": () => year.slice(2),
|
||||
"{m}": () => renameFormatHelper(date.getMonth() + 1),
|
||||
"{d}": () => renameFormatHelper(date.getDate()),
|
||||
"{h}": () => renameFormatHelper(date.getHours()),
|
||||
"{i}": () => renameFormatHelper(date.getMinutes()),
|
||||
"{s}": () => renameFormatHelper(date.getSeconds()),
|
||||
"{ms}": () => date.getMilliseconds().toString().padStart(3, "0"),
|
||||
"{md5}": () => getMd5(fileBaseName),
|
||||
"{md5-16}": () => getMd5(fileBaseName).slice(0, 16),
|
||||
"{filename}": () => affixFileName ? window.node.path.basename(affixFileName, window.node.path.extname(affixFileName)) : window.node.path.basename(oldName, window.node.path.extname(oldName)),
|
||||
"{uuid}": () => v4().replace(/-/g, ""),
|
||||
"{timestamp}": () => date.getTime().toString()
|
||||
};
|
||||
if (customFormat === void 0 || !Object.keys(conversionMap).some((item) => customFormat.includes(item)) && !customFormat.includes("{str-")) {
|
||||
return oldName;
|
||||
}
|
||||
const ext = window.node.path.extname(oldName);
|
||||
let newName = Object.keys(conversionMap).reduce((acc, cur) => {
|
||||
return acc.replace(new RegExp(cur, "g"), conversionMap[cur]());
|
||||
}, customFormat) + ext;
|
||||
const strRegex = /{str-(\d+)}/gi;
|
||||
newName = newName.replace(strRegex, (_, group1) => {
|
||||
const length = parseInt(group1, 10);
|
||||
return randomStringGenerator(length);
|
||||
});
|
||||
return newName;
|
||||
}
|
||||
function renameFile({ timestampRename, randomStringRename, customRename, customRenameFormat }, oldName = "") {
|
||||
switch (true) {
|
||||
case timestampRename:
|
||||
return renameFileNameWithTimestamp(oldName);
|
||||
case randomStringRename:
|
||||
return renameFileNameWithRandomString(oldName, 20);
|
||||
case customRename:
|
||||
return renameFileNameWithCustomString(oldName, customRenameFormat);
|
||||
default:
|
||||
return oldName;
|
||||
}
|
||||
}
|
||||
async function formatLink(url, fileName, type, format) {
|
||||
const encodedUrl = await getConfig("settings.isEncodeUrl") ? handleUrlEncode(url) : url;
|
||||
switch (type) {
|
||||
case "markdown":
|
||||
return ``;
|
||||
case "html":
|
||||
return `<img src="${encodedUrl}" alt="${fileName}"/>`;
|
||||
case "bbcode":
|
||||
return `[img]${encodedUrl}[/img]`;
|
||||
case "url":
|
||||
return encodedUrl;
|
||||
case "markdown-with-link":
|
||||
return `[](${encodedUrl})`;
|
||||
case "custom":
|
||||
if (format && (format.includes("$url") || format.includes("$fileName"))) {
|
||||
return format.replace(/\$url/g, encodedUrl).replace(/\$fileName/g, fileName);
|
||||
}
|
||||
return encodedUrl;
|
||||
default:
|
||||
return encodedUrl;
|
||||
}
|
||||
}
|
||||
function getFileIconPath(fileName) {
|
||||
const ext = window.node.path.extname(fileName).slice(1).toLowerCase();
|
||||
return availableIconList.includes(ext) ? `${ext}.webp` : "unknown.webp";
|
||||
}
|
||||
const units = ["B", "KB", "MB", "GB", "TB", "PB"];
|
||||
function formatFileSize(size) {
|
||||
if (size === 0) return "";
|
||||
const index = Math.floor(Math.log2(size) / 10);
|
||||
return `${(size / Math.pow(2, index * 10)).toFixed(2)} ${units[index]}`;
|
||||
}
|
||||
function formatFileName(fileName, length = 20) {
|
||||
let ext = window.node.path.extname(fileName);
|
||||
ext = ext.length > 5 ? ext.slice(ext.length - 5) : ext;
|
||||
const name = window.node.path.basename(fileName, ext);
|
||||
return isNeedToShorten(fileName, length) ? `${safeSliceF(name, length - 3 - ext.length)}...${ext}` : fileName;
|
||||
}
|
||||
function formObjToTableData(obj) {
|
||||
const exclude = [void 0, null, "", "transformedConfig"];
|
||||
return Object.keys(obj).filter((key) => !exclude.includes(obj[key])).map((key) => ({
|
||||
key,
|
||||
value: typeof obj[key] === "object" ? JSON.stringify(obj[key]) : obj[key]
|
||||
})).sort((a, b) => a.key.localeCompare(b.key));
|
||||
}
|
||||
function isValidUrl(str) {
|
||||
try {
|
||||
return !!new URL(str);
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const svg = `
|
||||
<path class="path" d="
|
||||
M 30 15
|
||||
L 28 17
|
||||
M 25.61 25.61
|
||||
A 15 15, 0, 0, 1, 15 30
|
||||
A 15 15, 0, 1, 1, 27.99 7.5
|
||||
L 15 15
|
||||
" style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"/>
|
||||
`;
|
||||
function customStrMatch(str, pattern) {
|
||||
if (!str || !pattern) return false;
|
||||
try {
|
||||
const reg = new RegExp(pattern, "ug");
|
||||
return reg.test(str);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
function customStrReplace(str, pattern, replacement) {
|
||||
if (!str || !pattern) return str;
|
||||
replacement = replacement || "";
|
||||
let result = str;
|
||||
try {
|
||||
const reg = new RegExp(pattern, "ug");
|
||||
result = str.replace(reg, replacement);
|
||||
result = renameFileNameWithCustomString(result, result, str);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
const customRenameFormatTable = [
|
||||
{
|
||||
placeholder: "{Y}",
|
||||
description: "年份,4位数",
|
||||
placeholderB: "{y}",
|
||||
descriptionB: "年份,2位数"
|
||||
},
|
||||
{
|
||||
placeholder: "{m}",
|
||||
description: "月份(01-12)",
|
||||
placeholderB: "{d}",
|
||||
descriptionB: "日期(01-31)"
|
||||
},
|
||||
{
|
||||
placeholder: "{h}",
|
||||
description: "小时(00-23)",
|
||||
placeholderB: "{i}",
|
||||
descriptionB: "分钟(00-59)"
|
||||
},
|
||||
{
|
||||
placeholder: "{s}",
|
||||
description: "秒(00-59)",
|
||||
placeholderB: "{ms}",
|
||||
descriptionB: "毫秒(000-999)"
|
||||
},
|
||||
{
|
||||
placeholder: "{timestamp}",
|
||||
description: "时间戳(毫秒)",
|
||||
placeholderB: "{uuid}",
|
||||
descriptionB: "uuid字符串"
|
||||
},
|
||||
{
|
||||
placeholder: "{md5}",
|
||||
description: "md5",
|
||||
placeholderB: "{md5-16}",
|
||||
descriptionB: "md5前16位"
|
||||
},
|
||||
{
|
||||
placeholder: "{str-number}",
|
||||
description: "number位随机字符串",
|
||||
placeholderB: "{filename}",
|
||||
descriptionB: "原文件名"
|
||||
}
|
||||
];
|
||||
const buildInRenameFormatTable = [
|
||||
{
|
||||
placeholder: "{Y}",
|
||||
description: "年份,4位数",
|
||||
placeholderB: "{timestamp}",
|
||||
descriptionB: "时间戳(毫秒)"
|
||||
},
|
||||
{
|
||||
placeholder: "{y}",
|
||||
description: "年份,2位数",
|
||||
placeholderB: "{md5}",
|
||||
descriptionB: "md5"
|
||||
},
|
||||
{
|
||||
placeholder: "{m}",
|
||||
description: "月份(01-12)",
|
||||
placeholderB: "{md5-16}",
|
||||
descriptionB: "md5前16位"
|
||||
},
|
||||
{
|
||||
placeholder: "{d}",
|
||||
description: "日期(01-31)",
|
||||
placeholderB: "{localFolder:<number>}",
|
||||
descriptionB: "本地文件夹层级"
|
||||
},
|
||||
{
|
||||
placeholder: "{h}",
|
||||
description: "小时(00-23)",
|
||||
placeholderB: "{uuid}",
|
||||
descriptionB: "uuid字符串"
|
||||
},
|
||||
{
|
||||
placeholder: "{i}",
|
||||
description: "分钟(00-59)",
|
||||
placeholderB: "{filename}",
|
||||
descriptionB: "原文件名"
|
||||
},
|
||||
{
|
||||
placeholder: "{s}",
|
||||
description: "秒(00-59)",
|
||||
placeholderB: "{str-number}",
|
||||
descriptionB: "number位随机字符串"
|
||||
},
|
||||
{
|
||||
placeholder: "{ms}",
|
||||
description: "毫秒(000-999)"
|
||||
}
|
||||
];
|
||||
export {
|
||||
customStrMatch as a,
|
||||
formatFileName as b,
|
||||
customRenameFormatTable as c,
|
||||
formatLink as d,
|
||||
customStrReplace as e,
|
||||
formatFileSize as f,
|
||||
getFileIconPath as g,
|
||||
formObjToTableData as h,
|
||||
isValidUrl as i,
|
||||
buildInRenameFormatTable as j,
|
||||
renameFile as r,
|
||||
svg as s,
|
||||
v4 as v
|
||||
};
|
||||
1078
dist/renderer/assets/constants-BZfYqEeL.js
vendored
16
dist/renderer/assets/dataSender-Bg45AIFL.js
vendored
@@ -1,16 +0,0 @@
|
||||
import { m as triggerRPC, j as IRPCActionType, s as sendRPC } from "./index-BqdcQlNn.js";
|
||||
function saveConfig(config, value) {
|
||||
const configObj = typeof config === "string" ? { [config]: value } : config;
|
||||
sendRPC(IRPCActionType.MANAGE_SAVE_CONFIG, configObj);
|
||||
}
|
||||
async function getConfig(key) {
|
||||
return await triggerRPC(IRPCActionType.MANAGE_GET_CONFIG, key);
|
||||
}
|
||||
function removeConfig(key, propName) {
|
||||
sendRPC(IRPCActionType.MANAGE_REMOVE_CONFIG, key, propName);
|
||||
}
|
||||
export {
|
||||
getConfig as g,
|
||||
removeConfig as r,
|
||||
saveConfig as s
|
||||
};
|
||||
480
dist/renderer/assets/index-1NKI9aE3.js
vendored
@@ -1,480 +0,0 @@
|
||||
import { d as defineComponent, r as ref, a as reactive, D as watch, b0 as toRefs, c as createElementBlock, e as openBlock, n as normalizeClass, q as createVNode, y as resolveComponent, v as withCtx, b1 as renderSlot, u as unref, T, F as Fragment, h as renderList, N as createBlock, g as createCommentVNode, B as createTextVNode, t as toDisplayString, a8 as info_filled_default, f as createBaseVNode, al as useRoute, b2 as cloneDeep, b3 as union, k as getConfig, o as onBeforeMount, m as triggerRPC, j as IRPCActionType, a7 as link_default, aK as ElDropdown, Q as useRouter, b4 as dayjs, p as configPaths, ad as II18nLanguage, s as sendRPC, J as ElMessage } from "./index-BqdcQlNn.js";
|
||||
import { d } from "./marked.esm-D58Rgktj.js";
|
||||
import { p as picBedManualUrlList } from "./static-DltyNkMh.js";
|
||||
const _hoisted_1$1 = ["innerHTML"];
|
||||
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
||||
__name: "ConfigForm",
|
||||
props: {
|
||||
config: {},
|
||||
type: {},
|
||||
id: {},
|
||||
colorMode: {}
|
||||
},
|
||||
setup(__props, { expose: __expose }) {
|
||||
const props = __props;
|
||||
const $route = useRoute();
|
||||
const $form = ref();
|
||||
const configList = ref([]);
|
||||
const ruleForm = reactive({});
|
||||
watch(
|
||||
toRefs(props.config),
|
||||
(val) => {
|
||||
handleConfigChange(val);
|
||||
},
|
||||
{
|
||||
deep: true,
|
||||
immediate: true
|
||||
}
|
||||
);
|
||||
function handleConfigChange(val) {
|
||||
handleConfig(val);
|
||||
}
|
||||
async function validate() {
|
||||
return new Promise((resolve) => {
|
||||
$form.value?.validate((valid) => {
|
||||
if (valid) {
|
||||
resolve(ruleForm);
|
||||
} else {
|
||||
resolve(false);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
function transformMarkdownToHTML(markdown) {
|
||||
try {
|
||||
return d.parse(markdown);
|
||||
} catch (e) {
|
||||
return markdown;
|
||||
}
|
||||
}
|
||||
function getConfigType() {
|
||||
switch (props.type) {
|
||||
case "plugin": {
|
||||
return props.id;
|
||||
}
|
||||
case "uploader": {
|
||||
return `picBed.${props.id}`;
|
||||
}
|
||||
case "transformer": {
|
||||
return `transformer.${props.id}`;
|
||||
}
|
||||
default:
|
||||
return "unknown";
|
||||
}
|
||||
}
|
||||
async function handleConfig(val) {
|
||||
const config = await getCurConfigFormData();
|
||||
const configId = $route.params.configId;
|
||||
Object.assign(ruleForm, config);
|
||||
if (val.length > 0) {
|
||||
configList.value = cloneDeep(val).map((item) => {
|
||||
if (!configId) return item;
|
||||
let defaultValue = item.default !== void 0 ? item.default : item.type === "checkbox" ? [] : null;
|
||||
if (item.type === "checkbox") {
|
||||
const defaults = item.choices?.filter((i) => {
|
||||
return i.checked;
|
||||
}).map((i) => i.value) || [];
|
||||
defaultValue = union(defaultValue, defaults);
|
||||
}
|
||||
if (config && config[item.name] !== void 0) {
|
||||
defaultValue = config[item.name];
|
||||
}
|
||||
ruleForm[item.name] = defaultValue;
|
||||
return item;
|
||||
});
|
||||
}
|
||||
}
|
||||
async function getCurConfigFormData() {
|
||||
const configId = $route.params.configId;
|
||||
const curTypeConfigList = await getConfig(`uploader.${props.id}.configList`) || [];
|
||||
return curTypeConfigList.find((i) => i._id === configId) || {};
|
||||
}
|
||||
function updateRuleForm(key, value) {
|
||||
try {
|
||||
ruleForm[key] = value;
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
__expose({
|
||||
updateRuleForm,
|
||||
validate,
|
||||
getConfigType
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_input = resolveComponent("el-input");
|
||||
const _component_el_form_item = resolveComponent("el-form-item");
|
||||
const _component_el_icon = resolveComponent("el-icon");
|
||||
const _component_el_tooltip = resolveComponent("el-tooltip");
|
||||
const _component_el_row = resolveComponent("el-row");
|
||||
const _component_el_option = resolveComponent("el-option");
|
||||
const _component_el_select = resolveComponent("el-select");
|
||||
const _component_el_switch = resolveComponent("el-switch");
|
||||
const _component_el_form = resolveComponent("el-form");
|
||||
return openBlock(), createElementBlock("div", {
|
||||
id: "config-form",
|
||||
class: normalizeClass(props.colorMode === "white" ? "white" : "")
|
||||
}, [
|
||||
createVNode(_component_el_form, {
|
||||
ref_key: "$form",
|
||||
ref: $form,
|
||||
"label-position": "left",
|
||||
"label-width": "50%",
|
||||
model: ruleForm,
|
||||
size: "small"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_form_item, {
|
||||
label: unref(T)("UPLOADER_CONFIG_NAME"),
|
||||
required: "",
|
||||
prop: "_configName"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_input, {
|
||||
modelValue: ruleForm._configName,
|
||||
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => ruleForm._configName = $event),
|
||||
type: "input",
|
||||
placeholder: unref(T)("UPLOADER_CONFIG_PLACEHOLDER")
|
||||
}, null, 8, ["modelValue", "placeholder"])
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["label"]),
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(configList.value, (item, index) => {
|
||||
return openBlock(), createBlock(_component_el_form_item, {
|
||||
key: item.name + index,
|
||||
required: item.required,
|
||||
prop: item.name
|
||||
}, {
|
||||
label: withCtx(() => [
|
||||
createVNode(_component_el_row, { align: "middle" }, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(item.alias || item.name) + " ", 1),
|
||||
item.tips ? (openBlock(), createBlock(_component_el_tooltip, {
|
||||
key: 0,
|
||||
class: "item",
|
||||
effect: "dark",
|
||||
placement: "right",
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
content: withCtx(() => [
|
||||
createBaseVNode("span", {
|
||||
class: "config-form-common-tips",
|
||||
innerHTML: transformMarkdownToHTML(item.tips)
|
||||
}, null, 8, _hoisted_1$1)
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_icon, { class: "ml-[4px] cursor-pointer hover:text-blue" }, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(info_filled_default))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 2
|
||||
}, 1024)) : createCommentVNode("", true)
|
||||
]),
|
||||
_: 2
|
||||
}, 1024)
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
item.type === "input" || item.type === "password" ? (openBlock(), createBlock(_component_el_input, {
|
||||
key: 0,
|
||||
modelValue: ruleForm[item.name],
|
||||
"onUpdate:modelValue": ($event) => ruleForm[item.name] = $event,
|
||||
type: "input",
|
||||
placeholder: item.message || item.name
|
||||
}, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])) : item.type === "list" && item.choices ? (openBlock(), createBlock(_component_el_select, {
|
||||
key: 1,
|
||||
modelValue: ruleForm[item.name],
|
||||
"onUpdate:modelValue": ($event) => ruleForm[item.name] = $event,
|
||||
placeholder: item.message || item.name,
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(item.choices, (choice) => {
|
||||
return openBlock(), createBlock(_component_el_option, {
|
||||
key: choice.name || choice.value || choice,
|
||||
label: choice.name || choice.value || choice,
|
||||
value: choice.value || choice
|
||||
}, null, 8, ["label", "value"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["modelValue", "onUpdate:modelValue", "placeholder"])) : item.type === "checkbox" && item.choices ? (openBlock(), createBlock(_component_el_select, {
|
||||
key: 2,
|
||||
modelValue: ruleForm[item.name],
|
||||
"onUpdate:modelValue": ($event) => ruleForm[item.name] = $event,
|
||||
placeholder: item.message || item.name,
|
||||
multiple: "",
|
||||
"collapse-tags": "",
|
||||
persistent: false,
|
||||
teleported: ""
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(item.choices, (choice) => {
|
||||
return openBlock(), createBlock(_component_el_option, {
|
||||
key: choice.value || choice,
|
||||
label: choice.name || choice.value || choice,
|
||||
value: choice.value || choice
|
||||
}, null, 8, ["label", "value"]);
|
||||
}), 128))
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["modelValue", "onUpdate:modelValue", "placeholder"])) : item.type === "confirm" ? (openBlock(), createBlock(_component_el_switch, {
|
||||
key: 3,
|
||||
modelValue: ruleForm[item.name],
|
||||
"onUpdate:modelValue": ($event) => ruleForm[item.name] = $event,
|
||||
"active-text": item.confirmText || "yes",
|
||||
"inactive-text": item.cancelText || "no"
|
||||
}, null, 8, ["modelValue", "onUpdate:modelValue", "active-text", "inactive-text"])) : createCommentVNode("", true)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["required", "prop"]);
|
||||
}), 128)),
|
||||
renderSlot(_ctx.$slots, "default")
|
||||
]),
|
||||
_: 3
|
||||
}, 8, ["model"])
|
||||
], 2);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _hoisted_1 = { id: "picbeds-page" };
|
||||
const _hoisted_2 = { class: "view-title" };
|
||||
const _hoisted_3 = {
|
||||
key: 1,
|
||||
class: "single"
|
||||
};
|
||||
const _hoisted_4 = { class: "notice" };
|
||||
const __default__ = {
|
||||
name: "PicbedsPage"
|
||||
};
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
...__default__,
|
||||
setup(__props) {
|
||||
const type = ref("");
|
||||
const config = ref([]);
|
||||
const picBedConfigList = ref([]);
|
||||
const picBedName = ref("");
|
||||
const $route = useRoute();
|
||||
const $router = useRouter();
|
||||
const $configForm = ref(null);
|
||||
const $dropdown = ref(null);
|
||||
type.value = $route.params.type;
|
||||
onBeforeMount(async () => {
|
||||
await getPicBeds();
|
||||
await getPicBedConfigList();
|
||||
});
|
||||
const handleConfirm = async () => {
|
||||
const result = await $configForm.value?.validate() || false;
|
||||
if (result !== false) {
|
||||
await triggerRPC(IRPCActionType.UPLOADER_UPDATE_CONFIG, type.value, result?._id, result);
|
||||
const successNotification = new Notification(T("SETTINGS_RESULT"), {
|
||||
body: T("TIPS_SET_SUCCEED")
|
||||
});
|
||||
successNotification.onclick = () => {
|
||||
return true;
|
||||
};
|
||||
$router.back();
|
||||
}
|
||||
};
|
||||
function handleMouseEnter() {
|
||||
$dropdown.value?.handleOpen();
|
||||
}
|
||||
function handleMouseLeave() {
|
||||
$dropdown.value?.handleClose();
|
||||
}
|
||||
async function getPicBeds() {
|
||||
const result = await triggerRPC(IRPCActionType.PICBED_GET_PICBED_CONFIG, $route.params.type);
|
||||
config.value = result.config;
|
||||
picBedName.value = result.name;
|
||||
}
|
||||
async function getPicBedConfigList() {
|
||||
const res = await triggerRPC(IRPCActionType.PICBED_GET_CONFIG_LIST, type.value) || void 0;
|
||||
const configList = res?.configList || [];
|
||||
picBedConfigList.value = configList.filter((item) => item._id !== $route.params.configId);
|
||||
}
|
||||
async function handleConfigImport(configItem) {
|
||||
const { _id, _configName, _updatedAt, _createdAt, ...rest } = configItem;
|
||||
for (const key in rest) {
|
||||
if (Object.prototype.hasOwnProperty.call(rest, key)) {
|
||||
const value = rest[key];
|
||||
$configForm.value?.updateRuleForm(key, value);
|
||||
}
|
||||
}
|
||||
$configForm.value?.updateRuleForm("_configName", dayjs().format("YYYYMMDDHHmmss"));
|
||||
}
|
||||
const handleReset = async () => {
|
||||
await triggerRPC(IRPCActionType.UPLOADER_RESET_CONFIG, type.value, $route.params.configId);
|
||||
const successNotification = new Notification(T("SETTINGS_RESULT"), {
|
||||
body: T("TIPS_RESET_SUCCEED")
|
||||
});
|
||||
successNotification.onclick = () => {
|
||||
return true;
|
||||
};
|
||||
$router.back();
|
||||
};
|
||||
async function handleNameClick() {
|
||||
const lang = await getConfig(configPaths.settings.language) || II18nLanguage.ZH_CN;
|
||||
const url = picBedManualUrlList[lang === II18nLanguage.EN ? "en" : "zh_cn"][$route.params.type];
|
||||
if (url) {
|
||||
sendRPC(IRPCActionType.OPEN_URL, url);
|
||||
}
|
||||
}
|
||||
async function handleCopyApi() {
|
||||
try {
|
||||
const { port = 36677, host = "127.0.0.1" } = await getConfig(configPaths.settings.server) || {};
|
||||
const serverKey = await getConfig(configPaths.settings.serverKey) || "";
|
||||
const uploader = await getConfig(configPaths.uploader) || {};
|
||||
const picBedConfigList2 = uploader[$route.params.type].configList || [];
|
||||
const picBedConfig = picBedConfigList2.find((item) => item._id === $route.params.configId);
|
||||
if (!picBedConfig) {
|
||||
ElMessage.error("No config found");
|
||||
return;
|
||||
}
|
||||
const apiUrl = `http://${host === "0.0.0.0" ? "127.0.0.1" : host}:${port}/upload?picbed=${$route.params.type}&configName=${picBedConfig._configName}${serverKey ? `&key=${serverKey}` : ""}`;
|
||||
window.electron.clipboard.writeText(apiUrl);
|
||||
ElMessage.success(`${T("MANAGE_BUCKET_COPY_SUCCESS")} ${apiUrl}`);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
ElMessage.error("Copy failed");
|
||||
}
|
||||
}
|
||||
return (_ctx, _cache) => {
|
||||
const _component_el_icon = resolveComponent("el-icon");
|
||||
const _component_el_button = resolveComponent("el-button");
|
||||
const _component_el_dropdown_item = resolveComponent("el-dropdown-item");
|
||||
const _component_el_button_group = resolveComponent("el-button-group");
|
||||
const _component_el_form_item = resolveComponent("el-form-item");
|
||||
const _component_el_col = resolveComponent("el-col");
|
||||
const _component_el_row = resolveComponent("el-row");
|
||||
return openBlock(), createElementBlock("div", _hoisted_1, [
|
||||
createVNode(_component_el_row, {
|
||||
gutter: 20,
|
||||
class: "setting-list"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_col, {
|
||||
span: 22,
|
||||
offset: 1
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createBaseVNode("div", _hoisted_2, [
|
||||
createBaseVNode("span", {
|
||||
class: "view-title-text",
|
||||
onClick: handleNameClick
|
||||
}, toDisplayString(picBedName.value) + " " + toDisplayString(unref(T)("SETTINGS")), 1),
|
||||
createVNode(_component_el_icon, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(link_default))
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_button, {
|
||||
type: "primary",
|
||||
round: "",
|
||||
size: "small",
|
||||
style: { "margin-left": "6px" },
|
||||
onClick: handleCopyApi
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("UPLOAD_PAGE_COPY_UPLOAD_API")), 1)
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
config.value.length > 0 ? (openBlock(), createBlock(_sfc_main$1, {
|
||||
key: 0,
|
||||
id: type.value,
|
||||
ref_key: "$configForm",
|
||||
ref: $configForm,
|
||||
config: config.value,
|
||||
type: "uploader"
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_form_item, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_button_group, null, {
|
||||
default: withCtx(() => [
|
||||
createVNode(_component_el_button, {
|
||||
type: "info",
|
||||
round: "",
|
||||
onClick: handleReset
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("RESET_PICBED_CONFIG")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_button, {
|
||||
type: "success",
|
||||
round: "",
|
||||
onClick: handleConfirm
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("CONFIRM")), 1)
|
||||
]),
|
||||
_: 1
|
||||
}),
|
||||
createVNode(_component_el_button, {
|
||||
round: "",
|
||||
type: "warning",
|
||||
onMouseenter: handleMouseEnter,
|
||||
onMouseleave: handleMouseLeave
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createVNode(unref(ElDropdown), {
|
||||
ref_key: "$dropdown",
|
||||
ref: $dropdown,
|
||||
placement: "top",
|
||||
style: { "color": "#fff", "font-size": "12px", "width": "100%" },
|
||||
disabled: picBedConfigList.value.length === 0,
|
||||
teleported: ""
|
||||
}, {
|
||||
dropdown: withCtx(() => [
|
||||
(openBlock(true), createElementBlock(Fragment, null, renderList(picBedConfigList.value, (i) => {
|
||||
return openBlock(), createBlock(_component_el_dropdown_item, {
|
||||
key: i._id,
|
||||
onClick: ($event) => handleConfigImport(i)
|
||||
}, {
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(i._configName), 1)
|
||||
]),
|
||||
_: 2
|
||||
}, 1032, ["onClick"]);
|
||||
}), 128))
|
||||
]),
|
||||
default: withCtx(() => [
|
||||
createTextVNode(toDisplayString(unref(T)("MANAGE_LOGIN_PAGE_PANE_IMPORT")) + " ", 1)
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["disabled"])
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
}, 8, ["id", "config"])) : (openBlock(), createElementBlock("div", _hoisted_3, [
|
||||
createBaseVNode("div", _hoisted_4, toDisplayString(unref(T)("SETTINGS_NOT_CONFIG_OPTIONS")), 1)
|
||||
]))
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]),
|
||||
_: 1
|
||||
})
|
||||
]);
|
||||
};
|
||||
}
|
||||
});
|
||||
export {
|
||||
_sfc_main as default
|
||||
};
|
||||
83
dist/renderer/assets/index-BLrsZxcw.css
vendored
@@ -1,83 +0,0 @@
|
||||
.config-form-common-tips a {
|
||||
color: #409eff;
|
||||
text-decoration: none;
|
||||
}
|
||||
#config-form .el-form label {
|
||||
line-height: 22px;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
#config-form .el-form-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
border-bottom: 1px solid #777;
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
#config-form .el-form-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
#config-form .el-form-item__content {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
#config-form .el-form .el-button-group {
|
||||
width: 100%;
|
||||
}
|
||||
#config-form .el-form .el-button-group .el-button {
|
||||
width: 50%;
|
||||
}
|
||||
#config-form .el-form .el-radio-group {
|
||||
margin-left: 25px;
|
||||
}
|
||||
#config-form .el-form .el-switch__label.is-active {
|
||||
color: #409eff;
|
||||
}
|
||||
#config-form.white .el-form-item {
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
#picbeds-page {
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
position: absolute;
|
||||
left: 142px;
|
||||
right: 0;
|
||||
}
|
||||
#picbeds-page .setting-list {
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
#picbeds-page .view-title-text:hover {
|
||||
cursor: pointer;
|
||||
color: #409eff;
|
||||
}
|
||||
#picbeds-page .el-form label {
|
||||
line-height: 22px;
|
||||
padding-bottom: 0;
|
||||
color: #eee;
|
||||
}
|
||||
#picbeds-page .el-form-item {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
#picbeds-page .el-form .el-button-group {
|
||||
width: 100%;
|
||||
}
|
||||
#picbeds-page .el-form .el-button-group .el-button {
|
||||
width: calc(33.3333% - 10px);
|
||||
}
|
||||
#picbeds-page .el-form .el-radio-group {
|
||||
margin-left: 25px;
|
||||
}
|
||||
#picbeds-page .el-form .el-switch__label {
|
||||
color: #eee;
|
||||
}
|
||||
#picbeds-page .el-form .el-switch__label.is-active {
|
||||
color: #409eff;
|
||||
}
|
||||
#picbeds-page .notice {
|
||||
color: #eee;
|
||||
text-align: center;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
#picbeds-page .single {
|
||||
text-align: center;
|
||||
}
|
||||
133380
dist/renderer/assets/index-BqdcQlNn.js
vendored
2501
dist/renderer/assets/index-mOcaXuMe.css
vendored
80
dist/renderer/assets/manageStore-EteLCVxq.js
vendored
@@ -1,80 +0,0 @@
|
||||
import { a$ as defineStore } from "./index-BqdcQlNn.js";
|
||||
import { g as getConfig } from "./dataSender-Bg45AIFL.js";
|
||||
const useManageStore = defineStore("manageConfig", {
|
||||
state: () => {
|
||||
return {
|
||||
config: {}
|
||||
};
|
||||
},
|
||||
actions: {
|
||||
async refreshConfig() {
|
||||
this.config = await getConfig() ?? {};
|
||||
}
|
||||
},
|
||||
persist: true
|
||||
});
|
||||
const useFileTransferStore = defineStore("fileTransfer", {
|
||||
state: () => {
|
||||
return {
|
||||
fileTransferList: [],
|
||||
success: false,
|
||||
finished: false
|
||||
};
|
||||
},
|
||||
actions: {
|
||||
refreshFileTransferList(newData) {
|
||||
this.fileTransferList = newData.fullList ?? [];
|
||||
this.success = newData.success;
|
||||
this.finished = newData.finished;
|
||||
},
|
||||
resetFileTransferList() {
|
||||
this.fileTransferList = [];
|
||||
this.success = false;
|
||||
this.finished = false;
|
||||
},
|
||||
getFileTransferList() {
|
||||
return this.fileTransferList;
|
||||
},
|
||||
isFinished() {
|
||||
return this.finished;
|
||||
},
|
||||
isSuccess() {
|
||||
return this.success;
|
||||
}
|
||||
}
|
||||
});
|
||||
const useDownloadFileTransferStore = defineStore("downloadFileTransfer", {
|
||||
state: () => {
|
||||
return {
|
||||
downloadFileTransferList: [],
|
||||
success: false,
|
||||
finished: false
|
||||
};
|
||||
},
|
||||
actions: {
|
||||
refreshDownloadFileTransferList(newData) {
|
||||
this.downloadFileTransferList = newData.fullList ?? [];
|
||||
this.success = newData.success;
|
||||
this.finished = newData.finished;
|
||||
},
|
||||
resetDownloadFileTransferList() {
|
||||
this.downloadFileTransferList = [];
|
||||
this.success = false;
|
||||
this.finished = false;
|
||||
},
|
||||
getDownloadFileTransferList() {
|
||||
return this.downloadFileTransferList;
|
||||
},
|
||||
isFinished() {
|
||||
return this.finished;
|
||||
},
|
||||
isSuccess() {
|
||||
return this.success;
|
||||
}
|
||||
}
|
||||
});
|
||||
export {
|
||||
useDownloadFileTransferStore as a,
|
||||
useFileTransferStore as b,
|
||||
useManageStore as u
|
||||
};
|
||||
1064
dist/renderer/assets/marked.esm-D58Rgktj.js
vendored
74
dist/renderer/assets/static-DltyNkMh.js
vendored
@@ -1,74 +0,0 @@
|
||||
const RELEASE_URL = "https://api.github.com/repos/Kuingsmile/PicList/releases";
|
||||
const RELEASE_URL_BACKUP = "https://release.piclist.cn";
|
||||
const cancelDownloadLoadingFileList = "cancelDownloadLoadingFileList";
|
||||
const refreshDownloadFileTransferList = "refreshDownloadFileTransferList";
|
||||
const picBedsCanbeDeleted = [
|
||||
"aliyun",
|
||||
"alist",
|
||||
"alistplist",
|
||||
"aws-s3",
|
||||
"aws-s3-plist",
|
||||
"dogecloud",
|
||||
"github",
|
||||
"huaweicloud-uploader",
|
||||
"imgur",
|
||||
"local",
|
||||
"lskyplist",
|
||||
"piclist",
|
||||
"qiniu",
|
||||
"sftpplist",
|
||||
"smms",
|
||||
"tcyun",
|
||||
"upyun",
|
||||
"webdavplist"
|
||||
];
|
||||
const picBedManualUrlList = {
|
||||
zh_cn: {
|
||||
advancedpiclist: "https://piclist.cn/configure.html#%E9%AB%98%E7%BA%A7%E8%87%AA%E5%AE%9A%E4%B9%89",
|
||||
aliyun: "https://piclist.cn/configure.html#%E9%98%BF%E9%87%8C%E4%BA%91oss",
|
||||
alistplist: "https://piclist.cn/configure.html#alist",
|
||||
"aws-s3": "https://piclist.cn/configure.html#%E5%86%85%E7%BD%AEaws-s3",
|
||||
"aws-s3-plist": "https://piclist.cn/configure.html#%E5%86%85%E7%BD%AEaws-s3",
|
||||
github: "https://piclist.cn/configure.html#github%E5%9B%BE%E5%BA%8A",
|
||||
githubPlus: "https://piclist.cn/configure.html#github%E5%9B%BE%E5%BA%8A",
|
||||
imgur: "https://piclist.cn/configure.html#imgur",
|
||||
lankong: "https://github.com/hellodk34/picgo-plugin-lankong",
|
||||
local: "https://piclist.cn/configure.html#%E6%9C%AC%E5%9C%B0%E5%9B%BE%E5%BA%8A",
|
||||
lskyplist: "https://piclist.cn/configure.html#%E5%85%B0%E7%A9%BA%E5%9B%BE%E5%BA%8A",
|
||||
tcyun: "https://piclist.cn/configure.html#%E8%85%BE%E8%AE%AF%E4%BA%91cos",
|
||||
piclist: "https://piclist.cn/configure.html#piclist",
|
||||
qiniu: "https://piclist.cn/configure.html#%E4%B8%83%E7%89%9B%E4%BA%91",
|
||||
sftpplist: "https://piclist.cn/configure.html#%E5%86%85%E7%BD%AEsftp",
|
||||
smms: "https://piclist.cn/configure.html#sm-ms",
|
||||
upyun: "https://piclist.cn/configure.html#%E5%8F%88%E6%8B%8D%E4%BA%91",
|
||||
webdavplist: "https://piclist.cn/configure.html#webdav"
|
||||
},
|
||||
en: {
|
||||
advancedpiclist: "https://piclist.cn/en/configure.html#advanced",
|
||||
aliyun: "https://piclist.cn/en/configure.html#alibaba-cloud",
|
||||
alistplist: "https://piclist.cn/en/configure.html#alist",
|
||||
"aws-s3": "https://piclist.cn/en/configure.html#built-in-aws-s3",
|
||||
"aws-s3-plist": "https://piclist.cn/en/configure.html#built-in-aws-s3",
|
||||
github: "https://piclist.cn/en/configure.html#github",
|
||||
githubPlus: "https://piclist.cn/en/configure.html#github",
|
||||
imgur: "https://piclist.cn/en/configure.html#imgur",
|
||||
lankong: "https://github.com/hellodk34/picgo-plugin-lankong",
|
||||
local: "https://piclist.cn/en/configure.html#local-image-hosting",
|
||||
lskyplist: "https://piclist.cn/en/configure.html#lsky-pro",
|
||||
tcyun: "https://piclist.cn/en/configure.html#tencent-cloud-cos",
|
||||
piclist: "https://piclist.cn/en/configure.html#piclist",
|
||||
qiniu: "https://piclist.cn/en/configure.html#qiniu-cloud",
|
||||
sftpplist: "https://piclist.cn/en/configure.html#built-in-sftp",
|
||||
smms: "https://piclist.cn/en/configure.html#sm-ms",
|
||||
upyun: "https://piclist.cn/en/configure.html#upyun",
|
||||
webdavplist: "https://piclist.cn/en/configure.html#webdav"
|
||||
}
|
||||
};
|
||||
export {
|
||||
RELEASE_URL as R,
|
||||
picBedsCanbeDeleted as a,
|
||||
RELEASE_URL_BACKUP as b,
|
||||
cancelDownloadLoadingFileList as c,
|
||||
picBedManualUrlList as p,
|
||||
refreshDownloadFileTransferList as r
|
||||
};
|
||||
23
dist/renderer/assets/useIPC-O_oSdR6Q.js
vendored
@@ -1,23 +0,0 @@
|
||||
import { bs as onUnmounted } from "./index-BqdcQlNn.js";
|
||||
const useIPCOn = (channel, listener) => {
|
||||
window.electron.electronAPI.ipcRenderer.on(channel, listener);
|
||||
onUnmounted(() => {
|
||||
window.electron.electronAPI.ipcRenderer.removeListener(channel, listener);
|
||||
});
|
||||
};
|
||||
const useIPCOnce = (channel, listener) => {
|
||||
window.electron.electronAPI.ipcRenderer.once(channel, listener);
|
||||
onUnmounted(() => {
|
||||
window.electron.electronAPI.ipcRenderer.removeListener(channel, listener);
|
||||
});
|
||||
};
|
||||
const useIPC = () => {
|
||||
return {
|
||||
on: (channel, listener) => useIPCOn(channel, listener),
|
||||
once: (channel, listener) => useIPCOnce(channel, listener)
|
||||
};
|
||||
};
|
||||
export {
|
||||
useIPC as a,
|
||||
useIPCOn as u
|
||||
};
|
||||
BIN
dist/renderer/favicon.ico
vendored
|
Before Width: | Height: | Size: 4.2 KiB |
935
dist/renderer/i18n/en.yml
vendored
@@ -1,935 +0,0 @@
|
||||
LANG_DISPLAY_LABEL: 'English'
|
||||
ABOUT: About
|
||||
OPEN_MAIN_WINDOW: Open Main Window
|
||||
OPEN_MINI_WINDOW: Open Mini Window
|
||||
HIDE_MINI_WINDOW: Hide Mini Window
|
||||
CHOOSE_DEFAULT_PICBED: Choose Default Picbed
|
||||
RELOAD_APP: Reload App
|
||||
UPLOAD_FAILED: Upload Failed
|
||||
UPLOAD_SUCCEED: Upload Succeed
|
||||
UPLOAD_PROGRESS: Upload Progress
|
||||
OPERATION_SUCCEED: Operation Succeed
|
||||
OPERATION_FAILED: Operation Failed
|
||||
UPLOADING: Uploading
|
||||
QUICK_UPLOAD: Quick Upload
|
||||
UPLOAD_BY_CLIPBOARD: Upload by Clipboard
|
||||
SHOW_PICBED_QRCODE: Show Picbed Qrcode
|
||||
PICBED_QRCODE: Picbed Qrcode
|
||||
ENABLE: Enable
|
||||
DISABLE: Disable
|
||||
CONFIG_THING: Config ${c}
|
||||
FIND_NEW_VERSION: Find New Version
|
||||
NO_MORE_NOTICE: No More Notice
|
||||
SHOW_DEVTOOLS: Show Devtools
|
||||
FEEDBACK: Feedback
|
||||
CURRENT_PICBED: Current Picbed
|
||||
CURRENT_SECOND_PICBED: Current Second Picbed
|
||||
START_WATCH_CLIPBOARD: Start Watch Clipboard
|
||||
STOP_WATCH_CLIPBOARD: Stop Watch Clipboard
|
||||
OPEN_TOOLBOX: Open Toolbox
|
||||
TOOLBOX: Toolbox
|
||||
TOOLBOX_TITLE: Troubleshoot PicList runtime issues
|
||||
TOOLBOX_SUB_TITLE: Scan the following items immediately to fix usage issues
|
||||
TOOLBOX_CHECK_CONFIG_FILE_BROKEN: Check if the configuration file is damaged
|
||||
TOOLBOX_CHECK_GALLERY_FILE_BROKEN: Check if the album file is damaged
|
||||
TOOLBOX_CHECK_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD: Check if there is a problem with clipboard picture upload
|
||||
TOOLBOX_CHECK_PROBLEM_WITH_PROXY: Check if the proxy settings are normal
|
||||
TOOLBOX_FIX_DONE_NEED_RELOAD: Repair completed, need to restart to take effect, restart or not
|
||||
TOOLBOX_CANT_AUTO_FIX: Unable to automatically repair, please repair the following problems yourself
|
||||
TOOLBOX_START_SCAN: Start scanning
|
||||
TOOLBOX_RE_SCAN: Re scanning
|
||||
TOOLBOX_START_FIX: Start fixing
|
||||
TOOLBOX_SUCCESS_TIPS: Congratulations, no problems were found
|
||||
TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS: 'The configuration file path is: ${path}'
|
||||
TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS: The configuration file is damaged
|
||||
TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS: 'The album file path is: ${path}'
|
||||
TOOLBOX_CHECK_GALLERY_FILE_BROKEN_TIPS: The album file is damaged
|
||||
TOOLBOX_CHECK_PROXY_SUCCESS_TIPS: Proxy settings normal
|
||||
TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS: No proxy settings
|
||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_CORRECT: Proxy settings incorrect
|
||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_WORKING: Proxy settings unavailable
|
||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_TIPS: 'The temporary folder path for clipboard pictures is: ${path}'
|
||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS: 'The temporary folder for clipboard pictures does not exist: ${path}'
|
||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_ERROR_TIPS: 'Please create the folder yourself: ${path}'
|
||||
MANUAL_PAGE_OPEN_TIP: Please select the way to open the manual
|
||||
MANUAL_PAGE_OPEN_TIP_TITLE: Tips
|
||||
MANUAL_PAGE_OPEN_BY_BROWSER: Browser
|
||||
MANUAL_PAGE_OPEN_BY_BUILD_IN: Built-in Window
|
||||
MANUAL_PAGE_OPEN_SETTING_TIP: Select the way to open the manual
|
||||
UPLOAD_AREA: Upload
|
||||
UPLOAD_VIEW_HINT: Click to open picbeds settings
|
||||
MANAGE_PAGE: Manage
|
||||
GALLERY: Gallery
|
||||
REFRESH: Refresh
|
||||
MANUAL: Manual
|
||||
PICBEDS_SETTINGS: Picbeds
|
||||
PICLIST_SETTINGS: Settings
|
||||
PLUGIN_SETTINGS: Plugins
|
||||
CHOOSE_PICBED: Choose Picbed
|
||||
COPY_PICBED_CONFIG: Copy Picbed Config
|
||||
COPY_PICBED_CONFIG_SUCCEED: Copy Picbed Config Succeed
|
||||
INPUT: Input
|
||||
CANCEL: Cancel
|
||||
CONFIRM: Confirm
|
||||
RESET_PICBED_CONFIG: Reset
|
||||
CHOOSE_SHOWED_PICBED: Choose Showed Picbed
|
||||
CHOOSE_PASTE_FORMAT: Choose Paste Format
|
||||
COPY: Copy
|
||||
DELETE: Delete
|
||||
SELECT_ALL: Select All
|
||||
CHANGE_IMAGE_URL: Change Image URL
|
||||
CHANGE_IMAGE_URL_SUCCEED: Change Image URL Succeed
|
||||
COPY_LINK_SUCCEED: Copy Link Succeed
|
||||
BATCH_COPY_LINK_SUCCEED: Batch Copy Link Succeed
|
||||
FILE_RENAME: File Rename
|
||||
OPEN_FILE_PATH: Open file path
|
||||
GALLERY_SYNC_DELETE: Cloud Sync Delete
|
||||
GALLERY_SYNC_DELETE_NOTICE_TITLE: Notice
|
||||
GALLERY_SYNC_DELETE_NOTICE_SUCCEED: Cloud Delete Succeed
|
||||
GALLERY_SYNC_DELETE_NOTICE_FAILED: Cloud Delete Failed
|
||||
GALLERY_CHANGE_URL: Rename
|
||||
GALLERY_SEARCH_FILENAME: Search by Filename
|
||||
GALLERY_SEARCH_URL: Search by URL
|
||||
GALLERY_MATCHED: ' Matched: '
|
||||
UPLOAD_PAGE_COPY_UPLOAD_API: Copy Upload API
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_NAME: Image Processing
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE: Image Processing Settings
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST: Skip Process Ext List
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS: Enter the file extensions to skip processing, separated by commas (e.g., jpg,png,gif)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM: Add Watermark
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE: Watermark Type
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT: Text
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE: Image
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM: Full-Screen Watermark
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE: Watermark Angle
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT: Watermark Text
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH: Watermark Font Path (download font file for the first time)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO: Watermark Size Ratio
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR: Watermark Color, Please select from the color picker
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMPATH: Watermark Image Path (leave blank to use default image)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION: Watermark Position
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF: Remove EXIF Info
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_QUALITY: Compression Quality(1-100)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT: Convert Format
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT: Destination Format
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC: 'Specific Format, Please enter in json format, e.g. {"png": "jpg"}'
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP: Whether to flip vertically
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP: Whether to flip horizontally
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE: Resize to fixed size
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH: Width(Set to 0 to scale by height)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT: Height(Set to 0 to scale by width)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT: Skip resize when image height is smaller than target height
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH: Skip resize when image width is smaller than target width
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT: Resize by percentage (Higher priority)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT: Resize Percentage, enter 50 for 50%
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE: Rotate
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE: Rotation Angle
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM: Save
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_CANCEL: Cancel
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP: top
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM: bottom
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT: left
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT: right
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT: top left
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT: top right
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT: bottom left
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT: bottom right
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER: center
|
||||
UPLOAD_SHORT_URL: Short
|
||||
UPLOAD_NORMAL_URL: Long
|
||||
SETTINGS: Settings
|
||||
SETTINGS_OPEN_CONFIG_FILE: Open Config File
|
||||
SETTINGS_MIGRATE_FROM_PICGO: Migrate from PicGo
|
||||
SETTINGS_MIGRATE_FROM_PICGO_TITLE: Notice
|
||||
SETTINGS_MIGRATE_FROM_PICGO_CONTENT: Migrate from PicGo will overwrite your current settings and gallery, do you want to continue?
|
||||
SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: Import succeed, please restart PicList
|
||||
SETTINGS_MIGRATE_FROM_PICGO_FAILED: Import failed
|
||||
SETTINGS_START_MODE: Default Start Mode
|
||||
SETTINGS_START_MODE_MINI: Mini Window
|
||||
SETTINGS_START_MODE_MAIN: Main Window
|
||||
SETTINGS_START_MODE_NO_TRAY: No Tray
|
||||
SETTINGS_START_MODE_QUIET: Quiet Mode
|
||||
SETTINGS_CLICK_TO_OPEN: Click to Open
|
||||
SETTINGS_SET_LOG_FILE: Set Log File
|
||||
SETTINGS_CLICK_TO_SET: Click to Set
|
||||
SETTINGS_CLICK_TO_CHECK: Click to Check
|
||||
SETTINGS_SET_SHORTCUT: Set Shortcut
|
||||
SETTINGS_CUSTOM_LINK_FORMAT: Custom Link Format
|
||||
SETTINGS_SET_PROXY_AND_MIRROR: Set Proxy and Mirror
|
||||
SETTINGS_SET_SERVER: Set Server
|
||||
SETTINGS_CHECK_UPDATE: Check Update
|
||||
SETTINGS_OPEN_UPDATE_HELPER: Open Update Helper
|
||||
SETTINGS_OPEN: Open
|
||||
SETTINGS_CLOSE: Close
|
||||
SETTINGS_CLOSE_MINI_WINDOW_SYNC: Close Mini Window When open Main Window
|
||||
SETTINGS_CLOSE_MAIN_WINDOW_SYNC: Close Main Window When open Mini Window
|
||||
SETTINGS_LAUNCH_ON_BOOT: Launch On Boot
|
||||
SETTINGS_RENAME_BEFORE_UPLOAD: Manual Rename
|
||||
SETTINGS_TIMESTAMP_RENAME: Timestamp Rename
|
||||
SETTINGS_ADVANCED_RENAME: Advanced Rename
|
||||
SETTINGS_ADVANCED_RENAME_ENABLE: Enable Advanced Rename
|
||||
SETTINGS_ADVANCED_RENAME_FORMAT: Advanced Rename Format
|
||||
SETTINGS_ENABLE_SECOND_PICBED: Enable Second Picbed
|
||||
SETTINGS_SET_SECOND_PICBED: Set Second Picbed
|
||||
SETTINGS_OPEN_UPLOAD_TIPS: Open Upload Tips
|
||||
SETTINGS_OPEN_UPLOAD_RESULT_TIPS: Open Upload Result Tips
|
||||
SETTINGS_MINI_WINDOW_ON_TOP: Mini Window On Top
|
||||
SETTINGS_AUTO_COPY_URL_AFTER_UPLOAD: Auto Copy URL After Upload
|
||||
SETTINGS_TIPS_PLACEHOLDER_URL: Use $url to represent url position
|
||||
SETTINGS_TIPS_PLACEHOLDER_FILENAME: Use $fileName to represent file name position
|
||||
SETTINGS_TIPS_PLACEHOLDER_EXTNAME: Use $extName to represent file's ext position
|
||||
SETTINGS_TIPS_SUCH_AS: 'Such as: $url/$fileName'
|
||||
SETTINGS_UPLOAD_PROXY: Upload Proxy
|
||||
SETTINGS_PLUGIN_INSTALL_PROXY: Proxy for Plugin Install
|
||||
SETTINGS_PLUGIN_INSTALL_MIRROR: Mirror for Plugin Install
|
||||
SETTINGS_CURRENT_VERSION: Current Version
|
||||
SETTINGS_NEWEST_VERSION: Newest Version
|
||||
SETTINGS_GETING: Getting...
|
||||
SETTINGS_TIPS_HAS_NEW_VERSION: PicList has a new version, please click confirm to restart
|
||||
SETTINGS_LOG_FILE_PATH: Log File Path
|
||||
SETTINGS_CONFIG_FILE_PATH: Config File Path
|
||||
SETTINGS_LOG_FILE: Log File
|
||||
SETTINGS_GUI_LOG_FILE: GUI Log File
|
||||
SETTINGS_MANAGE_LOG_FILE: Manage Log File
|
||||
SETTINGS_LOG_LEVEL: Log Level
|
||||
SETTINGS_LOG_FILE_SIZE: Log File Size
|
||||
SETTINGS_SET_PICGO_SERVER: Set PicGo Server
|
||||
SETTINGS_TIPS_SERVER_NOTICE: If you don't know what is the server's function, please read the document, or don't modify the configuration.
|
||||
SETTINGS_ENABLE_SERVER: Enable Server
|
||||
SETTINGS_SET_SERVER_HOST: Set Server Host
|
||||
SETTINGS_SET_SERVER_PORT: Set Server Port
|
||||
SETTINGS_SET_SERVER_KEY: Set Auth Key
|
||||
SETTINGS_SET_WEB_SERVER: Set Web Server
|
||||
SETTINGS_TIPS_WEB_SERVER_NOTICE: If you don't know what is the web server's function, please read the document, or don't modify the configuration.
|
||||
SETTINGS_SET_ENABLE_WEB_SERVER: Enable Web Server
|
||||
SETTINGS_SET_WEB_SERVER_HOST: Set Web Server Host
|
||||
SETTINGS_SET_WEB_SERVER_PORT: Set Web Server Port
|
||||
SETTINGS_SET_WEB_SERVER_PATH: Set Web Server Path
|
||||
SETTINGS_TIP_PLACEHOLDER_WEB_HOST: Default:127.0.0.1
|
||||
SETTINGS_TIP_PLACEHOLDER_WEB_PORT: Default:37777
|
||||
SETTINGS_TIP_PLACEHOLDER_HOST: Default:127.0.0.1
|
||||
SETTINGS_TIP_PLACEHOLDER_PORT: Default:36677
|
||||
SETTINGS_TIP_PLACEHOLDER_KEY: This key is used to avoid malicious requests, through urlParams '?key=xxx' to pass
|
||||
SETTINGS_SET_SERVER_AES_KEY: Set AES Key for server response
|
||||
SETTINGS_LOG_LEVEL_ALL: All
|
||||
SETTINGS_LOG_LEVEL_SUCCESS: Success
|
||||
SETTINGS_LOG_LEVEL_ERROR: Error
|
||||
SETTINGS_LOG_LEVEL_INFO: Info
|
||||
SETTINGS_LOG_LEVEL_WARN: Warn
|
||||
SETTINGS_LOG_LEVEL_NONE: None
|
||||
SETTINGS_RESULT: Result
|
||||
SETTINGS_DEFAULT_PICBED: Default Picbed
|
||||
SETTINGS_SET_DEFAULT_PICBED: Set Default Picbed
|
||||
SETTINGS_NOT_CONFIG_OPTIONS: Not Config Options
|
||||
SETTINGS_USE_BUILTIN_CLIPBOARD_UPLOAD: Use Builtin Clipboard to Upload
|
||||
SETTINGS_CHOOSE_LANGUAGE: Choose Language
|
||||
UPLOADER_CONFIG_NAME: Configuration Name
|
||||
UPLOADER_CONFIG_PLACEHOLDER: Please Enter Configuration Name
|
||||
SELECTED_SETTING_HINT: Selected
|
||||
SETTINGS_MAIN_WINDOW_SIZE: Default Main Window Size
|
||||
SETTINGS_MAIN_WINDOW_SIZE_WIDTH: Default Main Window Width
|
||||
SETTINGS_MAIN_WINDOW_WIDTH_HINT: 'Default: 1200'
|
||||
SETTINGS_MAIN_WINDOW_SIZE_HEIGHT: Default Main Window Height
|
||||
SETTINGS_MAIN_WINDOW_HEIGHT_HINT: 'Default: 800'
|
||||
SETTINGS_RAW_PICGO_SIZE: Raw PicGo Size
|
||||
SETTINGS_CUSTOM_MINI_ICON_PATH: Custom Mini Window Icon Path
|
||||
SETTINGS_CUSTOM_MINI_ICON: Custom Mini Window Icon
|
||||
SETTINGS_COMPRESS_AND_WATERMARK: Compress and Watermark
|
||||
SETTINGS_SYNC_DELETE_CLOUD: Sync delete from cloud storage of gallery
|
||||
SETTINGS_ISHIDEDOCK: Hide Dock Icon
|
||||
SETTINGS_ISHIDEDOCK_TIPS: Not support hide dock and tray at the same time
|
||||
SETTINGS_ENCODE_OUTPUT_URL: Encode Output(or Copyed) URL
|
||||
SETTINGS_WATCH_CLIPBOARD: Watch clipboard when software start
|
||||
SETTINGS_SHORT_URL: Use short url
|
||||
SETTINGS_SHORT_URL_SERVER: Short url server
|
||||
SETTINGS_SHORT_URL_C1N_TOKEN: C1N Token
|
||||
SETTINGS_SHORT_URL_YOURLS_DOMAIN: YOURLS domain
|
||||
SETTINGS_SHORT_URL_YOURLS_SIGNATURE: YOURLS signature
|
||||
SETTINGS_SHORT_URL_CF_WORKER_HOST: Cloudflare Worker Host
|
||||
SETTINGS_SHORT_SINK_DOMAIN: sink domain
|
||||
SETTINGS_SHORT_SINK_TOKEN: sink token
|
||||
SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: Delete local file after upload
|
||||
SETTINGS_SYNC_CONFIG: Settings Sync Configuration
|
||||
SETTINGS_SYNC_CONFIG_TITLE: Sync Settings
|
||||
SETTINGS_SYNC_CONFIG_NOTE: The files to be synchronized are configuration files.
|
||||
SETTINGS_SYNC_CONFIG_SELECT_TYPE: Select sync method
|
||||
SETTINGS_SYNC_CONFIG_SELECT_FILE: Select files to sync
|
||||
SETTINGS_SYNC_CONFIG_SELECT_CONFIG: Configuration files only
|
||||
SETTINGS_SYNC_CONFIG_SELECT_GALLERY: Gallery files only
|
||||
SETTINGS_SYNC_CONFIG_SELECT_BOTH: Both configuration and gallery files
|
||||
SETTINGS_SYNC_CONFIG_GITEA_HOST: Gitea Host
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: username
|
||||
SETTINGS_SYNC_CONFIG_GITEA_USERNAME: username
|
||||
SETTINGS_SYNC_CONFIG_GITEE_USERNAME: username
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_REPO: repository (private)
|
||||
SETTINGS_SYNC_CONFIG_GITEA_REPO: repository
|
||||
SETTINGS_SYNC_CONFIG_GITEE_REPO: repository path
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: branch
|
||||
SETTINGS_SYNC_CONFIG_GITEA_BRANCH: branch
|
||||
SETTINGS_SYNC_CONFIG_GITEE_BRANCH: branch
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: Token
|
||||
SETTINGS_SYNC_CONFIG_GITEA_TOKEN: Token
|
||||
SETTINGS_SYNC_CONFIG_GITEE_TOKEN: Token
|
||||
SETTINGS_SYNC_CONFIG_PROXY: Proxy
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: Please enter GitHub username
|
||||
SETTINGS_SYNC_CONFIG_GITEA_USERNAME_PLACEHOLDER: Please enter Gitea username
|
||||
SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: Please enter Gitee username
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: Please enter GitHub repository name
|
||||
SETTINGS_SYNC_CONFIG_GITEA_REPO_PLACEHOLDER: Please enter Gitea repository name
|
||||
SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: Please enter Gitee repository name
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: Please enter GitHub branch name
|
||||
SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: Please enter Gitee branch name
|
||||
SETTINGS_SYNC_CONFIG_GITEA_BRANCH_PLACEHOLDER: Please enter Gitea branch name
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: Please enter GitHub Token
|
||||
SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: Please enter Gitea Token
|
||||
SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: Please enter Gitee Token
|
||||
SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: Please enter proxy
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT: WebDAV Endpoint
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER: Please enter WebDAV endpoint URL
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME: Username
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER: Please enter WebDAV username
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD: Password
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER: Please enter WebDAV password
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE: Authentication Type
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED: Enable SSL/HTTPS
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH: Save Path
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER: Please select save path for sync files
|
||||
SETTINGS_UP_DOWN_DESC: Upload and download configuration files
|
||||
SETTINGS_SYNC_UPLOAD: Upload
|
||||
SETTINGS_SYNC_DOWNLOAD: Download
|
||||
SETTINGS_SYNC_UPLOAD_ALL: Upload all
|
||||
SETTINGS_SYNC_DOWNLOAD_ALL: Download all
|
||||
SETTINGS_SYNC_UPLOAD_SUCCESS: Successfully uploaded
|
||||
SETTINGS_SYNC_UPLOAD_FAILED: Upload failed
|
||||
SETTINGS_SYNC_DOWNLOAD_SUCCESS: Successfully downloaded
|
||||
SETTINGS_SYNC_DOWNLOAD_FAILED: Download failed
|
||||
SETTINGS_SYNC_COMMON_CONFIG: Common configuration
|
||||
SETTINGS_SYNC_MANAGE_CONFIG: Manage configuration
|
||||
SETTINGS_AUTO_IMPORT: Auto import config in manage page
|
||||
SETTINGS_AUTO_IMPORT_SELECT_PICBED: Select picbed
|
||||
SETTINGS_TAB_SYSTEM: System
|
||||
SETTINGS_TAB_SYNC_CONFIG: Configuration
|
||||
SETTINGS_TAB_UPLOAD: Upload
|
||||
SETTINGS_TAB_ADVANCED: Advanced
|
||||
SETTINGS_TAB_UPDATE: Update
|
||||
BUILTIN_CLIPBOARD_TIPS: Use builtin clipboard function to upload instead of using scripts
|
||||
SHORTCUT_NAME: Shortcut Name
|
||||
SHORTCUT_BIND: Shortcut Binding
|
||||
SHORTCUT_STATUS: Status
|
||||
SHORTCUT_ENABLED: Enabled
|
||||
SHORTCUT_DISABLED: Disabled
|
||||
SHORTCUT_SOURCE: Source
|
||||
SHORTCUT_HANDLE: Handle
|
||||
SHORTCUT_ENABLE: Enable
|
||||
SHORTCUT_DISABLE: Disable
|
||||
SHORTCUT_EDIT: Edit
|
||||
SHORTCUT_CHANGE_UPLOAD: Change Upload Shortcut
|
||||
WAIT_TO_UPLOAD: Wait to Upload
|
||||
ALREADY_UPLOAD: Already Uploaded
|
||||
DRAG_FILE_TO_HERE: Drag file to here, or
|
||||
CLICK_TO_UPLOAD: click to upload
|
||||
LINK_FORMAT: Link Format
|
||||
CLIPBOARD_PICTURE: Clipboard
|
||||
TIPS_DRAG_VALID_PICTURE_OR_URL: Drag valid picture or url to here
|
||||
TIPS_INPUT_URL: Input URL
|
||||
TIPS_HTTP_PREFIX: http:// or https://
|
||||
TIPS_INPUT_VALID_URL: Input valid URL
|
||||
PLUGIN_SEARCH_PLACEHOLDER: Search picgo plugins on npm, or click the button to view the awesome plugins list
|
||||
PLUGIN_INSTALL: Install
|
||||
PLUGIN_INSTALLING: Installing...
|
||||
PLUGIN_INSTALLED: Installed
|
||||
PLUGIN_DOING_SOMETHING: Doing...
|
||||
PLUGIN_LIST: Plugin List
|
||||
PLUGIN_IMPORT_LOCAL: Import Local Plugins
|
||||
PLUGIN_UPDATE_ALL: Update All Plugins
|
||||
TIPS_REMOVE_LINK: This operation will remove the picture from the album, continue?
|
||||
TIPS_WILL_REMOVE_CHOOSED_IMAGES: This operation will remove the picture from the album, continue?
|
||||
TIPS_MUST_CONTAINS_URL: Must contains $url or $fileName or $extName
|
||||
TIPS_NETWORK_ERROR: Network Error
|
||||
TIPS_NEED_RELOAD: Need Reload App
|
||||
TIPS_PLEASE_CHOOSE_LOG_LEVEL: Please choose log level
|
||||
TIPS_SET_SUCCEED: Set successfully
|
||||
TIPS_RESET_SUCCEED: Reset successfully
|
||||
TIPS_PLUGIN_NOT_GUI_IMPLEMENT: This plugin is not optimized for the GUI, continue?
|
||||
TIPS_GET_PLUGIN_LIST_FAILED: Get plugin list failed
|
||||
MANAGE_SETTING_TITLE: Manage Setting
|
||||
MANAGE_SETTING_ISAUTOREFRESH_TITLE: Auto refresh file list when entering new directory
|
||||
MANAGE_SETTING_ISAUTOREFRESH_TIPS: Only applies to non-paginated mode, data is cached to indexdb to speed up loading speed
|
||||
MANAGE_SETTING_CLEAR_CACHE_TITLE: 'Clear file list cache database, currently in use:'
|
||||
MANAGE_SETTING_CLEAR_CACHE_FREE_TITLE: 'Available:'
|
||||
MANAGE_SETTING_CLEAR_CACHE_TIPS: After clearing, the file list will be reloaded when entering a new directory next time
|
||||
MANAGE_SETTING_CLEAR_CACHE_PROMPT: Are you sure you want to clear the file list cache database?
|
||||
MANAGE_SETTING_CLEAR_CACHE_BUTTON: Clear
|
||||
MANAGE_SETTING_ISSHOWTHUMBNAIL_TITLE: Display the original image instead of format icon (requires public access permissions)
|
||||
MANAGE_SETTING_ISUSEPRESIGNEDURL_TITLE: Use presigned URL for image display
|
||||
MANAGE_SETTING_ISSHOWLIST_TITLE: Default display mode for the file list
|
||||
MANAGE_SETTING_ISSHOWLIST_ON: List
|
||||
MANAGE_SETTING_ISSHOWLIST_OFF: Card
|
||||
MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TITLE: Force custom URL to use HTTPS
|
||||
MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TIPS: After enabling, all operations will automatically add the https prefix to custom domains
|
||||
MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TITLE: Preserve directory structure when uploading
|
||||
MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TIPS: After disabling, all files will be expanded to the specified directory
|
||||
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A: Download
|
||||
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_B: ' File '
|
||||
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C: will preserve the directory structure
|
||||
MANAGE_SETTING_ISDOWNLOADFOLDERKEEPDIRSTRUCTURE_TITLE_D: ' Folder '
|
||||
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS: After enabling, the original directory structure will be preserved
|
||||
MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TITLE: Maximum number of files to download simultaneously (1-9999)
|
||||
MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS: Not work on Tencent
|
||||
MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_INPUT_TIPS: Please enter the maximum number of files to download simultaneously
|
||||
MANAGE_SETTING_ISIGNORECASE_TITLE: Should file search be case-insensitive
|
||||
MANAGE_SETTING_ISIGNORECASE_TIPS: After enabling, the search will be case-insensitive
|
||||
MANAGE_SETTING_TIMESTAMPRENAME_TITLE: Rename uploaded files with timestamp - (highest priority)
|
||||
MANAGE_SETTING_TIMESTAMPRENAME_TIPS: After enabling, the uploaded file will be renamed with the timestamp
|
||||
MANAGE_SETTING_RANDOMSTRINGRENAME_TITLE: Rename uploaded files with random strings - (medium priority)
|
||||
MANAGE_SETTING_RANDOMSTRINGRENAME_TIPS: Random string length is 20
|
||||
MANAGE_SETTING_CUSTOMRENAME_TITLE: Rename uploaded files with custom names - (lowest priority)
|
||||
MANAGE_SETTING_CUSTOMRENAME_TIPS: After enabling, the uploaded file will be renamed with the custom pattern
|
||||
MANAGE_SETTING_CUSTOM_PATTERN_TITLE: Custom rename format, placeholders can be freely combined, please refer to the table below
|
||||
MANAGE_SETTING_CUSTOM_PATTERN_TIPS: Please enter the custom rename format
|
||||
MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TITLE: Placeholder
|
||||
MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TIPS: Description
|
||||
MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TITLE: Presigned URL expiration time (seconds)
|
||||
MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS: Please enter the presigned URL expiration time
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_TITLE: Select default link format for copying
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN: Markdown
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN_WITH_LINK: Markdown with link
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_RAWURL: Raw URL
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_HTML: HTML
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_BBCODE: BBCode
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_CUSTOM: Custom
|
||||
MANAGE_SETTING_CUSTOM_COPY_FORMAT_TITLE: Custom link format($url -> raw url, $fileName -> raw fileName)
|
||||
MANAGE_SETTING_CUSTOM_COPY_FORMAT_TIPS: Please enter the custom link format
|
||||
MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TITLE: Choose default download folder
|
||||
MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TIPS: System default download directory
|
||||
MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON: Choose folder
|
||||
MANAGE_SETTING_COPY_MESSAGE: Copied
|
||||
MANAGE_SETTING_CLEAR_CACHE_SUCCESS: Cleared successfully
|
||||
MANAGE_SETTING_CLEAR_CACHE_FAILED: Clear failed
|
||||
MANAGE_SETTING_ISENCODEURL_TITLE: Encode URL when copy
|
||||
MANAGE_SETTING_ISENCODEURL_TIPS: After enabling, the URL will be encoded when copying
|
||||
MANAGE_NO_DATA: No data
|
||||
MANAGE_MAIN_PAGE_NEW_BUCKET: New Bucket
|
||||
MANAGE_MAIN_PAGE_BACK_TO_HOME: Home
|
||||
MANAGE_MAIN_PAGE_SWITCH_PICBED: Switch
|
||||
MANAGE_MAIN_PAGE_SETTING: Setting
|
||||
MANAGE_MAIN_PAGE_SUBMIT: Submit
|
||||
MANAGE_MAIN_PAGE_TIPS: Tips
|
||||
MANAGE_MAIN_PAGE_TIPS_SUCCESS: Created successfully
|
||||
MANAGE_MAIN_PAGE_TIPS_FAILED: Create failed
|
||||
MANAGE_MAIN_PAGE_BUCKET: Bucket
|
||||
MANAGE_MAIN_PAGE_GALLERY: Album
|
||||
MANAGE_MAIN_PAGE_REPOSITORY: Repo
|
||||
MANAGE_CONSTANT_BASE_RULE: 'Please enter '
|
||||
MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_A: Please enter the number of items displayed per page.
|
||||
MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_B: The number of items displayed per page must be a number.
|
||||
MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_C: The number of items displayed per page must be between 20 and 1000.
|
||||
MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_A: Please enter the alias, which is the unique identifier for this configuration.
|
||||
MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_B: The alias can only contain Chinese, English, numbers, underscores, and hyphens.
|
||||
MANAGE_CONSTANT_ALIAS_TOOLTIP: The alias can only contain Chinese, English, numbers, underscores, and hyphens.
|
||||
MANAGE_CONSTANT_ITEMS_PAGE_TOOLTIP: The number of items displayed per page must be between 20 and 1000.
|
||||
MANAGE_CONSTANT_PAGING_TOOLTIP: When paging is turned off, the directory list will use database caching to optimize performance.
|
||||
MANAGE_CONSTANT_BUCKET_NAME_TOOLTIP: Separated by commas, e.g., bucket1,bucket2,bucket3, and corresponding to the starting directory order one by one.
|
||||
MANAGE_CONSTANT_BASE_DIR_TOOLTIP: Separated by commas, e.g., /dir1,/dir2,/dir3, corresponding to the storage bucket order one by one.
|
||||
MANAGE_CONSTANT_IS_AUTO_CUSTOM_URL_TOOLTIP: When turned on, the domainbound to bucket will be automatically obtained. Else, it can be manually filled in.
|
||||
MANAGE_CONSTANT_SMMS_ALIAS_DESC: Alias - required
|
||||
MANAGE_CONSTANT_SMMS_ALIAS_PLACEHOLDER: Unique identifier of this configuration
|
||||
MANAGE_CONSTANT_SMMS_TOKEN_DESC: Token - required
|
||||
MANAGE_CONSTANT_SMMS_TOKEN_PLACEHOLDER: Please fill in your token
|
||||
MANAGE_CONSTANT_SMMS_PAGING_DESC: Whether to enable pagination
|
||||
MANAGE_CONSTANT_SMMS_EXPLAIN: For users in mainland China, please visit the backup domain https://smms.app. Do not upload images in large quantities.
|
||||
MANAGE_CONSTANT_SMMS_REFER_TEXT: 'Refer to: '
|
||||
MANAGE_CONSTANT_QINIU_NAME: Qiniu
|
||||
MANAGE_CONSTANT_QINIU_ALIAS_DESC: Alias - Required
|
||||
MANAGE_CONSTANT_QINIU_ALIAS_PLACEHOLDER: Unique identifier for this configuration
|
||||
MANAGE_CONSTANT_QINIU_ACCESS_KEY_DESC: accessKey - Required
|
||||
MANAGE_CONSTANT_QINIU_ACCESS_KEY_PLACEHOLDER: Please enter the accessKey
|
||||
MANAGE_CONSTANT_QINIU_SECRET_KEY_DESC: secretKey - Required
|
||||
MANAGE_CONSTANT_QINIU_SECRET_KEY_PLACEHOLDER: Please enter the secretKey
|
||||
MANAGE_CONSTANT_QINIU_BUCKET_DESC: space name - Optional
|
||||
MANAGE_CONSTANT_QINIU_BUCKET_PLACEHOLDER: 'English comma separated, for example: bucket1, bucket2'
|
||||
MANAGE_CONSTANT_QINIU_BASE_DIR_DESC: Base directory - Optional
|
||||
MANAGE_CONSTANT_QINIU_BASE_DIR_PLACEHOLDER: 'English comma separated, for example: /dir1, /dir2'
|
||||
MANAGE_CONSTANT_QINIU_IS_AUTO_CUSTOM_URL_DESC: Automatically get the bound domain name
|
||||
MANAGE_CONSTANT_QINIU_PAGING_DESC: Enable pagination
|
||||
MANAGE_CONSTANT_QINIU_ITEMS_PAGE_DESC: Number of items displayed per page
|
||||
MANAGE_CONSTANT_QINIU_EXPLAIN: When configuring space name and base directory, they can be set using English comma separation. The order must be consistent and missing or empty items will use the default value.
|
||||
MANAGE_CONSTANT_QINIU_REFER_TEXT: 'Refer to: '
|
||||
MANAGE_CONSTANT_GITHUB_ALIAS_DESC: Alias - Required
|
||||
MANAGE_CONSTANT_GITHUB_ALIAS_PLACEHOLDER: Unique identifier for this configuration
|
||||
MANAGE_CONSTANT_GITHUB_TOKEN_DESC: Token - Required
|
||||
MANAGE_CONSTANT_GITHUB_TOKEN_PLACEHOLDER: Please enter the Token
|
||||
MANAGE_CONSTANT_GITHUB_TOKEN_TIPS: Please provide a token with full repo permissions
|
||||
MANAGE_CONSTANT_GITHUB_USER_DESC: Username - Required
|
||||
MANAGE_CONSTANT_GITHUB_USER_PLACEHOLDER: Please enter the Username
|
||||
MANAGE_CONSTANT_GITHUB_USER_RULE_MESSAGE: Username
|
||||
MANAGE_CONSTANT_GITHUB_PROXY_DESC: Proxy address - Optional
|
||||
MANAGE_CONSTANT_GITHUB_PROXY_PLACEHOLDER: 'For example: http://127.0.0.1:1080'
|
||||
MANAGE_CONSTANT_GITHUB_PROXY_TIPS: If the access speed is slow, you can try configuring a proxy
|
||||
MANAGE_CONSTANT_GITHUB_PAGING_DESC: Enable pagination
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_DESC: CDN acceleration domain name - Optional
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_PLACEHOLDER: Support using {username}, {repo}, {branch}, and {path} as replacement placeholders
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_TIPS: 'For example: https://cdn.staticaly.com/gh/{username}/{repo}@{branch}/{path}'
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_A: The acceleration domain name must start with http:// or https://
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_B: The braces in the acceleration domain name must appear in pairs
|
||||
MANAGE_CONSTANT_GITHUB_EXPLAIN: There is an hourly limit for API calls, and uploading files larger than 100M is not supported
|
||||
MANAGE_CONSTANT_GITHUB_REFER_TEXT: 'Refer to:'
|
||||
MANAGE_CONSTANT_ALIYUN_NAME: Ali Cloud
|
||||
MANAGE_CONSTANT_ALIYUN_ALIAS_DESC: Alias - required
|
||||
MANAGE_CONSTANT_ALIYUN_ALIAS_PLACEHOLDER: The unique identifier of this configuration
|
||||
MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_ID_DESC: AccessKeyId - required
|
||||
MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_DESC: AccessKeySecret - required
|
||||
MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_PLACEHOLDER: Please fill in AccessKeySecret
|
||||
MANAGE_CONSTANT_ALIYUN_BUCKET_DESC: Bucket name - optional
|
||||
MANAGE_CONSTANT_ALIYUN_BUCKET_PLACEHOLDER: 'Separated by commas in English, for example: bucket1, bucket2'
|
||||
MANAGE_CONSTANT_ALIYUN_BASE_DIR_DESC: Base directory - optional
|
||||
MANAGE_CONSTANT_ALIYUN_BASE_DIR_PLACEHOLDER: 'Separated by commas in English, for example: /dir1, /dir2'
|
||||
MANAGE_CONSTANT_ALIYUN_IS_AUTO_CUSTOM_URL_DESC: Automatically obtain bound domain name
|
||||
MANAGE_CONSTANT_ALIYUN_PAGING_DESC: Whether to enable pagination
|
||||
MANAGE_CONSTANT_ALIYUN_ITEMS_PAGE_DESC: Number of items displayed per page
|
||||
MANAGE_CONSTANT_ALIYUN_EXPLAIN: When configuring bucket name and base directory, they can be set using English comma separation. The order must be consistent and missing or empty items will use the default value.
|
||||
MANAGE_CONSTANT_ALIYUN_REFER_TEXT: 'Refer to: '
|
||||
MANAGE_CONSTANT_TENCENT_NAME: Tencent
|
||||
MANAGE_CONSTANT_TENCENT_ALIAS_DESC: Alias - Required
|
||||
MANAGE_CONSTANT_TENCENT_ALIAS_PLACEHOLDER: Unique identifier for this configuration
|
||||
MANAGE_CONSTANT_TENCENT_SECRET_ID_DESC: SecretID - Required
|
||||
MANAGE_CONSTANT_TENCENT_SECRET_ID_PLACEHOLDER: Please fill in the SecretID
|
||||
MANAGE_CONSTANT_TENCENT_SECRET_KEY_DESC: SecretKey - Required
|
||||
MANAGE_CONSTANT_TENCENT_SECRET_KEY_PLACEHOLDER: Please fill in the SecretKey
|
||||
MANAGE_CONSTANT_TENCENT_APPID_DESC: App ID - Required
|
||||
MANAGE_CONSTANT_TENCENT_APPID_PLACEHOLDER: Please fill in the App ID
|
||||
MANAGE_CONSTANT_TENCENT_APPID_TOOLTIP: 'For example: 1250000000'
|
||||
MANAGE_CONSTANT_TENCENT_BUCKET_DESC: Bucket name - Optional (note the App ID must be included)
|
||||
MANAGE_CONSTANT_TENCENT_BUCKET_PLACEHOLDER: 'Comma-separated list of bucket names, for example: bucket1-1250000000, bucket2-1250000000'
|
||||
MANAGE_CONSTANT_TENCENT_BASE_DIR_DESC: Starting directory - Optional
|
||||
MANAGE_CONSTANT_TENCENT_BASE_DIR_PLACEHOLDER: 'Comma-separated list of directories, for example: /dir1, /dir2'
|
||||
MANAGE_CONSTANT_TENCENT_IS_AUTO_CUSTOM_URL_DESC: Automatically obtain binding domain name
|
||||
MANAGE_CONSTANT_TENCENT_PAGING_DESC: Enable paging
|
||||
MANAGE_CONSTANT_TENCENT_ITEMS_PAGE_DESC: Number of items to display per page
|
||||
MANAGE_CONSTANT_TENCENT_EXPLAIN: When configuring bucket name and base directory, they can be set using English comma separation. The order must be consistent and missing or empty items will use the default value.
|
||||
MANAGE_CONSTANT_TENCENT_REFER_TEXT: 'Refer to: '
|
||||
MANAGE_CONSTANT_UPYUN_NAME: Upyun
|
||||
MANAGE_CONSTANT_UPYUN_ALIAS_DESC: Alias - required
|
||||
MANAGE_CONSTANT_UPYUN_ALIAS_PLACEHOLDER: Unique identifier of the configuration
|
||||
MANAGE_CONSTANT_UPYUN_BUCKET_DESC: Service name - required
|
||||
MANAGE_CONSTANT_UPYUN_BUCKET_PLACEHOLDER: Name of the storage bucket corresponding to other object storage
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_DESC: Operator name - required
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_PLACEHOLDER: It is recommended to use an operator with full read, write, and delete permissions
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_RULE: Operator
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_DESC: Operator password - required
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_PLACEHOLDER: Please enter the password
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_RULE: Operator password
|
||||
MANAGE_CONSTANT_UPYUN_BASE_DIR_DESC: Base directory - optional
|
||||
MANAGE_CONSTANT_UPYUN_BASE_DIR_PLACEHOLDER: Initial directory when reading files
|
||||
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_DESC: Acceleration domain name - required
|
||||
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_PLACEHOLDER: Please start with http:// or https://
|
||||
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_A: Acceleration domain name cannot be empty
|
||||
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_B: Please start the custom domain name with http:// or https://
|
||||
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_DESC: Anti-leech key - optional
|
||||
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_PLACEHOLDER: Please enter the anti-leech key
|
||||
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_TOOLTIP: If you do not need to use anti-leech, please leave it blank
|
||||
MANAGE_CONSTANT_UPYUN_EXPIRE_TIME_DESC: Expiration time(s) - optional
|
||||
MANAGE_CONSTANT_UPYUN_PAGING: Whether to enable pagination
|
||||
MANAGE_CONSTANT_UPYUN_ITEMS_PAGE: Number of items displayed per page
|
||||
MANAGE_CONSTANT_UPYUN_EXPLAIN: It is necessary to fill in the acceleration domain name of Upyun image bed, otherwise it cannot be used normally.
|
||||
MANAGE_CONSTANT_UPYUN_REFER_TEXT: 'Refer to: '
|
||||
MANAGE_CONSTANT_IMGUR_NAME: Imgur
|
||||
MANAGE_CONSTANT_IMGUR_ALIAS_DESC: Alias - required
|
||||
MANAGE_CONSTANT_IMGUR_ALIAS_PLACEHOLDER: Unique identifier of the configuration
|
||||
MANAGE_CONSTANT_IMGUR_USERNAME_DESC: Imgur username - required
|
||||
MANAGE_CONSTANT_IMGUR_USERNAME_PLACEHOLDER: Please enter the Imgur username
|
||||
MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_DESC: Access token - required
|
||||
MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_PLACEHOLDER: Please enter the access token
|
||||
MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_TOOLTIP: Not the client ID, please refer to the configuration tutorial
|
||||
MANAGE_CONSTANT_IMGUR_PROXY_DESC: Proxy - optional
|
||||
MANAGE_CONSTANT_IMGUR_PROXY_PLACEHOLDER: 'For example: http://127.0.0.1:1080'
|
||||
MANAGE_CONSTANT_IMGUR_PROXY_TOOLTIP: Please use a proxy in mainland China, otherwise it cannot be used normally
|
||||
MANAGE_CONSTANT_IMGUR_EXPLAIN: Please use a proxy in mainland China, API calls have restrictions, please pay attention to usage frequency
|
||||
MANAGE_CONSTANT_IMGUR_REFER_TEXT: 'Refer to: '
|
||||
MANAGE_CONSTANT_S3_NAME: S3-Compatible
|
||||
MANAGE_CONSTANT_S3_ALIAS_DESC: Alias - Required
|
||||
MANAGE_CONSTANT_S3_ALIAS_PLACEHOLDER: Unique identifier for this configuration
|
||||
MANAGE_CONSTANT_S3_ACCESS_KEY_ID_DESC: Access Key ID - Required
|
||||
MANAGE_CONSTANT_S3_ACCESS_KEY_ID_PLACEHOLDER: Please enter Access Key ID
|
||||
MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_DESC: Secret Access Key - Required
|
||||
MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_PLACEHOLDER: Please enter Secret Access Key
|
||||
MANAGE_CONSTANT_S3_ENDPOINT_DESC: Endpoint - Optional
|
||||
MANAGE_CONSTANT_S3_ENDPOINT_PLACEHOLDER: e.g. s3.us-east-1.amazonaws.com
|
||||
MANAGE_CONSTANT_S3_ENDPOINT_TOOLTIP: If left blank, AWS S3 is accessed by default. Provide the root API endpoint
|
||||
MANAGE_CONSTANT_S3_SSLENABLED_DESC: Use HTTPS connection
|
||||
MANAGE_CONSTANT_S3_SSLENABLED_TOOLTIP: Disable this option if not supported by your platform.
|
||||
MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_DESC: Enable S3 Path style
|
||||
MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_TOOLTIP: Required when using Minio, for example.
|
||||
MANAGE_CONSTANT_S3_PROXY_DESC: Proxy - Optional
|
||||
MANAGE_CONSTANT_S3_PROXY_PLACEHOLDER: e.g. http://127.0.0.1:1080
|
||||
MANAGE_CONSTANT_S3_PROXY_TOOLTIP: Use proxy if unable to access in some parts of Mainland China
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_DESC: Permission for uploaded files
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PRIVATE: Private
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ: Public read
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ_WRITE: Public read and write
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AUTHENTICATED_READ: Authenticated read
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_READ: Bucket owner read
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_FULL_CONTROL: Bucket owner full control
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AWS_EXEC_READ: AWS execution read
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_TOOLTIP: Permission options for uploaded files
|
||||
MANAGE_CONSTANT_S3_BUCKET_DESC: Bucket name - Optional
|
||||
MANAGE_CONSTANT_S3_BUCKET_PLACEHOLDER: English comma-separated list, e.g. bucket1,bucket2
|
||||
MANAGE_CONSTANT_S3_BASE_DIR_DESC: Base directory - Optional
|
||||
MANAGE_CONSTANT_S3_BASE_DIR_PLACEHOLDER: English comma-separated list, e.g. /dir1,/dir2
|
||||
MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_DESC: Enable Doge Cloud API
|
||||
MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_TOOLTIP: Support Doge Cloud API
|
||||
MANAGE_CONSTANT_S3_PAGING_DESC: Enable pagination
|
||||
MANAGE_CONSTANT_S3_ITEMS_PAGE_DESC: Items per page
|
||||
MANAGE_CONSTANT_S3_EXPLAIN: When configuring bucket name and base directory, they can be set using English comma separation. The order must be consistent and missing or empty items will use the default value.
|
||||
MANAGE_CONSTANT_S3_REFER_TEXT: 'Refer to: '
|
||||
MANAGE_CONSTANT_WEBDAV_ALIAS_DESC: Alias - Required
|
||||
MANAGE_CONSTANT_WEBDAV_ALIAS_PLACEHOLDER: Unique identifier for this configuration
|
||||
MANAGE_CONSTANT_WEBDAV_HOST_DESC: Address - Required
|
||||
MANAGE_CONSTANT_WEBDAV_HOST_PLACEHOLDER: e.g. https://example.com/dav
|
||||
MANAGE_CONSTANT_WEBDAV_HOST_TOOLTIP: Please enter the complete WebDAV address
|
||||
MANAGE_CONSTANT_WEBDAV_USERNAME_DESC: Username - Required
|
||||
MANAGE_CONSTANT_WEBDAV_USERNAME_PLACEHOLDER: Please enter your username
|
||||
MANAGE_CONSTANT_WEBDAV_BUCKET_DESC: Special Configuration
|
||||
MANAGE_CONSTANT_WEBDAV_BUCKET_PLACEHOLDER: e.g. bucket1
|
||||
MANAGE_CONSTANT_WEBDAV_BUCKET_TOOLTIP: This cannot be modified, only for software compatibility consideration
|
||||
MANAGE_CONSTANT_WEBDAV_PASSWORD_DESC: Password - Required
|
||||
MANAGE_CONSTANT_WEBDAV_PASSWORD_PLACEHOLDER: Please enter your password
|
||||
MANAGE_CONSTANT_WEBDAV_BASE_DIR_DESC: Base Directory - Optional
|
||||
MANAGE_CONSTANT_WEBDAV_BASE_DIR_PLACEHOLDER: e.g. /dir1
|
||||
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_DESC: Custom Domain - Optional
|
||||
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_PLACEHOLDER: e.g. https://example.com
|
||||
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_TOOLTIP: If your WebDAV server supports custom domains, please fill in
|
||||
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE: Custom domain should start with http:// or https://
|
||||
MANAGE_CONSTANT_WEBDAV_WEB_PATH: Web Path - Optional
|
||||
MANAGE_CONSTANT_WEBDAV_WEB_PATH_PLACEHOLDER: e.g. test/ttc
|
||||
MANAGE_CONSTANT_WEBDAV_WEB_PATH_TOOLTIP: Used to generate URL
|
||||
MANAGE_CONSTANT_WEBDAV_PROXY_DESC: Proxy - Optional
|
||||
MANAGE_CONSTANT_WEBDAV_PROXY_PLACEHOLDER: e.g. http://127.0.0.1:1080
|
||||
MANAGE_CONSTANT_WEBDAV_PROXY_TOOLTIP: If special network environment is required to access, please use proxy
|
||||
MANAGE_CONSTANT_WEBDAV_SSL_DESC: Use HTTPS Connection
|
||||
MANAGE_CONSTANT_WEBDAV_SSL_TOOLTIP: Depending on the configuration of your WebDAV server, if your server does not support HTTPS, please turn off this option
|
||||
MANAGE_CONSTANT_WEBDAV_AUTH_TYPE_DESC: Authentication Type
|
||||
MANAGE_CONSTANT_WEBDAV_EXPLAIN: WebDAV Configuration
|
||||
MANAGE_CONSTANT_WEBDAV_REFER_TEXT: 'Refer to:'
|
||||
MANAGE_CONSTANT_LOCAL_NAME: Local
|
||||
MANAGE_CONSTANT_LOCAL_ALIAS_DESC: Alias - Required
|
||||
MANAGE_CONSTANT_LOCAL_ALIAS_PLACEHOLDER: Unique identifier for this configuration
|
||||
MANAGE_CONSTANT_LOCAL_BASE_DIR_DESC: Base directory - Required
|
||||
MANAGE_CONSTANT_LOCAL_BASE_DIR_PLACEHOLDER: e.g. /dir1
|
||||
MANAGE_CONSTANT_LOCAL_CUSTOM_URL_DESC: Custom Domain - Optional
|
||||
MANAGE_CONSTANT_LOCAL_CUSTOM_URL_PLACEHOLDER: e.g. https://example.com
|
||||
MANAGE_CONSTANT_LOCAL_CUSTOM_URL_TOOLTIP: If your local path supports custom domains, please fill in
|
||||
MANAGE_CONSTANT_LOCAL_WEB_PATH: Web Path - Optional
|
||||
MANAGE_CONSTANT_LOCAL_WEB_PATH_PLACEHOLDER: e.g. test/ttc
|
||||
MANAGE_CONSTANT_LOCAL_WEB_PATH_TOOLTIP: Used to generate URL
|
||||
MANAGE_CONSTANT_LOCAL_EXPLAIN: Local Configuration
|
||||
MANAGE_CONSTANT_LOCAL_REFER_TEXT: 'Refer to:'
|
||||
MANAGE_CONSTANT_LOCAL_BASE_DIR_RULE_MESSAGE: baseDir cannot be empty
|
||||
MANAGE_CONSTANT_LOCAL_BUCKET_DESC: Special Configuration
|
||||
MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER: bucket1
|
||||
MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP: This cannot be modified, only for software compatibility consideration
|
||||
MANAGE_CONSTANT_SFTP_NAME: SFTP
|
||||
MANAGE_CONSTANT_SFTP_ALIAS_DESC: Alias - Required
|
||||
MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER: Unique identifier for this configuration
|
||||
MANAGE_CONSTANT_SFTP_HOST_DESC: SSH Host - Required
|
||||
MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER: e.g. 233.233.233.233
|
||||
MANAGE_CONSTANT_SFTP_PORT_DESC: SSH Port - Required
|
||||
MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER: e.g. 22
|
||||
MANAGE_CONSTANT_SFTP_USERNAME_DESC: Username
|
||||
MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER: Please enter your username
|
||||
MANAGE_CONSTANT_SFTP_PASSWORD_DESC: Password
|
||||
MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER: Please enter your password
|
||||
MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC: Private Key
|
||||
MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER: Please enter your private key
|
||||
MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC: Private Key Password
|
||||
MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER: Please enter your private key password
|
||||
MANAGE_CONSTANT_SFTP_BASE_DIR_DESC: Base Directory
|
||||
MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER: e.g. /dir1
|
||||
MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC: Custom Domain
|
||||
MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER: e.g. https://example.com
|
||||
MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP: If your SFTP server supports custom domains, please fill in
|
||||
MANAGE_CONSTANT_SFTP_WEB_PATH: Web Path
|
||||
MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER: e.g. test/ttc
|
||||
MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP: Used to generate URL
|
||||
MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC: File mode
|
||||
MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER: e.g. 0644
|
||||
MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC: Directory mode
|
||||
MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER: e.g. 0755
|
||||
MANAGE_CONSTANT_SFTP_EXPLAIN: SFTP Configuration
|
||||
MANAGE_CONSTANT_SFTP_REFER_TEXT: 'Refer to:'
|
||||
MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE: baseDir cannot be empty
|
||||
MANAGE_CONSTANT_SFTP_BUCKET_DESC: Special Configuration
|
||||
MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER: e.g. bucket1
|
||||
MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: This cannot be modified, only for software compatibility consideration
|
||||
MANAGE_LOGIN_PAGE_PANE_NAME: Saved Config
|
||||
MANAGE_LOGIN_PAGE_PANE_KEY_NAME: Configuration
|
||||
MANAGE_LOGIN_PAGE_PANE_KEY_VALUE: Value
|
||||
MANAGE_LOGIN_PAGE_PANE_ENTER: Enter
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE: Delete
|
||||
MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER: Please select
|
||||
MANAGE_LOGIN_PAGE_PANE_IMPORT: Import
|
||||
MANAGE_LOGIN_PAGE_PANE_SAVE: Save
|
||||
MANAGE_LOGIN_PAGE_PANE_RESET: Reset
|
||||
MANAGE_LOGIN_PAGE_PANE_TABLE_TITLE: Existing configurations, click to copy corresponding cell data
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_MESSAGE_A: Please fill in
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ALIAS_MESSAGE: The alias can only contain Chinese, English, numbers, underscores, and hyphens
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ITEMS_PER_PAGE_MESSAGE: The number of items per page must be between 20-1000
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_CUSTOM_URL_MESSAGE: Custom domain name should start with http:// or https://
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME: Notice
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE: 'Alias overwritten: '
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_B: 'Alias saved: '
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_C: 'Alias deleted: '
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_D: 'Configuration with alias: '
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_E: ' failed to delete'
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_COPY_SUCCESS: 'Copied '
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TITLE: Are you sure to delete this?
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TIP: Tip
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CONFIRM: Confirm
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CANCEL: Cancel
|
||||
MANAGE_BUCKET_PAGE_LOADING_TEXT: Loading...
|
||||
MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER: Please select a custom domain
|
||||
MANAGE_BUCKET_PAGE_CUSTOM_URL_INPUT_PLACEHOLDER: Please enter a custom domain
|
||||
MANAGE_BUCKET_PAGE_UPLOAD_FILES_TOOLTIP: Upload files
|
||||
MANAGE_BUCKET_PAGE_UPLOAD_FROM_URL_TOOLTIP: Upload from URL
|
||||
MANAGE_BUCKET_PAGE_CREATE_FOLDER_TOOLTIP: Create folder
|
||||
MANAGE_BUCKET_PAGE_DOWNLOAD_TOOLTIP: Download page
|
||||
MANAGE_BUCKET_PAGE_BATCH_RENAME_TOOLTIP: Batch rename
|
||||
MANAGE_BUCKET_PAGE_BATCH_COPY_URL_TOOLTIP: Batch copy URL
|
||||
MANAGE_BUCKET_PAGE_COPY_FILE_INFO_TOOLTIP: Copy file information
|
||||
MANAGE_BUCKET_PAGE_FORCE_REFRESH_TOOLTIP: Force refresh file list
|
||||
MANAGE_BUCKET_PAGE_SEARCH_PLACEHOLDER: Search files
|
||||
MANAGE_BUCKET_PAGE_ROOT_FOLDER: Root folder
|
||||
MANAGE_BUCKET_PAGE_FILE_NUMBER: 'Number of files: '
|
||||
MANAGE_BUCKET_PAGE_FILE_SIZE: 'Total size: '
|
||||
MANAGE_BUCKET_PAGE_SELECT_ALL: Select all
|
||||
MANAGE_BUCKET_PAGE_SELECT_NONE: Deselect all
|
||||
MANAGE_BUCKET_PAGE_SELECT_INVERT: Invert selection
|
||||
MANAGE_BUCKET_DOWNLOAD_BTN: Download
|
||||
MANAGE_BUCKET_DELETE_BTN: Delete
|
||||
MANAGE_BUCKET_SORT_TITLE: Sort
|
||||
MANAGE_BUCKET_SORT_NAME: Name
|
||||
MANAGE_BUCKET_SORT_SIZE: Size
|
||||
MANAGE_BUCKET_SORT_EXT: Type
|
||||
MANAGE_BUCKET_SORT_TIME: Time
|
||||
MANAGE_BUCKET_SORT_CHECK: Selected status
|
||||
MANAGE_BUCKET_SORT_INIT: Init
|
||||
MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: Please enter URL(s), support multiple URLs separated by line breaks
|
||||
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: Confirm
|
||||
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: Cancel
|
||||
MANAGE_BUCKET_URL_FORMAT_MARKDOWN: Markdown
|
||||
MANAGE_BUCKET_URL_FORMAT_MARKDOWN_WITH_LINK: Markdown-link
|
||||
MANAGE_BUCKET_URL_FORMAT_URL: Url
|
||||
MANAGE_BUCKET_URL_FORMAT_HTML: Html
|
||||
MANAGE_BUCKET_URL_FORMAT_BBCODE: BBCode
|
||||
MANAGE_BUCKET_URL_FORMAT_CUSTOM: Custom
|
||||
MANAGE_BUCKET_URL_FORMAT_PRESIGN: Presigned link
|
||||
MANAGE_BUCKET_FILE_INFO_TITLE: File information
|
||||
MANAGE_BUCKET_FILE_INFO_COPY_TIPS: Copy in JSON format
|
||||
MANAGE_BUCKET_FILE_LIST_LOADING: Loading, click to cancel
|
||||
MANAGE_BUCKET_FILE_LIST_DOWNLOAD_PRE: Preparing to download, click to cancel
|
||||
MANAGE_BUCKET_KEEP_FOLDER_STRUCTURE: Keep folder structure
|
||||
MANAGE_BUCKET_NOT_KEEP_FOLDER_STRUCTURE: Do not keep folder structure
|
||||
MANAGE_BUCKET_UPLOAD_AREA_TITLE: Drag and drop to upload, support recursive upload of folders
|
||||
MANAGE_BUCKET_UPLOAD_AREA_TEXT: 'Or: click to select file (folders are not supported)'
|
||||
MANAGE_BUCKET_UPLOAD_AREA_BTN_LOADING: Loading files
|
||||
MANAGE_BUCKET_UPLOAD_AREA_BTN: Upload
|
||||
MANAGE_BUCKET_UPLOAD_AREA_CLEAR: Clear
|
||||
MANAGE_BUCKET_UPLOAD_AREA_STATUS_UPLOADING: Uploading
|
||||
MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK: Copy upload task information
|
||||
MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK: Clear completed tasks
|
||||
MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK: Clear all tasks
|
||||
MANAGE_BUCKET_UPLOAD_AREA_SUCCESS: Success
|
||||
MANAGE_BUCKET_UPLOAD_AREA_FAILED: Failed
|
||||
MANAGE_BUCKET_DOWNLOAD_PAGE_TITLE: Download page
|
||||
MANAGE_BUCKET_DOWNLOADING: Downloading
|
||||
MANAGE_BUCKET_DOWNLOAD_COPY_TASK: Copy download task information
|
||||
MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK: Clear completed tasks
|
||||
MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK: Clear all tasks
|
||||
MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER: Open download folder
|
||||
MANAGE_BUCKET_DOWNLOAD_SUCCESS: Success
|
||||
MANAGE_BUCKET_DOWNLOAD_FAILED: Failed
|
||||
MANAGE_BUCKET_MARKDOWN_PREVIEW: Preview
|
||||
MANAGE_BUCKET_PLAY: Play
|
||||
MANAGE_BUCKET_RENAME_FILE: Rename file
|
||||
MANAGE_BUCKET_RENAME_FILE_INPUT_A: String or JS regular expression for matching during replacement
|
||||
MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS: Directly enter the regular expression, no need to add /
|
||||
MANAGE_BUCKET_RENAME_FILE_INPUT_A_PLACEHOLDER: 'For example: ^\d{4}-\d{2}-\d{2} '
|
||||
MANAGE_BUCKET_RENAME_FILE_INPUT_B: String for replacement, placeholders from custom
|
||||
MANAGE_BUCKET_RENAME_FILE_TABLE_IID: Auto-incrementing number
|
||||
MANAGE_BUCKET_RENAME_FILE_EXT: Replace extension if it matches
|
||||
MANAGE_BUCKET_RENAME_FILE_EXT_TIPS: Check this option if you want to modify the extension
|
||||
MANAGE_BUCKET_RENAME_FILE_EXT_YES: 'Yes'
|
||||
MANAGE_BUCKET_RENAME_FILE_EXT_NO: 'No'
|
||||
MANAGE_BUCKET_RENAME_FILE_CANCEL: Cancel
|
||||
MANAGE_BUCKET_RENAME_FILE_CONFIRM: Confirm
|
||||
MANAGE_BUCKET_COPY_SUCCESS: Copy success
|
||||
MANAGE_BUCKET_START_LOADING_MESSAGE: Start getting files
|
||||
MANAGE_BUCKET_END_LOADING_MESSAGE_FAIL: Failed to get file content
|
||||
MANAGE_BUCKET_LAST_PAGE_TITLE: Tip
|
||||
MANAGE_BUCKET_LAST_PAGE_MSG: This is the last page
|
||||
MANAGE_BUCKET_GET_LIST_FAIL_TITLE: Tip
|
||||
MANAGE_BUCKET_GET_LIST_FAIL_MSG: Failed to get file list
|
||||
MANAGE_BUCKET_GET_LIST_FAIL_MSG2: Getting file list in the background, please do not switch pages
|
||||
MANAGE_BUCKET_GET_LIST_FAIL_MSG3: Loading file list, please try again later
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TITLE: Are you sure you want to download this folder?
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TIP: Tip
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CONFIRM: Confirm
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CANCEL: Cancel
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_SUCCESS: Successfully obtained download list
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_FAIL: Failed to obtain download list
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_CANCEL: Canceled
|
||||
MANAGE_BUCKET_CREATE_FOLDER_BOX_TITLE: Please enter the folder name
|
||||
MANAGE_BUCKET_CREATE_FOLDER_BOX_TIP: Create folder
|
||||
MANAGE_BUCKET_CREATE_FOLDER_BOX_CONFIRM: Confirm
|
||||
MANAGE_BUCKET_CREATE_FOLDER_BOX_CANCEL: Cancel
|
||||
MANAGE_BUCKET_CREATE_FOLDER_ERROR_MSG: Folder name can only contain Chinese, English, numbers, underscores, and slashes
|
||||
MANAGE_BUCKET_CREATE_FOLDER_SUCCESS: Successfully created, please refresh
|
||||
MANAGE_BUCKET_CREATE_FOLDER_FAIL: Failed to create
|
||||
MANAGE_BUCKET_UPLOAD_URL_ERROR_MSQ: Please enter a valid URL
|
||||
MANAGE_BUCKET_UPLOAD_URL_NOT_TITLE: Tip
|
||||
MANAGE_BUCKET_UPLOAD_URL_NOT_MSG: Starting background download, automatic upload after success
|
||||
MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG: Please enter the matching string
|
||||
MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG2: No matching files found
|
||||
MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG3: No files need to be renamed
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_A: Detected
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_B: files are duplicated. Do you want to continue?
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_C: Tip
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_CONFIRM: Confirm
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_CANCEL: Cancel
|
||||
MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_A: Rename successful
|
||||
MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_B: Failed
|
||||
MANAGE_BUCKET_BATCH_RENAME_CANCEL: Canceled
|
||||
MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG: Please select the file first
|
||||
MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A: Copied
|
||||
MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B: file(s) information
|
||||
MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG: Please select the file first
|
||||
MANAGE_BUCKET_BATCH_COPY_URL_MSG_A: Copied
|
||||
MANAGE_BUCKET_BATCH_COPY_URL_MSG_B: file(s) link
|
||||
MANAGE_BUCKET_CANCEL_LOADING_TITLE: Stop getting file list?
|
||||
MANAGE_BUCKET_CANCEL_LOADING_MSG: Tip
|
||||
MANAGE_BUCKET_CANCEL_LOADING_CONFIRM: Confirm
|
||||
MANAGE_BUCKET_CANCEL_LOADING_CANCEL: Cancel
|
||||
MANAGE_BUCKET_CANCEL_LOADING_SUCCESS: File list retrieval has been stopped
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_TITLE: Stop downloading file retrieval?
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_MSG: Prompt
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CONFIRM: Confirm
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CANCEL: Cancel
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_SUCCESS: Download file retrieval has been stopped
|
||||
MANAGE_BUCKET_GET_FILE_BS_NOT_TITLE: Prompt
|
||||
MANAGE_BUCKET_GET_FILE_BS_NOT_MSG: Successfully retrieved file list
|
||||
MANAGE_BUCKET_GET_FILE_BS_NOT_MSG2: Some files failed to retrieve
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A: Permanently delete
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B: files, continue?
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG: Prompt
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM: Confirm
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL: Cancel
|
||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_TITLE: Prompt
|
||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG: Deletion failed
|
||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2: Deletion successful
|
||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG3: Failed
|
||||
MANAGE_BUCKET_BATCH_DELETE_CANCEL: Deletion has been cancelled
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE: Permanently delete
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER: folder
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER_A: and all files in this directory
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FILE: file
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_C: Continue?
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_MSG: Prompt
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_CONFIRM: Confirm
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_CANCEL: Cancel
|
||||
MANAGE_BUCKET_DELETE_ERROR_MSG_TITLE: Prompt
|
||||
MANAGE_BUCKET_DELETE_ERROR_MSG_MSG: Deleting a folder may take some time, please be patient
|
||||
MANAGE_BUCKET_DELETE_SUCCESS: Deletion successful
|
||||
MANAGE_BUCKET_DELETE_FAIL: Deletion failed
|
||||
MANAGE_BUCKET_DELETE_CANCEL: Deletion has been cancelled
|
||||
MANAGE_BUCKET_RENAME_INFO_MSG: The new file name is the same as the original file name, no need to rename
|
||||
MANAGE_BUCKET_RENAME_SUCCESS: Rename successful
|
||||
MANAGE_BUCKET_RENAME_ERROR_MSG: Rename failed
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_FILENAME: File name
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_FINISHTIME: Completion time
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS: Status
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_SUCCESS: Success
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_FAIL: Failed
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_FILENAME: File name
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_TARGETFILEPATH: Upload path
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_FINISHTIME: Completion time
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_STATUS: Status
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_SUCCESS: Success
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_FAIL: Failed
|
||||
MANAGE_BUCKET_DOWNLOADING_COLUMN_FILENAME: File name
|
||||
MANAGE_BUCKET_DOWNLOADING_COLUMN_PROGRESS: Progress
|
||||
MANAGE_BUCKET_UPLOADING_COLUMN_FILENAME: File name
|
||||
MANAGE_BUCKET_UPLOADING_COLUMN_PROGRESS: Progress
|
||||
MANAGE_BUCKET_UPLOADED_COLUMN_FILENAME: File name
|
||||
MANAGE_BUCKET_UPLOADED_COLUMN_FILESIZE: Size
|
||||
MANAGE_BUCKET_UPLOADED_COLUMN_FILENUM: Number of files
|
||||
MANAGE_BUCKET_FILE_COLUMN_FILENAME: FileName
|
||||
MANAGE_BUCKET_FILE_COLUMN_COPY_URL: Copy link
|
||||
MANAGE_BUCKET_FILE_COLUMN_INFO: File Info
|
||||
MANAGE_BUCKET_FILE_COLUMN_FILESIZE: Size
|
||||
MANAGE_BUCKET_FILE_COLUMN_TIME: Time
|
||||
MANAGE_NEW_BUCKET_TCYUN_NAME: Tencent Cloud
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_DESC: Bucket Name
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_PLACEHOLDER: Please enter the Bucket name
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_A: Bucket name can't be empty
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_B: Bucket name length cannot exceed 23 characters
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_C: Bucket name can only contain lowercase letters, numbers, and hyphens, and cannot begin or end with a hyphen
|
||||
MANAGE_NEW_BUCKET_TCYUN_REGION: Region
|
||||
MANAGE_NEW_BUCKET_TCYUN_ACL_DESC: Access Control
|
||||
MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_RW: Public Read and Write
|
||||
MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_R: Public Read
|
||||
MANAGE_NEW_BUCKET_TCYUN_ACL_PRIVATE: Private
|
||||
MANAGE_NEW_BUCKET_ALIYUN_NAME: Alibaba Cloud
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_DESC: Bucket Name
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_PLACEHOLDER: Please enter the Bucket name
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_A: Bucket name can't be empty
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_B: Bucket name length cannot exceed 63 characters
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_C: Bucket name can only contain lowercase letters, numbers, and hyphens, and cannot begin or end with a hyphen
|
||||
MANAGE_NEW_BUCKET_ALIYUN_REGION: Region
|
||||
MANAGE_NEW_BUCKET_ALIYUN_ACL_DESC: Access Control
|
||||
MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_RW: Public Read and Write
|
||||
MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_R: Public Read
|
||||
MANAGE_NEW_BUCKET_ALIYUN_ACL_PRIVATE: Private
|
||||
MANAGE_NEW_BUCKET_QINIU_NAME: Qiniu Cloud
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_DESC: Bucket Name
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_PLACEHOLDER: Please enter the Bucket name
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_A: Bucket name can't be empty
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_B: Bucket name length cannot exceed 63 characters
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_C: Bucket names can only contain lowercase letters, numbers, and hyphens, and cannot start or end with a hyphen.
|
||||
MANAGE_NEW_BUCKET_QINIU_REGION: Region
|
||||
MANAGE_NEW_BUCKET_QINIU_ACL_DESC: Public Access
|
||||
MANAGE_NEW_BUCKET_S3PLIST_NAME: S3-Compatible
|
||||
MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_DESC: Bucket Name
|
||||
MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_PLACEHOLDER: Please enter the Bucket name
|
||||
MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_RULE_MSG_A: Bucket name can't be empty
|
||||
MANAGE_NEW_BUCKET_S3PLIST_REGION: Region
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_DESC: Access Control
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_RW: Public Read and Write
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_R: Public Read
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_PRIVATE: Private
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_AUTHENTICATED_READ: Authenticated Read
|
||||
PLUGIN_INSTALL_FAILED: Plugin install failed
|
||||
PLUGIN_UNINSTALL_FAILED: Plugin uninstall failed
|
||||
PLUGIN_UPDATE_SUCCEED: Plugin update succeed
|
||||
PLUGIN_UPDATE_FAILED: Plugin update failed
|
||||
PLUGIN_IMPORT_SUCCEED: Plugin import succeed
|
||||
PLUGIN_IMPORT_FAILED: Plugin import failed
|
||||
ENABLE_PLUGIN: Enable Plugin
|
||||
DISABLE_PLUGIN: Disable Plugin
|
||||
UNINSTALL_PLUGIN: Uninstall Plugin
|
||||
UPDATE_PLUGIN: Update Plugin
|
||||
TIPS_NOTICE: Tips
|
||||
TIPS_WARNING: Warning
|
||||
TIPS_ERROR: Error
|
||||
TIPS_INSTALL_NODE_AND_RELOAD_PICGO: Please install Node.js and restart PicList to continue
|
||||
TIPS_PLUGIN_REMOVE_GALLERY_ITEM: Plugin is trying to remove some images from the album gallery, continue?
|
||||
TIPS_UPLOAD_NOT_PICTURES: The latest clipboard item is not a picture
|
||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT: PicList config file broken, has been restored to default
|
||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP: PicList config file broken, has been restored to backup
|
||||
TIPS_PICGO_BACKUP_FILE_VERSION: 'Backup file version: ${v}'
|
||||
TIPS_SHORTCUT_MODIFIED_SUCCEED: Shortcut modified successfully
|
||||
TIPS_SHORTCUT_MODIFIED_CONFLICT: Shortcut conflict, please reset
|
||||
TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR: Custom config file parse error, please check the path content
|
||||
TIPS_FIND_NEW_VERSION: Find new version ${v}, update many new features, do you want to download the latest version in the background?
|
||||
UPDATE_DOWNLOADED: Update downloaded
|
||||
TIPS_UPDATE_DOWNLOADED: The update has been downloaded and will be installed on the next app restart. Would you like to restart now?
|
||||
QUIT: Quit
|
||||
935
dist/renderer/i18n/zh-CN.yml
vendored
@@ -1,935 +0,0 @@
|
||||
LANG_DISPLAY_LABEL: 中文
|
||||
ABOUT: 关于
|
||||
OPEN_MAIN_WINDOW: 打开主窗口
|
||||
OPEN_MINI_WINDOW: 打开mini窗口
|
||||
HIDE_MINI_WINDOW: 隐藏mini窗口
|
||||
CHOOSE_DEFAULT_PICBED: 选择默认图床
|
||||
RELOAD_APP: 重启应用
|
||||
UPLOAD_SUCCEED: 上传成功
|
||||
UPLOAD_FAILED: 上传失败
|
||||
UPLOAD_PROGRESS: 上传进度
|
||||
OPERATION_SUCCEED: 操作成功
|
||||
OPERATION_FAILED: 操作失败
|
||||
UPLOADING: 正在上传
|
||||
QUICK_UPLOAD: 快捷上传
|
||||
UPLOAD_BY_CLIPBOARD: 剪贴板图片上传
|
||||
SHOW_PICBED_QRCODE: 生成图床配置二维码
|
||||
PICBED_QRCODE: 图床配置二维码
|
||||
ENABLE: 启用
|
||||
DISABLE: 禁用
|
||||
CONFIG_THING: 配置${c}
|
||||
FIND_NEW_VERSION: 发现新版本
|
||||
NO_MORE_NOTICE: 以后不再提醒
|
||||
SHOW_DEVTOOLS: 打开开发者工具
|
||||
FEEDBACK: 反馈问题
|
||||
CURRENT_PICBED: 当前图床
|
||||
CURRENT_SECOND_PICBED: 当前第二图床
|
||||
START_WATCH_CLIPBOARD: 开始监听剪贴板
|
||||
STOP_WATCH_CLIPBOARD: 停止监听剪贴板
|
||||
OPEN_TOOLBOX: 打开修复工具箱
|
||||
TOOLBOX: 工具箱
|
||||
TOOLBOX_TITLE: 排查 PicList 运行时问题
|
||||
TOOLBOX_SUB_TITLE: 立即扫描以下项目,修复使用问题
|
||||
TOOLBOX_CHECK_CONFIG_FILE_BROKEN: 检查配置文件是否损坏
|
||||
TOOLBOX_CHECK_GALLERY_FILE_BROKEN: 检查相册文件是否损坏
|
||||
TOOLBOX_CHECK_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD: 检查剪贴板图片上传是否存在问题
|
||||
TOOLBOX_CHECK_PROBLEM_WITH_PROXY: 检查代理设置是否正常
|
||||
TOOLBOX_FIX_DONE_NEED_RELOAD: 修复完成,需要重启生效,是否重启
|
||||
TOOLBOX_CANT_AUTO_FIX: 无法自动修复,请自行修复以下问题
|
||||
TOOLBOX_START_SCAN: 开始扫描
|
||||
TOOLBOX_RE_SCAN: 重新扫描
|
||||
TOOLBOX_START_FIX: 开始修复
|
||||
TOOLBOX_SUCCESS_TIPS: 恭喜你,没有检查出问题
|
||||
TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS: 配置文件路径是:${path}
|
||||
TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS: 配置文件已损坏
|
||||
TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS: 相册文件路径是:${path}
|
||||
TOOLBOX_CHECK_GALLERY_FILE_BROKEN_TIPS: 相册文件已损坏
|
||||
TOOLBOX_CHECK_PROXY_SUCCESS_TIPS: 代理设置正常
|
||||
TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS: 无代理设置
|
||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_CORRECT: 代理设置不正确
|
||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_WORKING: 代理设置不可用
|
||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_TIPS: 剪贴板图片临时文件夹路径是:${path}
|
||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS: 剪贴板图片临时文件夹不存在:${path}
|
||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_ERROR_TIPS: 请自行创建文件夹:${path}
|
||||
MANUAL_PAGE_OPEN_TIP: 请选择打开方式
|
||||
MANUAL_PAGE_OPEN_TIP_TITLE: Tips
|
||||
MANUAL_PAGE_OPEN_BY_BROWSER: 浏览器
|
||||
MANUAL_PAGE_OPEN_BY_BUILD_IN: 内置窗口
|
||||
MANUAL_PAGE_OPEN_SETTING_TIP: 选择手册打开方式
|
||||
UPLOAD_AREA: 上传
|
||||
UPLOAD_VIEW_HINT: 点击打开图床设置
|
||||
MANAGE_PAGE: 管理
|
||||
GALLERY: 相册
|
||||
REFRESH: 刷新
|
||||
MANUAL: 手册
|
||||
PICBEDS_SETTINGS: 图床
|
||||
PICLIST_SETTINGS: 设置
|
||||
PLUGIN_SETTINGS: 插件
|
||||
CHOOSE_PICBED: 选择图床
|
||||
COPY_PICBED_CONFIG: 复制图床配置
|
||||
COPY_PICBED_CONFIG_SUCCEED: 复制图床配置成功
|
||||
INPUT: 输入框
|
||||
CANCEL: 取消
|
||||
CONFIRM: 确定
|
||||
RESET_PICBED_CONFIG: 重置
|
||||
CHOOSE_SHOWED_PICBED: 请选择显示的图床
|
||||
CHOOSE_PASTE_FORMAT: 请选择粘贴的格式
|
||||
COPY: 复制
|
||||
DELETE: 删除
|
||||
SELECT_ALL: 全选
|
||||
CHANGE_IMAGE_URL: 修改图片URL
|
||||
CHANGE_IMAGE_URL_SUCCEED: 修改图片URL成功
|
||||
COPY_LINK_SUCCEED: 复制链接成功
|
||||
BATCH_COPY_LINK_SUCCEED: 批量复制链接成功
|
||||
FILE_RENAME: 文件改名
|
||||
OPEN_FILE_PATH: 打开文件路径
|
||||
GALLERY_SYNC_DELETE: 删除云端
|
||||
GALLERY_SYNC_DELETE_NOTICE_TITLE: 通知
|
||||
GALLERY_SYNC_DELETE_NOTICE_SUCCEED: 云端删除成功
|
||||
GALLERY_SYNC_DELETE_NOTICE_FAILED: 云端删除失败
|
||||
GALLERY_CHANGE_URL: 修改
|
||||
GALLERY_SEARCH_FILENAME: 搜索文件名
|
||||
GALLERY_SEARCH_URL: 搜索URL
|
||||
GALLERY_MATCHED: ' 匹配到: '
|
||||
UPLOAD_PAGE_COPY_UPLOAD_API: 复制上传API
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_NAME: 图片处理
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE: 图片处理设置
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST: 跳过处理的文件扩展名列表
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS: '请填写需要跳过处理的文件扩展名列表, 以英文逗号分隔, 如: jpg,png,gif'
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM: 是否添加水印
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE: 水印类型
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT: 文字
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE: 图片
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM: 是否全屏水印
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE: 水印角度
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT: 水印文字
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH: 水印字体路径(第一次需下载字体文件)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO: 水印占原图比例
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR: 水印颜色,请从取色器中选择
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMPATH: 水印图片路径(留空使用默认图片)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION: 水印位置
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF: 是否移除EXIF信息
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_QUALITY: 压缩质量(1-100)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT: 是否转换格式
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT: 转换目的格式
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC: '精细化转换格式, 请输入JSON格式,如: {"png": "jpg"}'
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP: 是否进行垂直翻转
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP: 是否进行水平翻转
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE: 是否按固定尺寸调整图片
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH: 调整尺寸宽度(设为0则按高度等比缩放)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT: 调整尺寸高度(设为0则按宽度等比缩放)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT: 当图片高度小于设定高度时跳过缩放
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH: 当图片宽度小于设定宽度时跳过缩放
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT: 是否按比例调整尺寸,优先级更高
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT: 调整尺寸比例, 输入50表示50%
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE: 是否旋转
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE: 旋转角度
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM: 保存
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_CANCEL: 取消
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP: 上
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM: 下
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT: 左
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT: 右
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT: 左上
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT: 右上
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT: 左下
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT: 右下
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER: 中
|
||||
UPLOAD_SHORT_URL: 短链接
|
||||
UPLOAD_NORMAL_URL: 长链接
|
||||
SETTINGS: 设置
|
||||
SETTINGS_OPEN_CONFIG_FILE: 打开配置文件
|
||||
SETTINGS_MIGRATE_FROM_PICGO: 从PicGo迁移
|
||||
SETTINGS_MIGRATE_FROM_PICGO_TITLE: 通知
|
||||
SETTINGS_MIGRATE_FROM_PICGO_CONTENT: 即将导入PicGo的配置文件和相册, 这将覆盖当前的配置文件和相册, 是否继续?
|
||||
SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: 导入成功, 请重启PicList生效
|
||||
SETTINGS_MIGRATE_FROM_PICGO_FAILED: 导入失败
|
||||
SETTINGS_START_MODE: 启动模式
|
||||
SETTINGS_START_MODE_MINI: mini窗口
|
||||
SETTINGS_START_MODE_MAIN: 主窗口
|
||||
SETTINGS_START_MODE_NO_TRAY: 隐藏托盘
|
||||
SETTINGS_START_MODE_QUIET: 静默启动
|
||||
SETTINGS_CLICK_TO_OPEN: 点击打开
|
||||
SETTINGS_SET_LOG_FILE: 设置日志文件
|
||||
SETTINGS_CLICK_TO_SET: 点击设置
|
||||
SETTINGS_CLICK_TO_CHECK: 点击检查
|
||||
SETTINGS_SET_SHORTCUT: 设置快捷键
|
||||
SETTINGS_CUSTOM_LINK_FORMAT: 自定义链接格式
|
||||
SETTINGS_SET_PROXY_AND_MIRROR: 设置代理和镜像地址
|
||||
SETTINGS_SET_SERVER: 设置Server
|
||||
SETTINGS_CHECK_UPDATE: 检查更新
|
||||
SETTINGS_OPEN_UPDATE_HELPER: 打开更新助手
|
||||
SETTINGS_OPEN: 开
|
||||
SETTINGS_CLOSE: 关
|
||||
SETTINGS_CLOSE_MINI_WINDOW_SYNC: 打开主窗口时关闭mini窗口
|
||||
SETTINGS_CLOSE_MAIN_WINDOW_SYNC: 打开mini窗口时关闭主窗口
|
||||
SETTINGS_LAUNCH_ON_BOOT: 开机自启
|
||||
SETTINGS_RENAME_BEFORE_UPLOAD: 手动重命名
|
||||
SETTINGS_TIMESTAMP_RENAME: 时间戳重命名
|
||||
SETTINGS_ADVANCED_RENAME: 高级重命名
|
||||
SETTINGS_ADVANCED_RENAME_ENABLE: 开启高级重命名
|
||||
SETTINGS_ADVANCED_RENAME_FORMAT: 重命名格式
|
||||
SETTINGS_ENABLE_SECOND_PICBED: 启用第二图床同步上传
|
||||
SETTINGS_SET_SECOND_PICBED: 设置第二图床
|
||||
SETTINGS_OPEN_UPLOAD_TIPS: 开启上传进度提示
|
||||
SETTINGS_OPEN_UPLOAD_RESULT_TIPS: 开启上传结果提示
|
||||
SETTINGS_MINI_WINDOW_ON_TOP: Mini窗口置顶
|
||||
SETTINGS_AUTO_COPY_URL_AFTER_UPLOAD: 上传后自动复制URL
|
||||
SETTINGS_TIPS_PLACEHOLDER_URL: 用占位符 $url 来表示url的位置
|
||||
SETTINGS_TIPS_PLACEHOLDER_FILENAME: 用占位符 $fileName 来表示文件名的位置
|
||||
SETTINGS_TIPS_PLACEHOLDER_EXTNAME: 用占位符 $extName 来表示文件格式的位置
|
||||
SETTINGS_TIPS_SUCH_AS: 如
|
||||
SETTINGS_UPLOAD_PROXY: 上传代理
|
||||
SETTINGS_PLUGIN_INSTALL_PROXY: 插件安装代理
|
||||
SETTINGS_PLUGIN_INSTALL_MIRROR: 插件安装镜像
|
||||
SETTINGS_CURRENT_VERSION: 当前版本
|
||||
SETTINGS_NEWEST_VERSION: 最新版本
|
||||
SETTINGS_GETING: 正在获取中
|
||||
SETTINGS_TIPS_HAS_NEW_VERSION: PicList更新啦,请点击确定重启触发更新
|
||||
SETTINGS_LOG_FILE_PATH: 日志文件路径
|
||||
SETTINGS_CONFIG_FILE_PATH: 配置文件路径
|
||||
SETTINGS_LOG_FILE: 常规日志文件
|
||||
SETTINGS_GUI_LOG_FILE: GUI日志文件
|
||||
SETTINGS_MANAGE_LOG_FILE: 管理日志文件
|
||||
SETTINGS_LOG_LEVEL: 日志记录等级
|
||||
SETTINGS_LOG_FILE_SIZE: 日志文件大小
|
||||
SETTINGS_SET_PICGO_SERVER: 设置PicGo-Server
|
||||
SETTINGS_TIPS_SERVER_NOTICE: 如果你不知道Server的作用,请阅读文档,或者不用修改配置。
|
||||
SETTINGS_ENABLE_SERVER: 是否开启Server
|
||||
SETTINGS_SET_SERVER_HOST: 设置监听地址
|
||||
SETTINGS_SET_SERVER_PORT: 设置监听端口
|
||||
SETTINGS_SET_SERVER_KEY: 设置鉴权密钥
|
||||
SETTINGS_SET_WEB_SERVER: 设置Web服务
|
||||
SETTINGS_TIPS_WEB_SERVER_NOTICE: 如果你不知道Web服务的作用,请阅读文档,或者不用修改配置。
|
||||
SETTINGS_SET_ENABLE_WEB_SERVER: 是否开启Web服务
|
||||
SETTINGS_SET_WEB_SERVER_HOST: 设置Web服务监听地址
|
||||
SETTINGS_SET_WEB_SERVER_PORT: 设置Web服务监听端口
|
||||
SETTINGS_SET_WEB_SERVER_PATH: 设置Web服务路径
|
||||
SETTINGS_TIP_PLACEHOLDER_WEB_HOST: 推荐默认地址:127.0.0.1
|
||||
SETTINGS_TIP_PLACEHOLDER_WEB_PORT: 推荐默认端口:37777
|
||||
SETTINGS_TIP_PLACEHOLDER_HOST: 推荐默认地址:127.0.0.1
|
||||
SETTINGS_TIP_PLACEHOLDER_PORT: 推荐默认端口:36677
|
||||
SETTINGS_TIP_PLACEHOLDER_KEY: 用于接口鉴权, 通过url参数添加'?key=xxx'
|
||||
SETTINGS_SET_SERVER_AES_KEY: 设置接口数据加密密钥
|
||||
SETTINGS_LOG_LEVEL_ALL: 全部-All
|
||||
SETTINGS_LOG_LEVEL_SUCCESS: 成功-Success
|
||||
SETTINGS_LOG_LEVEL_ERROR: 错误-Error
|
||||
SETTINGS_LOG_LEVEL_INFO: 普通-Info
|
||||
SETTINGS_LOG_LEVEL_WARN: 提醒-Warn
|
||||
SETTINGS_LOG_LEVEL_NONE: 不记录日志-None
|
||||
SETTINGS_RESULT: 设置结果
|
||||
SETTINGS_DEFAULT_PICBED: 设置默认图床
|
||||
SETTINGS_SET_DEFAULT_PICBED: 设为默认图床
|
||||
SETTINGS_NOT_CONFIG_OPTIONS: 暂无配置项
|
||||
SETTINGS_USE_BUILTIN_CLIPBOARD_UPLOAD: 使用内置剪贴板上传
|
||||
SETTINGS_CHOOSE_LANGUAGE: 选择语言
|
||||
BUILTIN_CLIPBOARD_TIPS: 使用内置剪贴板函数而不是调用脚本获取剪贴板图片
|
||||
UPLOADER_CONFIG_NAME: 图床配置名
|
||||
UPLOADER_CONFIG_PLACEHOLDER: 请输入配置名称
|
||||
SELECTED_SETTING_HINT: 已选中
|
||||
SETTINGS_MAIN_WINDOW_SIZE: 默认主窗口大小(需重启)
|
||||
SETTINGS_MAIN_WINDOW_SIZE_WIDTH: 默认主窗口宽度
|
||||
SETTINGS_MAIN_WINDOW_WIDTH_HINT: '默认宽度: 1200'
|
||||
SETTINGS_MAIN_WINDOW_SIZE_HEIGHT: 默认主窗口高度
|
||||
SETTINGS_MAIN_WINDOW_HEIGHT_HINT: '默认高度: 800'
|
||||
SETTINGS_RAW_PICGO_SIZE: 原PicGo大小
|
||||
SETTINGS_CUSTOM_MINI_ICON_PATH: 自定义Mini窗口图标路径
|
||||
SETTINGS_CUSTOM_MINI_ICON: 是否自定义Mini窗口图标
|
||||
SETTINGS_COMPRESS_AND_WATERMARK: 设置图片水印和压缩-格式转换等参数
|
||||
SETTINGS_SYNC_DELETE_CLOUD: 相册内删除时同步删除云端文件
|
||||
SETTINGS_ISHIDEDOCK: 是否隐藏dock图标
|
||||
SETTINGS_ISHIDEDOCK_TIPS: 不支持同时隐藏dock和托盘
|
||||
SETTINGS_ENCODE_OUTPUT_URL: 输出(复制) URL 时进行转义
|
||||
SETTINGS_WATCH_CLIPBOARD: 软件启动时自动监听剪贴板上传
|
||||
SETTINGS_SHORT_URL: 使用短链接
|
||||
SETTINGS_SHORT_URL_SERVER: 短链接服务
|
||||
SETTINGS_SHORT_URL_C1N_TOKEN: C1N Token
|
||||
SETTINGS_SHORT_URL_YOURLS_DOMAIN: YOURLS域名
|
||||
SETTINGS_SHORT_URL_YOURLS_SIGNATURE: YOURLS signature
|
||||
SETTINGS_SHORT_URL_CF_WORKER_HOST: Cloudflare Worker域名
|
||||
SETTINGS_SHORT_SINK_DOMAIN: sink域名
|
||||
SETTINGS_SHORT_SINK_TOKEN: sink token
|
||||
SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: 上传后删除本地文件
|
||||
SETTINGS_SYNC_CONFIG: 设置配置同步
|
||||
SETTINGS_SYNC_CONFIG_TITLE: 同步设置
|
||||
SETTINGS_SYNC_CONFIG_NOTE: 同步的文件为配置文件
|
||||
SETTINGS_SYNC_CONFIG_SELECT_TYPE: 选择同步方式
|
||||
SETTINGS_SYNC_CONFIG_SELECT_FILE: 选择同步文件
|
||||
SETTINGS_SYNC_CONFIG_SELECT_CONFIG: 仅配置文件
|
||||
SETTINGS_SYNC_CONFIG_SELECT_GALLERY: 仅相册文件
|
||||
SETTINGS_SYNC_CONFIG_SELECT_BOTH: 配置文件和相册文件
|
||||
SETTINGS_SYNC_CONFIG_GITEA_HOST: Gitea 网址
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: GitHub用户名
|
||||
SETTINGS_SYNC_CONFIG_GITEA_USERNAME: Gitea用户名
|
||||
SETTINGS_SYNC_CONFIG_GITEE_USERNAME: Gitee用户名
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_REPO: 仓库(私有)
|
||||
SETTINGS_SYNC_CONFIG_GITEA_REPO: 仓库
|
||||
SETTINGS_SYNC_CONFIG_GITEE_REPO: 仓库路径名
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: GitHub分支
|
||||
SETTINGS_SYNC_CONFIG_GITEA_BRANCH: Gitea分支
|
||||
SETTINGS_SYNC_CONFIG_GITEE_BRANCH: Gitee分支
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: GitHub Token
|
||||
SETTINGS_SYNC_CONFIG_GITEA_TOKEN: Gitea Token
|
||||
SETTINGS_SYNC_CONFIG_GITEE_TOKEN: Gitee Token
|
||||
SETTINGS_SYNC_CONFIG_PROXY: 代理
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: 请输入GitHub用户名
|
||||
SETTINGS_SYNC_CONFIG_GITEA_USERNAME_PLACEHOLDER: 请输入Gitea用户名
|
||||
SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: 请输入Gitee用户名
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: 请输入GitHub仓库名
|
||||
SETTINGS_SYNC_CONFIG_GITEA_REPO_PLACEHOLDER: 请输入Gitea仓库名
|
||||
SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: 请输入Gitee仓库名
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: 请输入GitHub分支名
|
||||
SETTINGS_SYNC_CONFIG_GITEA_BRANCH_PLACEHOLDER: 请输入Gitea分支名
|
||||
SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: 请输入Gitee分支名
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: 请输入GitHub Token
|
||||
SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: 请输入Gitea Token
|
||||
SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: 请输入Gitee Token
|
||||
SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: 请输入代理地址
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT: WebDAV端点
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER: 请输入WebDAV端点URL
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME: 用户名
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER: 请输入WebDAV用户名
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD: 密码
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER: 请输入WebDAV密码
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE: 认证类型
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED: 启用SSL/HTTPS
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH: 保存路径
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER: 请选择同步文件的保存路径
|
||||
SETTINGS_UP_DOWN_DESC: 上传下载配置文件
|
||||
SETTINGS_SYNC_UPLOAD: 上传
|
||||
SETTINGS_SYNC_DOWNLOAD: 下载
|
||||
SETTINGS_SYNC_UPLOAD_ALL: 上传所有
|
||||
SETTINGS_SYNC_DOWNLOAD_ALL: 下载所有
|
||||
SETTINGS_SYNC_UPLOAD_SUCCESS: 上传成功
|
||||
SETTINGS_SYNC_UPLOAD_FAILED: 上传失败
|
||||
SETTINGS_SYNC_DOWNLOAD_SUCCESS: 下载成功
|
||||
SETTINGS_SYNC_DOWNLOAD_FAILED: 下载失败
|
||||
SETTINGS_SYNC_COMMON_CONFIG: 通用配置
|
||||
SETTINGS_SYNC_MANAGE_CONFIG: 管理配置
|
||||
SETTINGS_AUTO_IMPORT: 管理页面自动导入配置
|
||||
SETTINGS_AUTO_IMPORT_SELECT_PICBED: 选择需要开启自动导入的图床
|
||||
SETTINGS_TAB_SYSTEM: 系统设置
|
||||
SETTINGS_TAB_SYNC_CONFIG: 同步与配置
|
||||
SETTINGS_TAB_UPLOAD: 上传设置
|
||||
SETTINGS_TAB_ADVANCED: 高级设置
|
||||
SETTINGS_TAB_UPDATE: 更新
|
||||
SHORTCUT_NAME: 快捷键名称
|
||||
SHORTCUT_BIND: 快捷键绑定
|
||||
SHORTCUT_STATUS: 状态
|
||||
SHORTCUT_ENABLED: 已启用
|
||||
SHORTCUT_DISABLED: 已禁用
|
||||
SHORTCUT_SOURCE: 来源
|
||||
SHORTCUT_HANDLE: 操作
|
||||
SHORTCUT_ENABLE: 启用
|
||||
SHORTCUT_DISABLE: 禁用
|
||||
SHORTCUT_EDIT: 编辑
|
||||
SHORTCUT_CHANGE_UPLOAD: 修改上传快捷键
|
||||
WAIT_TO_UPLOAD: 等待上传
|
||||
ALREADY_UPLOAD: 已上传
|
||||
DRAG_FILE_TO_HERE: 将文件拖拽到此处,或
|
||||
CLICK_TO_UPLOAD: 点击上传
|
||||
LINK_FORMAT: 链接格式
|
||||
CLIPBOARD_PICTURE: 剪贴板
|
||||
TIPS_DRAG_VALID_PICTURE_OR_URL: 请拖入合法的图片文件或者图片URL地址
|
||||
TIPS_INPUT_URL: 请输入URL
|
||||
TIPS_HTTP_PREFIX: http://或者https://开头
|
||||
TIPS_INPUT_VALID_URL: 请输入合法的URL
|
||||
PLUGIN_SEARCH_PLACEHOLDER: 搜索npm上的PicGo插件,或者点击上方按钮查看优秀插件列表
|
||||
PLUGIN_INSTALL: 安装
|
||||
PLUGIN_INSTALLING: 安装中
|
||||
PLUGIN_INSTALLED: 已安装
|
||||
PLUGIN_DOING_SOMETHING: 进行中
|
||||
PLUGIN_LIST: 插件列表
|
||||
PLUGIN_IMPORT_LOCAL: 导入本地插件
|
||||
PLUGIN_UPDATE_ALL: 更新全部插件
|
||||
TIPS_REMOVE_LINK: 此操作将把该图片移出相册, 是否继续?
|
||||
TIPS_WILL_REMOVE_CHOOSED_IMAGES: 将在相册中移除刚才选中的 ${m} 张图片,是否继续?
|
||||
TIPS_MUST_CONTAINS_URL: 必须含有$url 或 $fileName 或 $extName
|
||||
TIPS_NETWORK_ERROR: 网络错误暂时无法获取
|
||||
TIPS_NEED_RELOAD: 需要重启生效
|
||||
TIPS_PLEASE_CHOOSE_LOG_LEVEL: 请选择日志记录等级
|
||||
TIPS_SET_SUCCEED: 设置成功
|
||||
TIPS_RESET_SUCCEED: 重置成功
|
||||
TIPS_PLUGIN_NOT_GUI_IMPLEMENT: 该插件未对可视化界面进行优化, 是否继续安装?
|
||||
TIPS_GET_PLUGIN_LIST_FAILED: 获取插件列表失败
|
||||
MANAGE_SETTING_TITLE: 管理页面设置
|
||||
MANAGE_SETTING_ISAUTOREFRESH_TITLE: 每次进入新目录时,是否自动刷新文件列表
|
||||
MANAGE_SETTING_ISAUTOREFRESH_TIPS: 仅对不分页模式有效,默认在加载过一次后自动缓存到数据库来加快下次加载速度
|
||||
MANAGE_SETTING_CLEAR_CACHE_TITLE: '清空文件列表缓存数据库 已占用:'
|
||||
MANAGE_SETTING_CLEAR_CACHE_FREE_TITLE: '剩余可用:'
|
||||
MANAGE_SETTING_CLEAR_CACHE_TIPS: 清空后下次进入新目录时将会重新加载文件列表
|
||||
MANAGE_SETTING_CLEAR_CACHE_PROMPT: 确定要清空文件列表缓存数据库吗?
|
||||
MANAGE_SETTING_CLEAR_CACHE_BUTTON: 清空
|
||||
MANAGE_SETTING_ISSHOWTHUMBNAIL_TITLE: 图片显示为原图而非默认文件格式图标(需要存储桶可公开访问)
|
||||
MANAGE_SETTING_ISUSEPRESIGNEDURL_TITLE: 使用预签名URL预览图片
|
||||
MANAGE_SETTING_ISSHOWLIST_TITLE: 文件列表默认显示方式
|
||||
MANAGE_SETTING_ISSHOWLIST_ON: 列表
|
||||
MANAGE_SETTING_ISSHOWLIST_OFF: 卡片
|
||||
MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TITLE: 为自定义域名开启强制HTTPS
|
||||
MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TIPS: 开启后, 复制链接等操作将会自动为自定义域名添加https前缀
|
||||
MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TITLE: 上传时保留目录结构
|
||||
MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TIPS: 关闭后会将所有文件展开到指定目录下
|
||||
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A: 下载
|
||||
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_B: 文件
|
||||
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C: 时保留目录结构
|
||||
MANAGE_SETTING_ISDOWNLOADFOLDERKEEPDIRSTRUCTURE_TITLE_D: 文件夹
|
||||
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS: 开启后,下载时会保留原始目录结构
|
||||
MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TITLE: 最大同时下载文件数(1-9999)
|
||||
MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS: 腾讯云由于后端实现不同,该设置不生效
|
||||
MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_INPUT_TIPS: 请输入最大同时下载文件数
|
||||
MANAGE_SETTING_ISIGNORECASE_TITLE: 文件搜索时,是否忽略大小写
|
||||
MANAGE_SETTING_ISIGNORECASE_TIPS: 开启后,搜索时会忽略大小写
|
||||
MANAGE_SETTING_TIMESTAMPRENAME_TITLE: 上传文件时间戳重命名--(优先级最高)
|
||||
MANAGE_SETTING_TIMESTAMPRENAME_TIPS: 开启后,上传文件时会自动重命名为时间戳
|
||||
MANAGE_SETTING_RANDOMSTRINGRENAME_TITLE: 上传文件随机字符串重命名--(优先级中)
|
||||
MANAGE_SETTING_RANDOMSTRINGRENAME_TIPS: 随机字符串长度为20
|
||||
MANAGE_SETTING_CUSTOMRENAME_TITLE: 上传文件自定义重命名--(优先级最低)
|
||||
MANAGE_SETTING_CUSTOMRENAME_TIPS: 请填写自定义重命名格式
|
||||
MANAGE_SETTING_CUSTOM_PATTERN_TITLE: 自定义重命名格式,占位符请参考下表,可自由组合
|
||||
MANAGE_SETTING_CUSTOM_PATTERN_TIPS: 请填写自定义重命名格式
|
||||
MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TITLE: 占位符
|
||||
MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TIPS: 描述
|
||||
MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TITLE: 预签名URL过期时间(单位:秒)
|
||||
MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS: 请填写预签名URL过期时间
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_TITLE: 选择默认复制的链接格式
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN: Markdown
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN_WITH_LINK: Markdown(带链接)
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_RAWURL: 原始链接
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_HTML: HTML格式
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_BBCODE: BBCode格式
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_CUSTOM: 自定义格式
|
||||
MANAGE_SETTING_CUSTOM_COPY_FORMAT_TITLE: 自定义链接格式($url为链接,$fileName为文件名)
|
||||
MANAGE_SETTING_CUSTOM_COPY_FORMAT_TIPS: 请填写自定义链接格式
|
||||
MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TITLE: 选择下载目录
|
||||
MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TIPS: 系统默认下载目录
|
||||
MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON: 选择目录
|
||||
MANAGE_SETTING_COPY_MESSAGE: 已复制
|
||||
MANAGE_SETTING_CLEAR_CACHE_SUCCESS: 清除成功
|
||||
MANAGE_SETTING_CLEAR_CACHE_FAILED: 清除失败
|
||||
MANAGE_SETTING_ISENCODEURL_TITLE: 复制链接时进行URL编码
|
||||
MANAGE_SETTING_ISENCODEURL_TIPS: 根据平台选择是否开启
|
||||
MANAGE_NO_DATA: 暂无数据
|
||||
MANAGE_MAIN_PAGE_NEW_BUCKET: 新建存储桶
|
||||
MANAGE_MAIN_PAGE_BACK_TO_HOME: 返回首页
|
||||
MANAGE_MAIN_PAGE_SWITCH_PICBED: 切换图床
|
||||
MANAGE_MAIN_PAGE_SETTING: 设置
|
||||
MANAGE_MAIN_PAGE_SUBMIT: 提交
|
||||
MANAGE_MAIN_PAGE_TIPS: 提示
|
||||
MANAGE_MAIN_PAGE_TIPS_SUCCESS: 创建成功
|
||||
MANAGE_MAIN_PAGE_TIPS_FAILED: 创建失败
|
||||
MANAGE_MAIN_PAGE_BUCKET: 存储桶
|
||||
MANAGE_MAIN_PAGE_GALLERY: 相册
|
||||
MANAGE_MAIN_PAGE_REPOSITORY: 仓库
|
||||
MANAGE_CONSTANT_BASE_RULE: 请输入
|
||||
MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_A: 请输入每页显示数量
|
||||
MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_B: 每页显示数量必须为数字
|
||||
MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_C: 每页显示数量必须在20-1000之间
|
||||
MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_A: 请输入别名, 该配置的唯一标识
|
||||
MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_B: 别名只能包含中文、英文、数字、下划线和中划线
|
||||
MANAGE_CONSTANT_ALIAS_TOOLTIP: 别名只能包含中文、英文、数字、下划线和中划线
|
||||
MANAGE_CONSTANT_ITEMS_PAGE_TOOLTIP: 每页显示数量必须在20-1000之间
|
||||
MANAGE_CONSTANT_PAGING_TOOLTIP: 关闭分页时,目录列表将使用数据库缓存以优化性能
|
||||
MANAGE_CONSTANT_BUCKET_NAME_TOOLTIP: 英文逗号分隔,如:bucket1,bucket2,bucket3,和起始目录顺序一一对应
|
||||
MANAGE_CONSTANT_BASE_DIR_TOOLTIP: 英文逗号分隔,如:/dir1,/dir2,/dir3, 和存储桶顺序一一对应
|
||||
MANAGE_CONSTANT_IS_AUTO_CUSTOM_URL_TOOLTIP: 开启时,将自动获取存储桶绑定的域名,关闭时可手动填写
|
||||
MANAGE_CONSTANT_SMMS_ALIAS_DESC: 配置别名-必需
|
||||
MANAGE_CONSTANT_SMMS_ALIAS_PLACEHOLDER: 该配置的唯一标识
|
||||
MANAGE_CONSTANT_SMMS_TOKEN_DESC: Token-必需
|
||||
MANAGE_CONSTANT_SMMS_TOKEN_PLACEHOLDER: 请填写Token
|
||||
MANAGE_CONSTANT_SMMS_PAGING_DESC: 是否开启分页
|
||||
MANAGE_CONSTANT_SMMS_EXPLAIN: 大陆地区请访问备用域名https://smms.app, 请勿大批量上传图片,否则API接口会被限制
|
||||
MANAGE_CONSTANT_SMMS_REFER_TEXT: '配置教程请参考: '
|
||||
MANAGE_CONSTANT_QINIU_NAME: 七牛云
|
||||
MANAGE_CONSTANT_QINIU_ALIAS_DESC: 配置别名-必需
|
||||
MANAGE_CONSTANT_QINIU_ALIAS_PLACEHOLDER: 该配置的唯一标识
|
||||
MANAGE_CONSTANT_QINIU_ACCESS_KEY_DESC: accessKey-必需
|
||||
MANAGE_CONSTANT_QINIU_ACCESS_KEY_PLACEHOLDER: 请填写accessKey
|
||||
MANAGE_CONSTANT_QINIU_SECRET_KEY_DESC: secretKey-必需
|
||||
MANAGE_CONSTANT_QINIU_SECRET_KEY_PLACEHOLDER: 请填写secretKey
|
||||
MANAGE_CONSTANT_QINIU_BUCKET_DESC: 空间名-可选
|
||||
MANAGE_CONSTANT_QINIU_BUCKET_PLACEHOLDER: 英文逗号分隔,例如:bucket1,bucket2
|
||||
MANAGE_CONSTANT_QINIU_BASE_DIR_DESC: 起始目录-可选
|
||||
MANAGE_CONSTANT_QINIU_BASE_DIR_PLACEHOLDER: 英文逗号分隔,例如:/dir1,/dir2
|
||||
MANAGE_CONSTANT_QINIU_IS_AUTO_CUSTOM_URL_DESC: 是否自动获取绑定域名
|
||||
MANAGE_CONSTANT_QINIU_PAGING_DESC: 是否开启分页
|
||||
MANAGE_CONSTANT_QINIU_ITEMS_PAGE_DESC: 每页显示数量
|
||||
MANAGE_CONSTANT_QINIU_EXPLAIN: 空间名和起始目录配置时可通过英文逗号分隔设置,顺序必须一致,逗号间留空或缺失项使用默认值
|
||||
MANAGE_CONSTANT_QINIU_REFER_TEXT: '配置教程请参考: '
|
||||
MANAGE_CONSTANT_GITHUB_ALIAS_DESC: 配置别名-必需
|
||||
MANAGE_CONSTANT_GITHUB_ALIAS_PLACEHOLDER: 该配置的唯一标识
|
||||
MANAGE_CONSTANT_GITHUB_TOKEN_DESC: Token-必需
|
||||
MANAGE_CONSTANT_GITHUB_TOKEN_PLACEHOLDER: 请填写Token
|
||||
MANAGE_CONSTANT_GITHUB_TOKEN_TIPS: 请提供具有完整repo权限的token,否则部分功能可能无法使用
|
||||
MANAGE_CONSTANT_GITHUB_USER_DESC: 用户名-必需
|
||||
MANAGE_CONSTANT_GITHUB_USER_PLACEHOLDER: 请填写用户名
|
||||
MANAGE_CONSTANT_GITHUB_USER_RULE_MESSAGE: 用户名
|
||||
MANAGE_CONSTANT_GITHUB_PROXY_DESC: 代理地址-可选
|
||||
MANAGE_CONSTANT_GITHUB_PROXY_PLACEHOLDER: 例如:http://127.0.0.1:1080
|
||||
MANAGE_CONSTANT_GITHUB_PROXY_TIPS: 如果访问速度较慢,可以尝试配置代理
|
||||
MANAGE_CONSTANT_GITHUB_PAGING_DESC: 是否开启分页
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_DESC: CDN加速域名-可选
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_PLACEHOLDER: 支持使用{username}、{repo}、{branch}和{path}作为替换占位符,用于适配不同仓库和分支
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_TIPS: '例如: https://cdn.staticaly.com/gh/{username}/{repo}@{branch}/{path}'
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_A: 加速域名请以http://或https://开头
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_B: 加速域名中的大括号必须成对出现
|
||||
MANAGE_CONSTANT_GITHUB_EXPLAIN: API调用有每小时上限,此外不支持上传超过100M的文件
|
||||
MANAGE_CONSTANT_GITHUB_REFER_TEXT: '配置教程请参考: '
|
||||
MANAGE_CONSTANT_ALIYUN_NAME: 阿里云
|
||||
MANAGE_CONSTANT_ALIYUN_ALIAS_DESC: 配置别名-必需
|
||||
MANAGE_CONSTANT_ALIYUN_ALIAS_PLACEHOLDER: 该配置的唯一标识
|
||||
MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_ID_DESC: accessKeyId-必需
|
||||
MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_DESC: accessKeySecret-必需
|
||||
MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_PLACEHOLDER: 请填写accessKeySecret
|
||||
MANAGE_CONSTANT_ALIYUN_BUCKET_DESC: 存储桶名-可选
|
||||
MANAGE_CONSTANT_ALIYUN_BUCKET_PLACEHOLDER: 英文逗号分隔,例如:bucket1,bucket2
|
||||
MANAGE_CONSTANT_ALIYUN_BASE_DIR_DESC: 起始目录-可选
|
||||
MANAGE_CONSTANT_ALIYUN_BASE_DIR_PLACEHOLDER: 英文逗号分隔,例如:/dir1,/dir2
|
||||
MANAGE_CONSTANT_ALIYUN_IS_AUTO_CUSTOM_URL_DESC: 是否自动获取绑定域名
|
||||
MANAGE_CONSTANT_ALIYUN_PAGING_DESC: 是否开启分页
|
||||
MANAGE_CONSTANT_ALIYUN_ITEMS_PAGE_DESC: 每页显示数量
|
||||
MANAGE_CONSTANT_ALIYUN_EXPLAIN: 存储桶名和起始目录配置时可通过英文逗号分隔不同存储桶的设置,顺序必须一致,逗号间留空或缺失项使用默认值
|
||||
MANAGE_CONSTANT_ALIYUN_REFER_TEXT: '配置教程请参考: '
|
||||
MANAGE_CONSTANT_TENCENT_NAME: 腾讯云
|
||||
MANAGE_CONSTANT_TENCENT_ALIAS_DESC: 配置别名-必需
|
||||
MANAGE_CONSTANT_TENCENT_ALIAS_PLACEHOLDER: 该配置的唯一标识
|
||||
MANAGE_CONSTANT_TENCENT_SECRET_ID_DESC: secretId-必需
|
||||
MANAGE_CONSTANT_TENCENT_SECRET_ID_PLACEHOLDER: 请填写secretId
|
||||
MANAGE_CONSTANT_TENCENT_SECRET_KEY_DESC: secretKey-必需
|
||||
MANAGE_CONSTANT_TENCENT_SECRET_KEY_PLACEHOLDER: 请填写secretKey
|
||||
MANAGE_CONSTANT_TENCENT_APPID_DESC: appId-必需
|
||||
MANAGE_CONSTANT_TENCENT_APPID_PLACEHOLDER: 请填写appId
|
||||
MANAGE_CONSTANT_TENCENT_APPID_TOOLTIP: 例如:1250000000
|
||||
MANAGE_CONSTANT_TENCENT_BUCKET_DESC: 存储桶名-可选(注意包含AppId)
|
||||
MANAGE_CONSTANT_TENCENT_BUCKET_PLACEHOLDER: 英文逗号分隔,例如:bucket1-1250000000,bucket2-1250000000
|
||||
MANAGE_CONSTANT_TENCENT_BASE_DIR_DESC: 起始目录-可选
|
||||
MANAGE_CONSTANT_TENCENT_BASE_DIR_PLACEHOLDER: 英文逗号分隔,例如:/dir1,/dir2
|
||||
MANAGE_CONSTANT_TENCENT_IS_AUTO_CUSTOM_URL_DESC: 是否自动获取绑定域名
|
||||
MANAGE_CONSTANT_TENCENT_PAGING_DESC: 是否开启分页
|
||||
MANAGE_CONSTANT_TENCENT_ITEMS_PAGE_DESC: 每页显示数量
|
||||
MANAGE_CONSTANT_TENCENT_EXPLAIN: 存储桶名和起始目录配置时可通过英文逗号分隔不同存储桶的设置,顺序必须一致,逗号间留空或缺失项使用默认值
|
||||
MANAGE_CONSTANT_TENCENT_REFER_TEXT: '配置教程请参考: '
|
||||
MANAGE_CONSTANT_UPYUN_NAME: 又拍云
|
||||
MANAGE_CONSTANT_UPYUN_ALIAS_DESC: 配置别名-必需
|
||||
MANAGE_CONSTANT_UPYUN_ALIAS_PLACEHOLDER: 该配置的唯一标识
|
||||
MANAGE_CONSTANT_UPYUN_BUCKET_DESC: 服务名-必需
|
||||
MANAGE_CONSTANT_UPYUN_BUCKET_PLACEHOLDER: 对应其它对象存储的存储桶名
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_DESC: 操作员名-必需
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_PLACEHOLDER: 推荐使用具有读取、写入和删除完整权限的操作员
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_RULE: 操作员
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_DESC: 操作员密码-必需
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_PLACEHOLDER: 请填写密码
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_RULE: 操作员密码
|
||||
MANAGE_CONSTANT_UPYUN_BASE_DIR_DESC: 起始目录-可选
|
||||
MANAGE_CONSTANT_UPYUN_BASE_DIR_PLACEHOLDER: 读取文件时的初始目录
|
||||
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_DESC: 加速域名-必需
|
||||
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_PLACEHOLDER: 请以http://或https://开头
|
||||
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_A: 加速域名不能为空
|
||||
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_B: 自定义域名请以http://或https://开头
|
||||
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_DESC: 防盗链密钥-可选
|
||||
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_PLACEHOLDER: 请填写防盗链密钥
|
||||
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_TOOLTIP: 如果不填写,默认不启用防盗链
|
||||
MANAGE_CONSTANT_UPYUN_EXPIRE_TIME_DESC: 防盗链过期时间(秒)-可选
|
||||
MANAGE_CONSTANT_UPYUN_PAGING: 是否开启分页
|
||||
MANAGE_CONSTANT_UPYUN_ITEMS_PAGE: 每页显示数量
|
||||
MANAGE_CONSTANT_UPYUN_EXPLAIN: 又拍云图床务必填写加速域名,否则无法正常使用
|
||||
MANAGE_CONSTANT_UPYUN_REFER_TEXT: '配置教程请参考: '
|
||||
MANAGE_CONSTANT_IMGUR_NAME: Imgur
|
||||
MANAGE_CONSTANT_IMGUR_ALIAS_DESC: 配置别名-必需
|
||||
MANAGE_CONSTANT_IMGUR_ALIAS_PLACEHOLDER: 该配置的唯一标识
|
||||
MANAGE_CONSTANT_IMGUR_USERNAME_DESC: imgur用户名-必需
|
||||
MANAGE_CONSTANT_IMGUR_USERNAME_PLACEHOLDER: 请填写imgur用户名
|
||||
MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_DESC: access token-必需
|
||||
MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_PLACEHOLDER: 请填写access token
|
||||
MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_TOOLTIP: 不是clientID,请参考配置教程
|
||||
MANAGE_CONSTANT_IMGUR_PROXY_DESC: 代理-可选
|
||||
MANAGE_CONSTANT_IMGUR_PROXY_PLACEHOLDER: 例如:http://127.0.0.1:1080
|
||||
MANAGE_CONSTANT_IMGUR_PROXY_TOOLTIP: 大陆地区请使用代理,否则无法正常使用
|
||||
MANAGE_CONSTANT_IMGUR_EXPLAIN: 大陆地区请使用代理,API调用存在限制,请注意使用频率
|
||||
MANAGE_CONSTANT_IMGUR_REFER_TEXT: '配置教程请参考: '
|
||||
MANAGE_CONSTANT_S3_NAME: S3兼容云
|
||||
MANAGE_CONSTANT_S3_ALIAS_DESC: 配置别名-必需
|
||||
MANAGE_CONSTANT_S3_ALIAS_PLACEHOLDER: 该配置的唯一标识
|
||||
MANAGE_CONSTANT_S3_ACCESS_KEY_ID_DESC: accessKeyId-必需
|
||||
MANAGE_CONSTANT_S3_ACCESS_KEY_ID_PLACEHOLDER: 请填写accessKeyId
|
||||
MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_DESC: secretAccessKey-必需
|
||||
MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_PLACEHOLDER: 请填写secretAccessKey
|
||||
MANAGE_CONSTANT_S3_ENDPOINT_DESC: endpoint-可选
|
||||
MANAGE_CONSTANT_S3_ENDPOINT_PLACEHOLDER: 例如:s3.us-east-1.amazonaws.com
|
||||
MANAGE_CONSTANT_S3_ENDPOINT_TOOLTIP: 如果不填写,默认访问 AWS S3,请提供根API endpoint
|
||||
MANAGE_CONSTANT_S3_SSLENABLED_DESC: 使用HTTPS连接
|
||||
MANAGE_CONSTANT_S3_SSLENABLED_TOOLTIP: 如果您的平台不支持,请关闭该选项
|
||||
MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_DESC: 启用 S3 Path style
|
||||
MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_TOOLTIP: 例如使用 minio 时需要启用
|
||||
MANAGE_CONSTANT_S3_PROXY_DESC: 代理-可选
|
||||
MANAGE_CONSTANT_S3_PROXY_PLACEHOLDER: 例如:http://127.0.0.1:1080
|
||||
MANAGE_CONSTANT_S3_PROXY_TOOLTIP: 如果部分平台大陆地区无法访问,请使用代理
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_DESC: 上传文件的权限
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PRIVATE: 私有
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ: 公共读
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ_WRITE: 公共读写
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AUTHENTICATED_READ: 授权读
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_READ: 桶所有者读
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_FULL_CONTROL: 桶所有者完全控制
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AWS_EXEC_READ: AWS执行读
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_TOOLTIP: 上传文件的权限,可选值:private、public-read、public-read-write、authenticated-read、bucket-owner-read、bucket-owner-full-control、aws-exec-read
|
||||
MANAGE_CONSTANT_S3_BUCKET_DESC: 存储桶名-可选
|
||||
MANAGE_CONSTANT_S3_BUCKET_PLACEHOLDER: 英文逗号分隔,例如:bucket1,bucket2
|
||||
MANAGE_CONSTANT_S3_BASE_DIR_DESC: 起始目录-可选
|
||||
MANAGE_CONSTANT_S3_BASE_DIR_PLACEHOLDER: 英文逗号分隔,例如:/dir1,/dir2
|
||||
MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_DESC: 是否使用Doge Cloud
|
||||
MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_TOOLTIP: 开启后,将使用Doge Cloud的API
|
||||
MANAGE_CONSTANT_S3_PAGING_DESC: 是否开启分页
|
||||
MANAGE_CONSTANT_S3_ITEMS_PAGE_DESC: 每页显示数量
|
||||
MANAGE_CONSTANT_S3_EXPLAIN: 存储桶名和起始目录配置时可通过英文逗号分隔不同存储桶的设置,顺序必须一致,逗号间留空或缺失项使用默认值
|
||||
MANAGE_CONSTANT_S3_REFER_TEXT: '配置教程请参考: '
|
||||
MANAGE_CONSTANT_WEBDAV_ALIAS_DESC: 配置别名-必需
|
||||
MANAGE_CONSTANT_WEBDAV_ALIAS_PLACEHOLDER: 该配置的唯一标识
|
||||
MANAGE_CONSTANT_WEBDAV_HOST_DESC: 地址-必需
|
||||
MANAGE_CONSTANT_WEBDAV_HOST_PLACEHOLDER: 例如:https://example.com/dav
|
||||
MANAGE_CONSTANT_WEBDAV_HOST_TOOLTIP: 请填写完整的WebDAV地址
|
||||
MANAGE_CONSTANT_WEBDAV_USERNAME_DESC: 用户名-必需
|
||||
MANAGE_CONSTANT_WEBDAV_USERNAME_PLACEHOLDER: 请填写用户名
|
||||
MANAGE_CONSTANT_WEBDAV_BUCKET_DESC: 特殊配置
|
||||
MANAGE_CONSTANT_WEBDAV_BUCKET_PLACEHOLDER: 例如:bucket1
|
||||
MANAGE_CONSTANT_WEBDAV_BUCKET_TOOLTIP: 此处不可修改,仅为软件兼容性考虑
|
||||
MANAGE_CONSTANT_WEBDAV_PASSWORD_DESC: 密码-必需
|
||||
MANAGE_CONSTANT_WEBDAV_PASSWORD_PLACEHOLDER: 请填写密码
|
||||
MANAGE_CONSTANT_WEBDAV_BASE_DIR_DESC: 起始目录-可选
|
||||
MANAGE_CONSTANT_WEBDAV_BASE_DIR_PLACEHOLDER: 例如:/dir1
|
||||
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_DESC: 自定义域名-可选
|
||||
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_PLACEHOLDER: 例如:https://example.com
|
||||
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_TOOLTIP: 如果您的WebDAV服务器支持自定义域名,请填写
|
||||
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE: 自定义域名请以http://或https://开头
|
||||
MANAGE_CONSTANT_WEBDAV_WEB_PATH: 网址拼接用起始路径
|
||||
MANAGE_CONSTANT_WEBDAV_WEB_PATH_PLACEHOLDER: 例如:test/ttc
|
||||
MANAGE_CONSTANT_WEBDAV_WEB_PATH_TOOLTIP: 用于拼接网址
|
||||
MANAGE_CONSTANT_WEBDAV_PROXY_DESC: 代理-可选
|
||||
MANAGE_CONSTANT_WEBDAV_PROXY_PLACEHOLDER: 例如:http://127.0.0.1:1080
|
||||
MANAGE_CONSTANT_WEBDAV_PROXY_TOOLTIP: 如果需要特殊网络环境才能访问,请使用代理
|
||||
MANAGE_CONSTANT_WEBDAV_SSL_DESC: 使用HTTPS连接
|
||||
MANAGE_CONSTANT_WEBDAV_SSL_TOOLTIP: 根据WebDAV服务器的配置,如果您的服务器不支持HTTPS,请关闭该选项
|
||||
MANAGE_CONSTANT_WEBDAV_AUTH_TYPE_DESC: 认证类型
|
||||
MANAGE_CONSTANT_WEBDAV_EXPLAIN: WebDAV配置
|
||||
MANAGE_CONSTANT_WEBDAV_REFER_TEXT: '配置教程请参考: '
|
||||
MANAGE_CONSTANT_LOCAL_NAME: 本地存储
|
||||
MANAGE_CONSTANT_LOCAL_ALIAS_DESC: 配置别名-必需
|
||||
MANAGE_CONSTANT_LOCAL_ALIAS_PLACEHOLDER: 该配置的唯一标识
|
||||
MANAGE_CONSTANT_LOCAL_BASE_DIR_DESC: 起始目录-必需
|
||||
MANAGE_CONSTANT_LOCAL_BASE_DIR_PLACEHOLDER: 请填写起始目录
|
||||
MANAGE_CONSTANT_LOCAL_CUSTOM_URL_DESC: 自定义域名-可选
|
||||
MANAGE_CONSTANT_LOCAL_CUSTOM_URL_PLACEHOLDER: 例如:https://example.com
|
||||
MANAGE_CONSTANT_LOCAL_CUSTOM_URL_TOOLTIP: 如果您的本地存储支持自定义域名,请填写
|
||||
MANAGE_CONSTANT_LOCAL_WEB_PATH: 网址拼接用起始路径
|
||||
MANAGE_CONSTANT_LOCAL_WEB_PATH_PLACEHOLDER: 例如:test/ttc
|
||||
MANAGE_CONSTANT_LOCAL_WEB_PATH_TOOLTIP: 用于拼接网址
|
||||
MANAGE_CONSTANT_LOCAL_EXPLAIN: 本地存储配置
|
||||
MANAGE_CONSTANT_LOCAL_REFER_TEXT: '配置教程请参考: '
|
||||
MANAGE_CONSTANT_LOCAL_BASE_DIR_RULE_MESSAGE: 起始目录不能为空
|
||||
MANAGE_CONSTANT_LOCAL_BUCKET_DESC: 特殊配置
|
||||
MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER: 例如:bucket1
|
||||
MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP: 此处不可修改,仅为软件兼容性考虑
|
||||
MANAGE_CONSTANT_SFTP_NAME: SFTP
|
||||
MANAGE_CONSTANT_SFTP_ALIAS_DESC: 配置别名-必需
|
||||
MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER: 该配置的唯一标识
|
||||
MANAGE_CONSTANT_SFTP_HOST_DESC: SSH地址-必需
|
||||
MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER: 例如:233.233.233.233
|
||||
MANAGE_CONSTANT_SFTP_PORT_DESC: SSH端口-必需
|
||||
MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER: 例如:22
|
||||
MANAGE_CONSTANT_SFTP_USERNAME_DESC: 用户名
|
||||
MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER: 请填写用户名
|
||||
MANAGE_CONSTANT_SFTP_PASSWORD_DESC: 密码
|
||||
MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER: 请填写密码
|
||||
MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC: 私钥地址
|
||||
MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER: 请填写私钥地址
|
||||
MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC: 私钥密码
|
||||
MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER: 请填写私钥密码
|
||||
MANAGE_CONSTANT_SFTP_BASE_DIR_DESC: 起始目录-可选
|
||||
MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER: 例如:/dir1
|
||||
MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC: 自定义域名-可选
|
||||
MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER: 例如:https://example.com
|
||||
MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP: 如果您的对应路径支持域名访问,请填写
|
||||
MANAGE_CONSTANT_SFTP_WEB_PATH: 网址拼接用起始路径
|
||||
MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER: 例如:test/ttc
|
||||
MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP: 用于拼接网址
|
||||
MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC: 文件权限
|
||||
MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER: 例如:0644
|
||||
MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC: 目录权限
|
||||
MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER: 例如:0755
|
||||
MANAGE_CONSTANT_SFTP_EXPLAIN: SFTP配置
|
||||
MANAGE_CONSTANT_SFTP_REFER_TEXT: '配置教程请参考: '
|
||||
MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE: 起始目录不能为空
|
||||
MANAGE_CONSTANT_SFTP_BUCKET_DESC: 特殊配置
|
||||
MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER: 例如:bucket1
|
||||
MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: 此处不可修改,仅为软件兼容性考虑
|
||||
MANAGE_LOGIN_PAGE_PANE_NAME: 已保存配置
|
||||
MANAGE_LOGIN_PAGE_PANE_KEY_NAME: 配置项
|
||||
MANAGE_LOGIN_PAGE_PANE_KEY_VALUE: 值
|
||||
MANAGE_LOGIN_PAGE_PANE_ENTER: 进入
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE: 删除
|
||||
MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER: 请选择
|
||||
MANAGE_LOGIN_PAGE_PANE_IMPORT: 导入
|
||||
MANAGE_LOGIN_PAGE_PANE_SAVE: 保存
|
||||
MANAGE_LOGIN_PAGE_PANE_RESET: 重置
|
||||
MANAGE_LOGIN_PAGE_PANE_TABLE_TITLE: 已有配置,单击可复制对应单元格数据
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_MESSAGE_A: 请填写
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ALIAS_MESSAGE: 别名只能包含中文、英文、数字、下划线和中划线
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ITEMS_PER_PAGE_MESSAGE: 每页数量必须在20-1000之间
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_CUSTOM_URL_MESSAGE: 自定义域名请以http://或https://开头
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME: 通知
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE: 已覆盖别名
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_B: 已保存别名
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_C: 已删除别名
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_D: 删除别名为
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_E: 的配置失败
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_COPY_SUCCESS: 已复制
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TITLE: 确定要删除配置么?
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TIP: 提示
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CONFIRM: 确定
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CANCEL: 取消
|
||||
MANAGE_BUCKET_PAGE_LOADING_TEXT: 加载文件中...
|
||||
MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER: 请选择自定义域名
|
||||
MANAGE_BUCKET_PAGE_CUSTOM_URL_INPUT_PLACEHOLDER: 请输入自定义域名
|
||||
MANAGE_BUCKET_PAGE_UPLOAD_FILES_TOOLTIP: 文件上传(支持多选)
|
||||
MANAGE_BUCKET_PAGE_UPLOAD_FROM_URL_TOOLTIP: 从URL上传
|
||||
MANAGE_BUCKET_PAGE_CREATE_FOLDER_TOOLTIP: 创建文件夹
|
||||
MANAGE_BUCKET_PAGE_DOWNLOAD_TOOLTIP: 下载页面
|
||||
MANAGE_BUCKET_PAGE_BATCH_RENAME_TOOLTIP: 批量重命名
|
||||
MANAGE_BUCKET_PAGE_BATCH_COPY_URL_TOOLTIP: 批量复制URL
|
||||
MANAGE_BUCKET_PAGE_COPY_FILE_INFO_TOOLTIP: 复制文件信息
|
||||
MANAGE_BUCKET_PAGE_FORCE_REFRESH_TOOLTIP: 强制刷新文件列表
|
||||
MANAGE_BUCKET_PAGE_SEARCH_PLACEHOLDER: 搜索文件
|
||||
MANAGE_BUCKET_PAGE_ROOT_FOLDER: 根目录
|
||||
MANAGE_BUCKET_PAGE_FILE_NUMBER: '文件数: '
|
||||
MANAGE_BUCKET_PAGE_FILE_SIZE: '总大小: '
|
||||
MANAGE_BUCKET_PAGE_SELECT_ALL: 全选
|
||||
MANAGE_BUCKET_PAGE_SELECT_NONE: 取消
|
||||
MANAGE_BUCKET_PAGE_SELECT_INVERT: 反选
|
||||
MANAGE_BUCKET_DOWNLOAD_BTN: 下载
|
||||
MANAGE_BUCKET_DELETE_BTN: 删除
|
||||
MANAGE_BUCKET_SORT_TITLE: 排序
|
||||
MANAGE_BUCKET_SORT_NAME: 文件名
|
||||
MANAGE_BUCKET_SORT_SIZE: 大小
|
||||
MANAGE_BUCKET_SORT_EXT: 类型
|
||||
MANAGE_BUCKET_SORT_TIME: 时间
|
||||
MANAGE_BUCKET_SORT_CHECK: 选中状态
|
||||
MANAGE_BUCKET_SORT_INIT: 初始化
|
||||
MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: 请输入URL,支持多个URL,以换行分隔
|
||||
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: 确定
|
||||
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: 取消
|
||||
MANAGE_BUCKET_URL_FORMAT_MARKDOWN: Markdown
|
||||
MANAGE_BUCKET_URL_FORMAT_MARKDOWN_WITH_LINK: Markdown-link
|
||||
MANAGE_BUCKET_URL_FORMAT_URL: Url
|
||||
MANAGE_BUCKET_URL_FORMAT_HTML: Html
|
||||
MANAGE_BUCKET_URL_FORMAT_BBCODE: BBCode
|
||||
MANAGE_BUCKET_URL_FORMAT_CUSTOM: 自定义
|
||||
MANAGE_BUCKET_URL_FORMAT_PRESIGN: 预签名链接
|
||||
MANAGE_BUCKET_FILE_INFO_TITLE: 文件信息
|
||||
MANAGE_BUCKET_FILE_INFO_COPY_TIPS: 复制JSON格式信息
|
||||
MANAGE_BUCKET_FILE_LIST_LOADING: 加载中,点击取消
|
||||
MANAGE_BUCKET_FILE_LIST_DOWNLOAD_PRE: 准备下载中,点击取消
|
||||
MANAGE_BUCKET_KEEP_FOLDER_STRUCTURE: 保持目录结构
|
||||
MANAGE_BUCKET_NOT_KEEP_FOLDER_STRUCTURE: 不保持目录结构
|
||||
MANAGE_BUCKET_UPLOAD_AREA_TITLE: 拖放上传支持递归上传文件夹
|
||||
MANAGE_BUCKET_UPLOAD_AREA_TEXT: 或:点击选择文件(不支持文件夹)
|
||||
MANAGE_BUCKET_UPLOAD_AREA_BTN_LOADING: 读取文件中
|
||||
MANAGE_BUCKET_UPLOAD_AREA_BTN: 上传
|
||||
MANAGE_BUCKET_UPLOAD_AREA_CLEAR: 清空
|
||||
MANAGE_BUCKET_UPLOAD_AREA_STATUS_UPLOADING: 上传中
|
||||
MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK: 复制上传任务信息
|
||||
MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK: 清空已完成任务
|
||||
MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK: 清空所有任务
|
||||
MANAGE_BUCKET_UPLOAD_AREA_SUCCESS: 成功
|
||||
MANAGE_BUCKET_UPLOAD_AREA_FAILED: 失败
|
||||
MANAGE_BUCKET_DOWNLOAD_PAGE_TITLE: 下载页面
|
||||
MANAGE_BUCKET_DOWNLOADING: 下载中
|
||||
MANAGE_BUCKET_DOWNLOAD_COPY_TASK: 复制下载任务信息
|
||||
MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK: 清空已完成任务
|
||||
MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK: 清空所有任务
|
||||
MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER: 打开下载目录
|
||||
MANAGE_BUCKET_DOWNLOAD_SUCCESS: 成功
|
||||
MANAGE_BUCKET_DOWNLOAD_FAILED: 失败
|
||||
MANAGE_BUCKET_MARKDOWN_PREVIEW: 预览
|
||||
MANAGE_BUCKET_PLAY: 播放
|
||||
MANAGE_BUCKET_RENAME_FILE: 文件重命名
|
||||
MANAGE_BUCKET_RENAME_FILE_INPUT_A: 进行替换时匹配的字符串或js正则表达式
|
||||
MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS: 正则表达式请直接输入,不需要加上/
|
||||
MANAGE_BUCKET_RENAME_FILE_INPUT_A_PLACEHOLDER: '例如:^\d{4}-\d{2}-\d{2} '
|
||||
MANAGE_BUCKET_RENAME_FILE_INPUT_B: 需要替换的字符串,可使用自定义重命名规则中的占位符
|
||||
MANAGE_BUCKET_RENAME_FILE_TABLE_IID: 自增数字
|
||||
MANAGE_BUCKET_RENAME_FILE_EXT: 是否匹配扩展名进行替换
|
||||
MANAGE_BUCKET_RENAME_FILE_EXT_TIPS: 如果希望修改扩展名,请勾选此项
|
||||
MANAGE_BUCKET_RENAME_FILE_EXT_YES: 是
|
||||
MANAGE_BUCKET_RENAME_FILE_EXT_NO: 否
|
||||
MANAGE_BUCKET_RENAME_FILE_CANCEL: 取消
|
||||
MANAGE_BUCKET_RENAME_FILE_CONFIRM: 确定
|
||||
MANAGE_BUCKET_COPY_SUCCESS: 复制成功
|
||||
MANAGE_BUCKET_START_LOADING_MESSAGE: 开始获取文件
|
||||
MANAGE_BUCKET_END_LOADING_MESSAGE_FAIL: 获取文件内容失败
|
||||
MANAGE_BUCKET_LAST_PAGE_TITLE: 提示
|
||||
MANAGE_BUCKET_LAST_PAGE_MSG: 已经是最后一页了
|
||||
MANAGE_BUCKET_GET_LIST_FAIL_TITLE: 提示
|
||||
MANAGE_BUCKET_GET_LIST_FAIL_MSG: 获取文件列表失败
|
||||
MANAGE_BUCKET_GET_LIST_FAIL_MSG2: 正在后台获取文件列表,请不要切换页面
|
||||
MANAGE_BUCKET_GET_LIST_FAIL_MSG3: 正在加载文件列表,请稍后再试
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TITLE: 确定要下载该文件夹吗?
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TIP: 提示
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CONFIRM: 确定
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CANCEL: 取消
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_SUCCESS: 获取下载列表成功
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_FAIL: 获取失败
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_CANCEL: 已取消
|
||||
MANAGE_BUCKET_CREATE_FOLDER_BOX_TITLE: 请输入文件夹名称
|
||||
MANAGE_BUCKET_CREATE_FOLDER_BOX_TIP: 新建文件夹
|
||||
MANAGE_BUCKET_CREATE_FOLDER_BOX_CONFIRM: 确定
|
||||
MANAGE_BUCKET_CREATE_FOLDER_BOX_CANCEL: 取消
|
||||
MANAGE_BUCKET_CREATE_FOLDER_ERROR_MSG: 文件夹名称只能包含中文、英文、数字、下划线和斜杠
|
||||
MANAGE_BUCKET_CREATE_FOLDER_SUCCESS: 创建成功, 请刷新
|
||||
MANAGE_BUCKET_CREATE_FOLDER_FAIL: 创建失败
|
||||
MANAGE_BUCKET_UPLOAD_URL_ERROR_MSQ: 请输入有效的URL
|
||||
MANAGE_BUCKET_UPLOAD_URL_NOT_TITLE: 提示
|
||||
MANAGE_BUCKET_UPLOAD_URL_NOT_MSG: 开始后台下载,成功后自动上传
|
||||
MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG: 请输入匹配字符串
|
||||
MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG2: 没有匹配到文件
|
||||
MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG3: 没有需要重命名的文件
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_A: 检测到有
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_B: 个文件重复,是否继续
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_C: 提示
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_CONFIRM: 确定
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_CANCEL: 取消
|
||||
MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_A: 重命名成功
|
||||
MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_B: 失败
|
||||
MANAGE_BUCKET_BATCH_RENAME_CANCEL: 已取消
|
||||
MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG: 请先选择文件
|
||||
MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A: 已复制
|
||||
MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B: 个文件信息
|
||||
MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG: 请先选择文件
|
||||
MANAGE_BUCKET_BATCH_COPY_URL_MSG_A: 已复制
|
||||
MANAGE_BUCKET_BATCH_COPY_URL_MSG_B: 个链接
|
||||
MANAGE_BUCKET_CANCEL_LOADING_TITLE: 是否停止获取文件列表?
|
||||
MANAGE_BUCKET_CANCEL_LOADING_MSG: 提示
|
||||
MANAGE_BUCKET_CANCEL_LOADING_CONFIRM: 确定
|
||||
MANAGE_BUCKET_CANCEL_LOADING_CANCEL: 取消
|
||||
MANAGE_BUCKET_CANCEL_LOADING_SUCCESS: 文件列表获取已停止
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_TITLE: 是否停止下载文件获取?
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_MSG: 提示
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CONFIRM: 确定
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CANCEL: 取消
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_SUCCESS: 下载文件获取已停止
|
||||
MANAGE_BUCKET_GET_FILE_BS_NOT_TITLE: 提示
|
||||
MANAGE_BUCKET_GET_FILE_BS_NOT_MSG: 获取文件列表成功
|
||||
MANAGE_BUCKET_GET_FILE_BS_NOT_MSG2: 部分文件获取失败
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A: 将永久删除
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B: 个文件,是否继续?
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG: 提示
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM: 确定
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL: 取消
|
||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_TITLE: 提示
|
||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG: 删除失败
|
||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2: 删除成功
|
||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG3: 失败
|
||||
MANAGE_BUCKET_BATCH_DELETE_CANCEL: 已取消删除
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE: 将永久删除
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER: 文件夹
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER_A: 和该目录下的所有文件
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FILE: 文件
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_C: 是否继续
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_MSG: 提示
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_CONFIRM: 确定
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_CANCEL: 取消
|
||||
MANAGE_BUCKET_DELETE_ERROR_MSG_TITLE: 提示
|
||||
MANAGE_BUCKET_DELETE_ERROR_MSG_MSG: 删除文件夹可能需要一段时间,请耐心等待
|
||||
MANAGE_BUCKET_DELETE_SUCCESS: 删除成功
|
||||
MANAGE_BUCKET_DELETE_FAIL: 删除失败
|
||||
MANAGE_BUCKET_DELETE_CANCEL: 已取消删除
|
||||
MANAGE_BUCKET_RENAME_INFO_MSG: 新文件名与原文件名相同,无需重命名
|
||||
MANAGE_BUCKET_RENAME_SUCCESS: 重命名成功
|
||||
MANAGE_BUCKET_RENAME_ERROR_MSG: 重命名失败
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_FILENAME: 文件名
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_FINISHTIME: 完成时间
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS: 状态
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_SUCCESS: 成功
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_FAIL: 失败
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_FILENAME: 文件名
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_TARGETFILEPATH: 上传路径
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_FINISHTIME: 完成时间
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_STATUS: 状态
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_SUCCESS: 成功
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_FAIL: 失败
|
||||
MANAGE_BUCKET_DOWNLOADING_COLUMN_FILENAME: 文件名
|
||||
MANAGE_BUCKET_DOWNLOADING_COLUMN_PROGRESS: 进度
|
||||
MANAGE_BUCKET_UPLOADING_COLUMN_FILENAME: 文件名
|
||||
MANAGE_BUCKET_UPLOADING_COLUMN_PROGRESS: 进度
|
||||
MANAGE_BUCKET_UPLOADED_COLUMN_FILENAME: 文件名
|
||||
MANAGE_BUCKET_UPLOADED_COLUMN_FILESIZE: 大小
|
||||
MANAGE_BUCKET_UPLOADED_COLUMN_FILENUM: 文件数
|
||||
MANAGE_BUCKET_FILE_COLUMN_FILENAME: 文件名
|
||||
MANAGE_BUCKET_FILE_COLUMN_COPY_URL: 复制链接
|
||||
MANAGE_BUCKET_FILE_COLUMN_INFO: 文件信息
|
||||
MANAGE_BUCKET_FILE_COLUMN_FILESIZE: 大小
|
||||
MANAGE_BUCKET_FILE_COLUMN_TIME: 修改时间
|
||||
MANAGE_NEW_BUCKET_TCYUN_NAME: 腾讯云
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_DESC: Bucket名
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_PLACEHOLDER: 请输入Bucket名
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_A: Bucket名不能为空
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_B: Bucket名称长度不能超过23个字符
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_C: Bucket名称只能包含小写字母、数字和中划线,且不能以中划线开头和结尾
|
||||
MANAGE_NEW_BUCKET_TCYUN_REGION: 区域
|
||||
MANAGE_NEW_BUCKET_TCYUN_ACL_DESC: 访问权限
|
||||
MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_RW: 公共读写
|
||||
MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_R: 公共读
|
||||
MANAGE_NEW_BUCKET_TCYUN_ACL_PRIVATE: 私有
|
||||
MANAGE_NEW_BUCKET_ALIYUN_NAME: 阿里云
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_DESC: Bucket名
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_PLACEHOLDER: 请输入Bucket名
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_A: Bucket名不能为空
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_B: Bucket名称长度不能超过63个字符
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_C: Bucket名称只能包含小写字母、数字和中划线,且不能以中划线开头和结尾
|
||||
MANAGE_NEW_BUCKET_ALIYUN_REGION: 区域
|
||||
MANAGE_NEW_BUCKET_ALIYUN_ACL_DESC: 访问权限
|
||||
MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_RW: 公共读写
|
||||
MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_R: 公共读
|
||||
MANAGE_NEW_BUCKET_ALIYUN_ACL_PRIVATE: 私有
|
||||
MANAGE_NEW_BUCKET_QINIU_NAME: 七牛云
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_DESC: Bucket名
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_PLACEHOLDER: 请输入Bucket名
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_A: Bucket名不能为空
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_B: Bucket名称长度不能超过63个字符
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_C: Bucket名称只能包含小写字母、数字和中划线,且不能以中划线开头和结尾
|
||||
MANAGE_NEW_BUCKET_QINIU_REGION: 区域
|
||||
MANAGE_NEW_BUCKET_QINIU_ACL_DESC: 公开访问
|
||||
MANAGE_NEW_BUCKET_S3PLIST_NAME: S3兼容云
|
||||
MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_DESC: Bucket名
|
||||
MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_PLACEHOLDER: 请输入Bucket名
|
||||
MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_RULE_MSG_A: Bucket名不能为空
|
||||
MANAGE_NEW_BUCKET_S3PLIST_REGION: 区域
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_DESC: 访问权限
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_RW: 公共读写
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_R: 公共读
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_PRIVATE: 私有
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_AUTHENTICATED_READ: 授权读
|
||||
PLUGIN_INSTALL_FAILED: 插件安装失败
|
||||
PLUGIN_UNINSTALL_FAILED: 插件卸载失败
|
||||
PLUGIN_UPDATE_SUCCEED: 插件更新成功
|
||||
PLUGIN_UPDATE_FAILED: 插件更新失败
|
||||
PLUGIN_IMPORT_SUCCEED: 插件导入成功
|
||||
PLUGIN_IMPORT_FAILED: 插件导入失败
|
||||
ENABLE_PLUGIN: 启用插件
|
||||
DISABLE_PLUGIN: 禁用插件
|
||||
UNINSTALL_PLUGIN: 卸载插件
|
||||
UPDATE_PLUGIN: 更新插件
|
||||
TIPS_NOTICE: 注意
|
||||
TIPS_WARNING: 警告
|
||||
TIPS_ERROR: 发生错误
|
||||
TIPS_INSTALL_NODE_AND_RELOAD_PICGO: 请安装Node.js并重启PicList再继续操作
|
||||
TIPS_PLUGIN_REMOVE_GALLERY_ITEM: 有插件正在试图删除一些相册图片,是否继续
|
||||
TIPS_UPLOAD_NOT_PICTURES: 剪贴板最新的一条记录不是图片
|
||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT: PicList 配置文件损坏,已经恢复为默认配置
|
||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP: PicList 配置文件损坏,已经恢复为备份配置
|
||||
TIPS_PICGO_BACKUP_FILE_VERSION: '备份文件版本: ${v}'
|
||||
TIPS_SHORTCUT_MODIFIED_SUCCEED: 快捷键已经修改成功
|
||||
TIPS_SHORTCUT_MODIFIED_CONFLICT: 快捷键冲突,请重新设置
|
||||
TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR: 自定义文件解析出错,请检查路径内容是否正确
|
||||
TIPS_FIND_NEW_VERSION: 发现新版本${v},更新了很多功能,是否后台下载最新的版本?
|
||||
UPDATE_DOWNLOADED: 更新已下载
|
||||
TIPS_UPDATE_DOWNLOADED: 更新已下载,将在下次启动时安装,是否现在重启?
|
||||
QUIT: 退出
|
||||
935
dist/renderer/i18n/zh-TW.yml
vendored
@@ -1,935 +0,0 @@
|
||||
LANG_DISPLAY_LABEL: 繁體中文
|
||||
ABOUT: 關於
|
||||
OPEN_MAIN_WINDOW: 打開主視窗
|
||||
OPEN_MINI_WINDOW: 打開mini視窗
|
||||
HIDE_MINI_WINDOW: 隱藏mini視窗
|
||||
CHOOSE_DEFAULT_PICBED: 選擇預設圖床
|
||||
RELOAD_APP: 重啟程式
|
||||
UPLOAD_SUCCEED: 上傳成功
|
||||
UPLOAD_FAILED: 上傳失敗
|
||||
UPLOAD_PROGRESS: 上傳進度
|
||||
OPERATION_SUCCEED: 操作成功
|
||||
OPERATION_FAILED: 操作失敗
|
||||
UPLOADING: 正在上傳
|
||||
QUICK_UPLOAD: 快速上傳
|
||||
UPLOAD_BY_CLIPBOARD: 剪貼簿圖片上傳
|
||||
SHOW_PICBED_QRCODE: 產生圖床配置 QRCODE
|
||||
PICBED_QRCODE: 圖床配置 QRCODE
|
||||
ENABLE: 啟用
|
||||
DISABLE: 禁用
|
||||
CONFIG_THING: 設定${c}
|
||||
FIND_NEW_VERSION: 發現新版本
|
||||
NO_MORE_NOTICE: 以後不再提醒
|
||||
SHOW_DEVTOOLS: 開啟開發者工具
|
||||
FEEDBACK: 問題反饋
|
||||
CURRENT_PICBED: 當前圖床
|
||||
CURRENT_SECOND_PICBED: 當前第二圖床
|
||||
START_WATCH_CLIPBOARD: 開始監聽剪貼簿
|
||||
STOP_WATCH_CLIPBOARD: 停止監聽剪貼簿
|
||||
OPEN_TOOLBOX: 開啟修復工具箱
|
||||
TOOLBOX: 工具箱
|
||||
TOOLBOX_TITLE: 排查 PicList 執行時問題
|
||||
TOOLBOX_SUB_TITLE: 立即掃描以下項目,修復使用問題
|
||||
TOOLBOX_CHECK_CONFIG_FILE_BROKEN: 檢查配置文件是否損壞
|
||||
TOOLBOX_CHECK_GALLERY_FILE_BROKEN: 檢查相冊文件是否損壞
|
||||
TOOLBOX_CHECK_PROBLEM_WITH_CLIPBOARD_PIC_UPLOAD: 檢查剪貼板圖片上傳是否存在問題
|
||||
TOOLBOX_CHECK_PROBLEM_WITH_PROXY: 檢查代理設置是否正常
|
||||
TOOLBOX_FIX_DONE_NEED_RELOAD: 修復完成,需要重啓生效,是否重啓
|
||||
TOOLBOX_CANT_AUTO_FIX: 無法自動修復,請自行修復以下問題
|
||||
TOOLBOX_START_SCAN: 開始掃描
|
||||
TOOLBOX_RE_SCAN: 重新掃描
|
||||
TOOLBOX_START_FIX: 開始修復
|
||||
TOOLBOX_SUCCESS_TIPS: 恭喜你,沒有檢查出問題
|
||||
TOOLBOX_CHECK_CONFIG_FILE_PATH_TIPS: 配置文件路徑是:${path}
|
||||
TOOLBOX_CHECK_CONFIG_FILE_BROKEN_TIPS: 配置文件已損壞
|
||||
TOOLBOX_CHECK_GALLERY_FILE_PATH_TIPS: 相冊文件路徑是:${path}
|
||||
TOOLBOX_CHECK_GALLERY_FILE_BROKEN_TIPS: 相冊文件已損壞
|
||||
TOOLBOX_CHECK_PROXY_SUCCESS_TIPS: 代理設置正常
|
||||
TOOLBOX_CHECK_PROXY_NO_PROXY_TIPS: 無代理設置
|
||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_CORRECT: 代理設置不正確
|
||||
TOOLBOX_CHECK_PROXY_PROXY_IS_NOT_WORKING: 代理設置不可用
|
||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_TIPS: 剪貼板圖片臨時文件夾路徑是:${path}
|
||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_NOT_EXIST_TIPS: 剪貼板圖片臨時文件夾不存在:${path}
|
||||
TOOLBOX_CHECK_CLIPBOARD_FILE_PATH_ERROR_TIPS: 請自行創建文件夾:${path}
|
||||
MANUAL_PAGE_OPEN_TIP: 請選擇打開方式
|
||||
MANUAL_PAGE_OPEN_TIP_TITLE: Tips
|
||||
MANUAL_PAGE_OPEN_BY_BROWSER: 瀏覽器
|
||||
MANUAL_PAGE_OPEN_BY_BUILD_IN: 內置窗口
|
||||
MANUAL_PAGE_OPEN_SETTING_TIP: 選擇打開手冊方式
|
||||
UPLOAD_AREA: 上傳
|
||||
UPLOAD_VIEW_HINT: 點擊打開圖床設定
|
||||
MANAGE_PAGE: 管理
|
||||
GALLERY: 相簿
|
||||
REFRESH: 刷新
|
||||
MANUAL: 手冊
|
||||
PICBEDS_SETTINGS: 圖床
|
||||
PICLIST_SETTINGS: 設定
|
||||
PLUGIN_SETTINGS: 插件
|
||||
CHOOSE_PICBED: 選擇圖床
|
||||
COPY_PICBED_CONFIG: 複製圖床設定
|
||||
COPY_PICBED_CONFIG_SUCCEED: 複製圖床設定成功
|
||||
INPUT: 輸入框
|
||||
CANCEL: 取消
|
||||
CONFIRM: 確定
|
||||
RESET_PICBED_CONFIG: 重置
|
||||
CHOOSE_SHOWED_PICBED: 請選擇顯示的圖床
|
||||
CHOOSE_PASTE_FORMAT: 請選擇貼上的格式
|
||||
COPY: 複製
|
||||
DELETE: 刪除
|
||||
SELECT_ALL: 全選
|
||||
CHANGE_IMAGE_URL: 修改圖片URL
|
||||
CHANGE_IMAGE_URL_SUCCEED: 修改圖片URL成功
|
||||
COPY_LINK_SUCCEED: 複製連結成功
|
||||
BATCH_COPY_LINK_SUCCEED: 批量複製連結成功
|
||||
FILE_RENAME: 檔案改名
|
||||
OPEN_FILE_PATH: 打開檔案路徑
|
||||
GALLERY_SYNC_DELETE: 刪除雲端
|
||||
GALLERY_SYNC_DELETE_NOTICE_TITLE: 通知
|
||||
GALLERY_SYNC_DELETE_NOTICE_SUCCEED: 雲端刪除成功
|
||||
GALLERY_SYNC_DELETE_NOTICE_FAILED: 雲端刪除失敗
|
||||
GALLERY_CHANGE_URL: 修改
|
||||
GALLERY_SEARCH_FILENAME: 搜尋文件名
|
||||
GALLERY_SEARCH_URL: 搜尋URL
|
||||
GALLERY_MATCHED: ' 匹配到: '
|
||||
UPLOAD_PAGE_COPY_UPLOAD_API: 複製上傳API
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_NAME: 圖片處理
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_DIALOG_TITLE: 圖片處理設置
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST: 跳過處理的文件擴展名列表
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_SKIP_PROCESS_EXT_LIST_TIPS: '請填寫需要跳過處理的文件擴展名列表, 以英文逗號分隔, 如: jpg,png,gif'
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISADDWM: 是否添加水印
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE: 水印類型
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_TEXT: 文字
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTYPE_IMAGE: 圖片
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISFULLSCREEN_WM: 是否全屏水印
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMDEGREE: 水印角度
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT: 水印文字
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMTEXT_FONT_PATH: 水印字體路徑(第一次需下載字體文件)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMRATIO: 水印占原圖比例
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMCOLOR: 水印顏色,請從取色器中選擇
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMPATH: 水印圖片路徑(留空使用預設圖片)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_WMPOSITION: 水印位置
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISREMOVEEXIF: 是否移除EXIF信息
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_QUALITY: 壓縮質量(1-100)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISCONVERT: 是否轉換格式
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT: 轉換目的格式
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_CONVERTFORMAT_SPECIFIC: 指定格式, 请输入JSON格式配置,如{"jpg":"png"}
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISFLIP: 是否進行垂直翻轉
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISFLOP: 是否進行水平翻轉
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZE: 是否按固定尺寸調整圖片
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_RESIZEWIDTH: 調整尺寸寬度(設為0則按高度等比縮放)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_RESIZEHEIGHT: 調整尺寸高度(設為0則按寬度等比縮放)
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_HEIGHT: 當圖片高度小於設定高度時跳過縮放
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_SKIPRESIZEOfSMALLIMG_WIDTH: 當圖片寬度小於設定寬度時跳過縮放
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISRESIZEBYPERCENT: 是否按比例調整尺寸,優先級更高
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_RESIZEPERCENT: 調整尺寸比例,輸入50表示50%
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ISROTATE: 是否旋轉
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_ROTATEDEGREE: 旋轉角度
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_CONFIRM: 儲存
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_CANCEL: 取消
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP: 上
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM: 下
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_LEFT: 左
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_RIGHT: 右
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_LEFT: 左上
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_TOP_RIGHT: 右上
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_LEFT: 左下
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_BOTTOM_RIGHT: 右下
|
||||
UPLOAD_PAGE_IMAGE_PROCESS_POSITION_CENTER: 中
|
||||
UPLOAD_SHORT_URL: 短連結
|
||||
UPLOAD_NORMAL_URL: 长連結
|
||||
SETTINGS: 設定
|
||||
SETTINGS_OPEN_CONFIG_FILE: 打開設定檔案
|
||||
SETTINGS_MIGRATE_FROM_PICGO: 從PicGo導入設定
|
||||
SETTINGS_MIGRATE_FROM_PICGO_TITLE: 通知
|
||||
SETTINGS_MIGRATE_FROM_PICGO_CONTENT: 即將導入PicGo的設定文件和相冊, 這將會覆蓋當前的設定, 是否繼續?
|
||||
SETTINGS_MIGRATE_FROM_PICGO_SUCCESS: 導入成功, 請重啟應用
|
||||
SETTINGS_MIGRATE_FROM_PICGO_FAILED: 導入失敗
|
||||
SETTINGS_START_MODE: 啟動模式
|
||||
SETTINGS_START_MODE_MINI: mini視窗
|
||||
SETTINGS_START_MODE_MAIN: 主視窗
|
||||
SETTINGS_START_MODE_QUIET: 靜默啟動
|
||||
SETTINGS_START_MODE_NO_TRAY: 隐藏托盘
|
||||
SETTINGS_CLICK_TO_OPEN: 點擊打開
|
||||
SETTINGS_SET_LOG_FILE: 設定記錄檔案
|
||||
SETTINGS_CLICK_TO_SET: 點擊設定
|
||||
SETTINGS_CLICK_TO_CHECK: 點擊檢查
|
||||
SETTINGS_SET_SHORTCUT: 設定快捷鍵
|
||||
SETTINGS_CUSTOM_LINK_FORMAT: 自訂連結格式
|
||||
SETTINGS_SET_PROXY_AND_MIRROR: 設定PROXY和鏡像地址
|
||||
SETTINGS_SET_SERVER: 設定Server
|
||||
SETTINGS_CHECK_UPDATE: 檢查更新
|
||||
SETTINGS_OPEN_UPDATE_HELPER: 打開更新助手
|
||||
SETTINGS_OPEN: 開
|
||||
SETTINGS_CLOSE: 關
|
||||
SETTINGS_CLOSE_MINI_WINDOW_SYNC: 開主窗口同步關閉mini窗口
|
||||
SETTINGS_CLOSE_MAIN_WINDOW_SYNC: 關mini窗口同步關閉主窗口
|
||||
SETTINGS_LAUNCH_ON_BOOT: 開機時啟動
|
||||
SETTINGS_RENAME_BEFORE_UPLOAD: 手動重新命名
|
||||
SETTINGS_TIMESTAMP_RENAME: 以時間戳命名
|
||||
SETTINGS_ADVANCED_RENAME: 高級命名
|
||||
SETTINGS_ADVANCED_RENAME_ENABLE: 啟用高級命名
|
||||
SETTINGS_ADVANCED_RENAME_FORMAT: 高級命名格式
|
||||
SETTINGS_ENABLE_SECOND_PICBED: 啟用第二圖床同步上傳
|
||||
SETTINGS_SET_SECOND_PICBED: 設定第二圖床
|
||||
SETTINGS_OPEN_UPLOAD_TIPS: 開啟上傳提示
|
||||
SETTINGS_OPEN_UPLOAD_RESULT_TIPS: 開啟上傳結果提示
|
||||
SETTINGS_MINI_WINDOW_ON_TOP: Mini視窗置頂
|
||||
SETTINGS_AUTO_COPY_URL_AFTER_UPLOAD: 上傳後自動複製URL
|
||||
SETTINGS_TIPS_PLACEHOLDER_URL: 用佔位符 $url 來表示URL的位置
|
||||
SETTINGS_TIPS_PLACEHOLDER_FILENAME: 用佔位符 $fileName 來表示檔案名稱的位置
|
||||
SETTINGS_TIPS_PLACEHOLDER_EXTNAME: 用佔位符 $extName 來表示檔案格式的位置
|
||||
SETTINGS_TIPS_SUCH_AS: 如
|
||||
SETTINGS_UPLOAD_PROXY: 上傳PROXY
|
||||
SETTINGS_PLUGIN_INSTALL_PROXY: 插件安裝PROXY
|
||||
SETTINGS_PLUGIN_INSTALL_MIRROR: 插件安裝鏡像
|
||||
SETTINGS_CURRENT_VERSION: 當前版本
|
||||
SETTINGS_NEWEST_VERSION: 最新版本
|
||||
SETTINGS_GETING: 正在取得中
|
||||
SETTINGS_TIPS_HAS_NEW_VERSION: PicList更新啦,請點擊確定重启應用
|
||||
SETTINGS_LOG_FILE_PATH: 記錄檔案路徑
|
||||
SETTINGS_CONFIG_FILE_PATH: 設定檔案路徑
|
||||
SETTINGS_LOG_FILE: 記錄檔案
|
||||
SETTINGS_GUI_LOG_FILE: GUI記錄檔案
|
||||
SETTINGS_MANAGE_LOG_FILE: 管理記錄檔案
|
||||
SETTINGS_LOG_LEVEL: 記錄等级
|
||||
SETTINGS_LOG_FILE_SIZE: 記錄檔案大小
|
||||
SETTINGS_SET_PICGO_SERVER: 設定PicGo-Server
|
||||
SETTINGS_TIPS_SERVER_NOTICE: 如果你不知道Server的作用,請閱讀文檔,或者不用修改設定。
|
||||
SETTINGS_ENABLE_SERVER: 是否開啟Server
|
||||
SETTINGS_SET_SERVER_HOST: 設定監聽地址
|
||||
SETTINGS_SET_SERVER_PORT: 設定監聽端口
|
||||
SETTINGS_SET_SERVER_KEY: 設定鑒權密鑰
|
||||
SETTINGS_SET_WEB_SERVER: 設定Web服務
|
||||
SETTINGS_TIPS_WEB_SERVER_NOTICE: 如果你不知道Web服務的作用,請閱讀文檔,或者不用修改設定。
|
||||
SETTINGS_SET_ENABLE_WEB_SERVER: 是否開啟Web服務
|
||||
SETTINGS_SET_WEB_SERVER_HOST: 設定Web服務地
|
||||
SETTINGS_SET_WEB_SERVER_PORT: 設定Web服務端口
|
||||
SETTINGS_SET_WEB_SERVER_PATH: 設定Web服務路徑
|
||||
SETTINGS_TIP_PLACEHOLDER_WEB_HOST: 推薦預設地址:127.0.0.1
|
||||
SETTINGS_TIP_PLACEHOLDER_WEB_PORT: 推薦預設端口:37777
|
||||
SETTINGS_TIP_PLACEHOLDER_HOST: 推薦預設地址:127.0.0.1
|
||||
SETTINGS_TIP_PLACEHOLDER_PORT: 推薦預設端口:36677
|
||||
SETTINGS_TIP_PLACEHOLDER_KEY: 用於接口鑒權, 通過url參數添加'?key=xxx'
|
||||
SETTINGS_SET_SERVER_AES_KEY: 設定AES加密密鑰
|
||||
SETTINGS_LOG_LEVEL_ALL: 全部-All
|
||||
SETTINGS_LOG_LEVEL_SUCCESS: 成功-Success
|
||||
SETTINGS_LOG_LEVEL_ERROR: 錯誤-Error
|
||||
SETTINGS_LOG_LEVEL_INFO: 普通-Info
|
||||
SETTINGS_LOG_LEVEL_WARN: 提醒-Warn
|
||||
SETTINGS_LOG_LEVEL_NONE: 不記錄-None
|
||||
SETTINGS_RESULT: 設定結果
|
||||
SETTINGS_DEFAULT_PICBED: 設定預設圖床
|
||||
SETTINGS_SET_DEFAULT_PICBED: 設為預設圖床
|
||||
SETTINGS_NOT_CONFIG_OPTIONS: 暫無設定選項
|
||||
SETTINGS_USE_BUILTIN_CLIPBOARD_UPLOAD: 使用內建剪貼簿上傳
|
||||
SETTINGS_CHOOSE_LANGUAGE: 選擇語言
|
||||
BUILTIN_CLIPBOARD_TIPS: 使用內建剪貼簿函數而不是調用腳本取得剪貼簿內的照片
|
||||
UPLOADER_CONFIG_NAME: 圖床配置名
|
||||
UPLOADER_CONFIG_PLACEHOLDER: 請輸入配置名稱
|
||||
SELECTED_SETTING_HINT: 已選中
|
||||
SETTINGS_MAIN_WINDOW_SIZE: 默認主視窗大小
|
||||
SETTINGS_MAIN_WINDOW_SIZE_WIDTH: 默認主視窗寬度
|
||||
SETTINGS_MAIN_WINDOW_WIDTH_HINT: '默認: 1200'
|
||||
SETTINGS_MAIN_WINDOW_SIZE_HEIGHT: 默認主視窗高度
|
||||
SETTINGS_MAIN_WINDOW_HEIGHT_HINT: '默認: 800'
|
||||
SETTINGS_RAW_PICGO_SIZE: 原PicGo大小
|
||||
SETTINGS_CUSTOM_MINI_ICON_PATH: 自訂Mini視窗圖示路徑
|
||||
SETTINGS_CUSTOM_MINI_ICON: 自訂Mini視窗圖示
|
||||
SETTINGS_COMPRESS_AND_WATERMARK: 設置圖片浮水印和壓縮-格式轉換等參數
|
||||
SETTINGS_SYNC_DELETE_CLOUD: 從相簿中刪除並同步從雲端刪除
|
||||
SETTINGS_ISHIDEDOCK: 是否隱藏dock圖示
|
||||
SETTINGS_ISHIDEDOCK_TIPS: 不支持同時隱藏dock和托盘
|
||||
SETTINGS_ENCODE_OUTPUT_URL: 輸出(複製) URL 時進行轉義
|
||||
SETTINGS_WATCH_CLIPBOARD: 軟體啟動時自動監聽剪貼簿上傳
|
||||
SETTINGS_SHORT_URL: 使用短網址
|
||||
SETTINGS_SHORT_URL_SERVER: 短網址服務
|
||||
SETTINGS_SHORT_URL_C1N_TOKEN: C1N Token
|
||||
SETTINGS_SHORT_URL_YOURLS_DOMAIN: YOURLS域名
|
||||
SETTINGS_SHORT_URL_YOURLS_SIGNATURE: YOURLS signature
|
||||
SETTINGS_SHORT_URL_CF_WORKER_HOST: Cloudflare Worker Host
|
||||
SETTINGS_SHORT_SINK_DOMAIN: sink域名
|
||||
SETTINGS_SHORT_SINK_TOKEN: sink token
|
||||
SETTINGS_DELETE_LOCAL_FILE_AFTER_UPLOAD: 上傳後刪除本地檔案
|
||||
SETTINGS_SYNC_CONFIG: 設置同步配置
|
||||
SETTINGS_SYNC_CONFIG_TITLE: 同步設置
|
||||
SETTINGS_SYNC_CONFIG_NOTE: 同步的檔案为配置檔案
|
||||
SETTINGS_SYNC_CONFIG_SELECT_TYPE: 選擇同步方式
|
||||
SETTINGS_SYNC_CONFIG_SELECT_FILE: 選擇同步檔案
|
||||
SETTINGS_SYNC_CONFIG_SELECT_CONFIG: 僅配置檔案
|
||||
SETTINGS_SYNC_CONFIG_SELECT_GALLERY: 僅相簿檔案
|
||||
SETTINGS_SYNC_CONFIG_SELECT_BOTH: 配置檔案和相簿檔案
|
||||
SETTINGS_SYNC_CONFIG_GITEA_HOST: Gitea Host
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME: 用戶名
|
||||
SETTINGS_SYNC_CONFIG_GITEA_USERNAME: 用戶名
|
||||
SETTINGS_SYNC_CONFIG_GITEE_USERNAME: 用戶名
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_REPO: 儲存庫(私有)
|
||||
SETTINGS_SYNC_CONFIG_GITEA_REPO: 儲存庫
|
||||
SETTINGS_SYNC_CONFIG_GITEE_REPO: 儲存庫路径
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH: GitHub 分支
|
||||
SETTINGS_SYNC_CONFIG_GITEA_BRANCH: Gitea 分支
|
||||
SETTINGS_SYNC_CONFIG_GITEE_BRANCH: Gitee 分支
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN: GitHub Token
|
||||
SETTINGS_SYNC_CONFIG_GITEA_TOKEN: Gitea Token
|
||||
SETTINGS_SYNC_CONFIG_GITEE_TOKEN: Gitee Token
|
||||
SETTINGS_SYNC_CONFIG_PROXY: 代理
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_USERNAME_PLACEHOLDER: 請輸入 GitHub 用戶名
|
||||
SETTINGS_SYNC_CONFIG_GITEA_USERNAME_PLACEHOLDER: 請輸入 Gitea 用戶名
|
||||
SETTINGS_SYNC_CONFIG_GITEE_USERNAME_PLACEHOLDER: 請輸入 Gitee 用戶名
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_REPO_PLACEHOLDER: 請輸入 GitHub 儲存庫名稱
|
||||
SETTINGS_SYNC_CONFIG_GITEA_REPO_PLACEHOLDER: 請輸入 Gitea 儲存庫名稱
|
||||
SETTINGS_SYNC_CONFIG_GITEE_REPO_PLACEHOLDER: 請輸入 Gitee 儲存庫名稱
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_BRANCH_PLACEHOLDER: 請輸入 GitHub 分支名稱
|
||||
SETTINGS_SYNC_CONFIG_GITEA_BRANCH_PLACEHOLDER: 請輸入 Gitea 分支名稱
|
||||
SETTINGS_SYNC_CONFIG_GITEE_BRANCH_PLACEHOLDER: 請輸入 Gitee 分支名稱
|
||||
SETTINGS_SYNC_CONFIG_GITHUB_TOKEN_PLACEHOLDER: 請輸入 GitHub Token
|
||||
SETTINGS_SYNC_CONFIG_GITEA_TOKEN_PLACEHOLDER: 請輸入 Gitea Token
|
||||
SETTINGS_SYNC_CONFIG_GITEE_TOKEN_PLACEHOLDER: 請輸入 Gitee Token
|
||||
SETTINGS_SYNC_CONFIG_PROXY_PLACEHOLDER: 請輸入代理地址
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT: WebDAV端點
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_ENDPOINT_PLACEHOLDER: 請輸入WebDAV端點URL
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME: 用戶名
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_USERNAME_PLACEHOLDER: 請輸入WebDAV用戶名
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD: 密碼
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_PASSWORD_PLACEHOLDER: 請輸入WebDAV密碼
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_AUTH_TYPE: 認證類型
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_SSL_ENABLED: 啟用SSL/HTTPS
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH: 保存路徑
|
||||
SETTINGS_SYNC_CONFIG_WEBDAV_SAVE_PATH_PLACEHOLDER: 請選擇同步檔案的保存路徑
|
||||
SETTINGS_UP_DOWN_DESC: 上傳和下載配置檔案
|
||||
SETTINGS_SYNC_UPLOAD: 上傳
|
||||
SETTINGS_SYNC_DOWNLOAD: 下載
|
||||
SETTINGS_SYNC_UPLOAD_ALL: 上傳全部
|
||||
SETTINGS_SYNC_DOWNLOAD_ALL: 下載全部
|
||||
SETTINGS_SYNC_UPLOAD_SUCCESS: 上傳成功
|
||||
SETTINGS_SYNC_UPLOAD_FAILED: 上傳失敗
|
||||
SETTINGS_SYNC_DOWNLOAD_SUCCESS: 下載成功
|
||||
SETTINGS_SYNC_DOWNLOAD_FAILED: 下載失敗
|
||||
SETTINGS_SYNC_COMMON_CONFIG: 通用配置
|
||||
SETTINGS_SYNC_MANAGE_CONFIG: 管理配置
|
||||
SETTINGS_AUTO_IMPORT: 管理頁面自動導入配置
|
||||
SETTINGS_AUTO_IMPORT_SELECT_PICBED: 選擇需要開啟自動導入的圖床
|
||||
SETTINGS_TAB_SYSTEM: 系統設置
|
||||
SETTINGS_TAB_SYNC_CONFIG: 同步與配置
|
||||
SETTINGS_TAB_UPLOAD: 上傳設置
|
||||
SETTINGS_TAB_ADVANCED: 高級設置
|
||||
SETTINGS_TAB_UPDATE: 更新
|
||||
SHORTCUT_NAME: 快捷鍵名稱
|
||||
SHORTCUT_BIND: 快捷鍵綁定
|
||||
SHORTCUT_STATUS: 狀態
|
||||
SHORTCUT_ENABLED: 已啟用
|
||||
SHORTCUT_DISABLED: 已禁用
|
||||
SHORTCUT_SOURCE: 來源
|
||||
SHORTCUT_HANDLE: 操作
|
||||
SHORTCUT_ENABLE: 啟用
|
||||
SHORTCUT_DISABLE: 禁用
|
||||
SHORTCUT_EDIT: 編輯
|
||||
SHORTCUT_CHANGE_UPLOAD: 修改上傳快捷鍵
|
||||
WAIT_TO_UPLOAD: 等待上傳
|
||||
ALREADY_UPLOAD: 已上傳
|
||||
DRAG_FILE_TO_HERE: 將檔案拖曳到此處,或
|
||||
CLICK_TO_UPLOAD: 點擊上傳
|
||||
LINK_FORMAT: 連結格式
|
||||
CLIPBOARD_PICTURE: 剪貼簿
|
||||
TIPS_DRAG_VALID_PICTURE_OR_URL: 請拖入合法的圖片檔案或者圖片URL地址
|
||||
TIPS_INPUT_URL: 請輸入URL
|
||||
TIPS_HTTP_PREFIX: http://或者https://開頭
|
||||
TIPS_INPUT_VALID_URL: 請輸入合法的URL
|
||||
PLUGIN_SEARCH_PLACEHOLDER: 搜尋npm上的PicGo插件,或者點擊上方按鈕查看優秀插件列表
|
||||
PLUGIN_INSTALL: 安裝
|
||||
PLUGIN_INSTALLING: 安裝中
|
||||
PLUGIN_INSTALLED: 已安裝
|
||||
PLUGIN_DOING_SOMETHING: 進行中
|
||||
PLUGIN_LIST: 插件列表
|
||||
PLUGIN_IMPORT_LOCAL: 導入本地插件
|
||||
PLUGIN_UPDATE_ALL: 更新全部插件
|
||||
TIPS_REMOVE_LINK: 此操作將在相簿中移除該圖片,是否繼續?
|
||||
TIPS_WILL_REMOVE_CHOOSED_IMAGES: 將在相簿中移除剛才選中的 ${m} 張圖片,是否繼續?
|
||||
TIPS_MUST_CONTAINS_URL: 必須含有$url 或 $fileName 或 $extName
|
||||
TIPS_NETWORK_ERROR: 網路錯誤,暫時無法取得
|
||||
TIPS_NEED_RELOAD: 需要重新啟動生效
|
||||
TIPS_PLEASE_CHOOSE_LOG_LEVEL: 請選擇記錄等級
|
||||
TIPS_SET_SUCCEED: 設定成功
|
||||
TIPS_RESET_SUCCEED: 重置成功
|
||||
TIPS_PLUGIN_NOT_GUI_IMPLEMENT: 該插件未對GUI進行優化,是否繼續安裝?
|
||||
TIPS_GET_PLUGIN_LIST_FAILED: 取得插件列表失敗
|
||||
MANAGE_SETTING_TITLE: 管理設定
|
||||
MANAGE_SETTING_ISAUTOREFRESH_TITLE: 每次進入新目錄時,是否自動重新整理檔案列表
|
||||
MANAGE_SETTING_ISAUTOREFRESH_TIPS: 僅對不分頁模式有效,預設會在載入後自動快取至資料庫以提升下次載入速度
|
||||
MANAGE_SETTING_CLEAR_CACHE_TITLE: '清空檔案列表快取資料庫 已佔用:'
|
||||
MANAGE_SETTING_CLEAR_CACHE_FREE_TITLE: '剩餘可用:'
|
||||
MANAGE_SETTING_CLEAR_CACHE_TIPS: 清空後下次進入新目錄時將會重新載入檔案列表
|
||||
MANAGE_SETTING_CLEAR_CACHE_PROMPT: 確定要清空檔案列表快取資料庫嗎?
|
||||
MANAGE_SETTING_CLEAR_CACHE_BUTTON: 清空
|
||||
MANAGE_SETTING_ISSHOWTHUMBNAIL_TITLE: 顯示圖片的原始圖像而非預設的檔案格式圖示(需要存儲桶公開訪問權限)
|
||||
MANAGE_SETTING_ISUSEPRESIGNEDURL_TITLE: 使用預簽名URL预览圖片
|
||||
MANAGE_SETTING_ISSHOWLIST_TITLE: 檔案列表預設顯示方式
|
||||
MANAGE_SETTING_ISSHOWLIST_ON: 列表
|
||||
MANAGE_SETTING_ISSHOWLIST_OFF: 卡片
|
||||
MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TITLE: 自定義域名啟用強制 HTTPS
|
||||
MANAGE_SETTING_ISFORCECUSTOMURLHTTPS_TIPS: 開啟後,複製鏈結等操作將會自動為自定義域名添加 HTTPS 前綴
|
||||
MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TITLE: 保留上傳時的目錄結構
|
||||
MANAGE_SETTING_ISUPLOADKEEPDIRSTRUCTURE_TIPS: 停用後,所有文件將會展開到指定目錄下
|
||||
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_A: 下載
|
||||
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_B: 文件
|
||||
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TITLE_C: 時保留目錄結構
|
||||
MANAGE_SETTING_ISDOWNLOADFOLDERKEEPDIRSTRUCTURE_TITLE_D: 目錄
|
||||
MANAGE_SETTING_ISDOWNLOADFILEKEEPDIRSTRUCTURE_TIPS: 啟用後,下載時會保留原始目錄結構
|
||||
MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TITLE: 最大同時下載檔案數量(1-9999)
|
||||
MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_TIPS: 由於後端實現方式不同,此設定在腾讯云上不生效
|
||||
MANAGE_SETTING_MAX_DOWNLOAD_FILE_SIZE_INPUT_TIPS: 請輸入最大同時下載檔案數量
|
||||
MANAGE_SETTING_ISIGNORECASE_TITLE: 搜尋檔案時,是否忽略大小寫
|
||||
MANAGE_SETTING_ISIGNORECASE_TIPS: 啟用後,搜尋時將會忽略大小寫
|
||||
MANAGE_SETTING_TIMESTAMPRENAME_TITLE: 上傳檔案時間戳重新命名--(最高優先級)
|
||||
MANAGE_SETTING_TIMESTAMPRENAME_TIPS: 啟用後,上傳檔案時將會使用時間戳重新命名
|
||||
MANAGE_SETTING_RANDOMSTRINGRENAME_TITLE: 上傳檔案隨機字符串重新命名--(中優先級)
|
||||
MANAGE_SETTING_RANDOMSTRINGRENAME_TIPS: 隨機字符串長度為20
|
||||
MANAGE_SETTING_CUSTOMRENAME_TITLE: 上傳檔案自定義重新命名--(最低優先級)
|
||||
MANAGE_SETTING_CUSTOMRENAME_TIPS: 啟用後,上傳檔案時將會使用自定義重新命名
|
||||
MANAGE_SETTING_CUSTOM_PATTERN_TITLE: 自訂重新命名格式,占位符請參考下表,可自由組合
|
||||
MANAGE_SETTING_CUSTOM_PATTERN_TIPS: 請輸入自訂重新命名格式
|
||||
MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TITLE: 占位符
|
||||
MANAGE_SETTING_CUSTOM_PATTERN_TABLE_TIPS: 說明
|
||||
MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TITLE: 預設下載鏈結有效期(秒)
|
||||
MANAGE_SETTING_PRESIGNED_URL_EXPIRE_TIPS: 請輸入下載鏈結有效期
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_TITLE: 選擇預設複製的連結格式
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN: Markdown
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_MARKDOWN_WITH_LINK: Markdown(帶連結)
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_RAWURL: 原始鏈結
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_HTML: HTML格式
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_BBCODE: BBCode格式
|
||||
MANAGE_SETTING_CHOOSE_COPY_FORMAT_CUSTOM: 自定義格式
|
||||
MANAGE_SETTING_CUSTOM_COPY_FORMAT_TITLE: 自定義鏈結格式($url為原始鏈結,$fileName為檔案名稱)
|
||||
MANAGE_SETTING_CUSTOM_COPY_FORMAT_TIPS: 請輸入自定義鏈結格式
|
||||
MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TITLE: 選擇下載目錄
|
||||
MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_TIPS: 系統預設下載目錄
|
||||
MANAGE_SETTING_CHOOSE_DOWNLOAD_FOLDER_BUTTON: 選擇目錄
|
||||
MANAGE_SETTING_COPY_MESSAGE: 已複製
|
||||
MANAGE_SETTING_CLEAR_CACHE_SUCCESS: 清除成功
|
||||
MANAGE_SETTING_CLEAR_CACHE_FAILED: 清除失敗
|
||||
MANAGE_SETTING_ISENCODEURL_TITLE: 複製鏈結時編碼
|
||||
MANAGE_SETTING_ISENCODEURL_TIPS: 啟用後,複製鏈結時將會編碼
|
||||
MANAGE_NO_DATA: 暫無數據
|
||||
MANAGE_MAIN_PAGE_NEW_BUCKET: 新建存儲桶
|
||||
MANAGE_MAIN_PAGE_BACK_TO_HOME: 返回首頁
|
||||
MANAGE_MAIN_PAGE_SWITCH_PICBED: 切換圖床
|
||||
MANAGE_MAIN_PAGE_SETTING: 設定
|
||||
MANAGE_MAIN_PAGE_SUBMIT: 提交
|
||||
MANAGE_MAIN_PAGE_TIPS: 提示
|
||||
MANAGE_MAIN_PAGE_TIPS_SUCCESS: 創建成功
|
||||
MANAGE_MAIN_PAGE_TIPS_FAILED: 創建失敗
|
||||
MANAGE_MAIN_PAGE_BUCKET: 存儲桶
|
||||
MANAGE_MAIN_PAGE_GALLERY: 圖庫
|
||||
MANAGE_MAIN_PAGE_REPOSITORY: 倉庫
|
||||
MANAGE_CONSTANT_BASE_RULE: 請輸入
|
||||
MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_A: 請輸入每頁顯示數量
|
||||
MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_B: 每頁顯示數量必須為數字
|
||||
MANAGE_CONSTANT_ITEMS_PAGE_RULE_MESSAGE_C: 每頁顯示數量必須在20-1000之間
|
||||
MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_A: 請輸入別名,該配置的唯一標識
|
||||
MANAGE_CONSTANT_ALIAS_RULE_MESSAGE_B: 別名只能包含中文、英文、數字、下劃線和中劃線
|
||||
MANAGE_CONSTANT_ALIAS_TOOLTIP: 別名只能包含中文、英文、數字、下劃線和中劃線
|
||||
MANAGE_CONSTANT_ITEMS_PAGE_TOOLTIP: 每頁顯示數量必須在20-1000之間
|
||||
MANAGE_CONSTANT_PAGING_TOOLTIP: 關閉分頁時,目錄列表將使用數據庫緩存以優化性能
|
||||
MANAGE_CONSTANT_BUCKET_NAME_TOOLTIP: 英文逗號分隔,如:bucket1,bucket2,bucket3,和起始目錄順序一一對應
|
||||
MANAGE_CONSTANT_BASE_DIR_TOOLTIP: 英文逗號分隔,如:/dir1,/dir2,/dir3, 和存儲桶順序一一對應
|
||||
MANAGE_CONSTANT_IS_AUTO_CUSTOM_URL_TOOLTIP: 開啟時,將自動獲取存儲桶綁定的域名,關閉時可手動填寫
|
||||
MANAGE_CONSTANT_SMMS_ALIAS_DESC: 配置別名-必需
|
||||
MANAGE_CONSTANT_SMMS_ALIAS_PLACEHOLDER: 該配置的唯一標識
|
||||
MANAGE_CONSTANT_SMMS_TOKEN_DESC: Token-必需
|
||||
MANAGE_CONSTANT_SMMS_TOKEN_PLACEHOLDER: 請填寫Token
|
||||
MANAGE_CONSTANT_SMMS_PAGING_DESC: 是否開啟分頁
|
||||
MANAGE_CONSTANT_SMMS_EXPLAIN: 大陸地區請訪問備用域名https://smms.app,請勿大批量上傳圖片,否則API接口會被限制
|
||||
MANAGE_CONSTANT_SMMS_REFER_TEXT: 配置教程請參考:
|
||||
MANAGE_CONSTANT_QINIU_NAME: 七牛雲
|
||||
MANAGE_CONSTANT_QINIU_ALIAS_DESC: 配置別名-必需
|
||||
MANAGE_CONSTANT_QINIU_ALIAS_PLACEHOLDER: 該配置的唯一標識
|
||||
MANAGE_CONSTANT_QINIU_ACCESS_KEY_DESC: accessKey-必需
|
||||
MANAGE_CONSTANT_QINIU_ACCESS_KEY_PLACEHOLDER: 請填寫 accessKey
|
||||
MANAGE_CONSTANT_QINIU_SECRET_KEY_DESC: secretKey-必需
|
||||
MANAGE_CONSTANT_QINIU_SECRET_KEY_PLACEHOLDER: 請填寫 secretKey
|
||||
MANAGE_CONSTANT_QINIU_BUCKET_DESC: 空間名-可選
|
||||
MANAGE_CONSTANT_QINIU_BUCKET_PLACEHOLDER: 英文逗號分隔,例如:bucket1,bucket2
|
||||
MANAGE_CONSTANT_QINIU_BASE_DIR_DESC: 起始目錄-可選
|
||||
MANAGE_CONSTANT_QINIU_BASE_DIR_PLACEHOLDER: 英文逗號分隔,例如:/dir1,/dir2
|
||||
MANAGE_CONSTANT_QINIU_IS_AUTO_CUSTOM_URL_DESC: 是否自動獲取綁定域名
|
||||
MANAGE_CONSTANT_QINIU_PAGING_DESC: 是否開啟分頁
|
||||
MANAGE_CONSTANT_QINIU_ITEMS_PAGE_DESC: 每頁顯示數量
|
||||
MANAGE_CONSTANT_QINIU_EXPLAIN: 空間名和起始目錄配置時可通過英文逗號分隔設置,順序必須一致,逗號間留空或缺失項使用默認值
|
||||
MANAGE_CONSTANT_QINIU_REFER_TEXT: '配置教程請參考: '
|
||||
MANAGE_CONSTANT_GITHUB_ALIAS_DESC: 配置別名-必需
|
||||
MANAGE_CONSTANT_GITHUB_ALIAS_PLACEHOLDER: 該配置的唯一標識
|
||||
MANAGE_CONSTANT_GITHUB_TOKEN_DESC: Token-必需
|
||||
MANAGE_CONSTANT_GITHUB_TOKEN_PLACEHOLDER: 請填寫Token
|
||||
MANAGE_CONSTANT_GITHUB_TOKEN_TIPS: 請提供具有完整repo權限的token,否則部分功能可能無法使用
|
||||
MANAGE_CONSTANT_GITHUB_USER_DESC: 用戶名-必需
|
||||
MANAGE_CONSTANT_GITHUB_USER_PLACEHOLDER: 請填寫用戶名
|
||||
MANAGE_CONSTANT_GITHUB_USER_RULE_MESSAGE: 用戶名
|
||||
MANAGE_CONSTANT_GITHUB_PROXY_DESC: 代理地址-可選
|
||||
MANAGE_CONSTANT_GITHUB_PROXY_PLACEHOLDER: 例如:http://127.0.0.1:1080
|
||||
MANAGE_CONSTANT_GITHUB_PROXY_TIPS: 如果訪問速度較慢,可以嘗試配置代理
|
||||
MANAGE_CONSTANT_GITHUB_PAGING_DESC: 是否開啟分頁
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_DESC: CDN加速域名-可選
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_PLACEHOLDER: 支持使用{username}、{repo}、{branch}和{path}作為替換占位符,用於適配不同倉庫和分支
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_TIPS: '例如: https://cdn.staticaly.com/gh/{username}/{repo}@{branch}/{path}'
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_A: 加速域名請以http://或https://開頭
|
||||
MANAGE_CONSTANT_GITHUB_CUSTOM_URL_RULE_MESSAGE_B: 加速域名中的大括號必須成對出現
|
||||
MANAGE_CONSTANT_GITHUB_EXPLAIN: API調用有每小時上限,此外不支持上傳超過100M的文件
|
||||
MANAGE_CONSTANT_GITHUB_REFER_TEXT: 配置教程請參考:
|
||||
MANAGE_CONSTANT_ALIYUN_NAME: 阿里雲
|
||||
MANAGE_CONSTANT_ALIYUN_ALIAS_DESC: 配置別名-必需
|
||||
MANAGE_CONSTANT_ALIYUN_ALIAS_PLACEHOLDER: 該配置的唯一標識
|
||||
MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_ID_DESC: accessKeyId-必需
|
||||
MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_DESC: accessKeySecret-必需
|
||||
MANAGE_CONSTANT_ALIYUN_ACCESS_KEY_SECRET_PLACEHOLDER: 請填寫accessKeySecret
|
||||
MANAGE_CONSTANT_ALIYUN_BUCKET_DESC: 儲存桶名-可選
|
||||
MANAGE_CONSTANT_ALIYUN_BUCKET_PLACEHOLDER: 英文逗號分隔,例如:bucket1,bucket2
|
||||
MANAGE_CONSTANT_ALIYUN_BASE_DIR_DESC: 起始目錄-可選
|
||||
MANAGE_CONSTANT_ALIYUN_BASE_DIR_PLACEHOLDER: 英文逗號分隔,例如:/dir1,/dir2
|
||||
MANAGE_CONSTANT_ALIYUN_IS_AUTO_CUSTOM_URL_DESC: 是否自動獲取綁定域名
|
||||
MANAGE_CONSTANT_ALIYUN_PAGING_DESC: 是否開啟分頁
|
||||
MANAGE_CONSTANT_ALIYUN_ITEMS_PAGE_DESC: 每頁顯示數量
|
||||
MANAGE_CONSTANT_ALIYUN_EXPLAIN: 儲存桶名和起始目錄配置時可通過英文逗號分隔不同儲存桶的設置,順序必須一致,逗號間留空或缺失項使用默認值
|
||||
MANAGE_CONSTANT_ALIYUN_REFER_TEXT: '配置教程請參考: '
|
||||
MANAGE_CONSTANT_TENCENT_NAME: 腾讯雲
|
||||
MANAGE_CONSTANT_TENCENT_ALIAS_DESC: 配置别名-必需
|
||||
MANAGE_CONSTANT_TENCENT_ALIAS_PLACEHOLDER: 該配置的唯一標識
|
||||
MANAGE_CONSTANT_TENCENT_SECRET_ID_DESC: secretId-必需
|
||||
MANAGE_CONSTANT_TENCENT_SECRET_ID_PLACEHOLDER: 請填寫 secretId
|
||||
MANAGE_CONSTANT_TENCENT_SECRET_KEY_DESC: secretKey-必需
|
||||
MANAGE_CONSTANT_TENCENT_SECRET_KEY_PLACEHOLDER: 請填寫 secretKey
|
||||
MANAGE_CONSTANT_TENCENT_APPID_DESC: appId-必需
|
||||
MANAGE_CONSTANT_TENCENT_APPID_PLACEHOLDER: 請填寫 appId
|
||||
MANAGE_CONSTANT_TENCENT_APPID_TOOLTIP: 例如:1250000000
|
||||
MANAGE_CONSTANT_TENCENT_BUCKET_DESC: 存儲桶名-可選(注意包含AppId)
|
||||
MANAGE_CONSTANT_TENCENT_BUCKET_PLACEHOLDER: 英文逗號分隔,例如:bucket1-1250000000,bucket2-1250000000
|
||||
MANAGE_CONSTANT_TENCENT_BASE_DIR_DESC: 起始目錄-可選
|
||||
MANAGE_CONSTANT_TENCENT_BASE_DIR_PLACEHOLDER: 英文逗號分隔,例如:/dir1,/dir2
|
||||
MANAGE_CONSTANT_TENCENT_IS_AUTO_CUSTOM_URL_DESC: 是否自動獲取綁定域名
|
||||
MANAGE_CONSTANT_TENCENT_PAGING_DESC: 是否開啟分頁
|
||||
MANAGE_CONSTANT_TENCENT_ITEMS_PAGE_DESC: 每頁顯示數量
|
||||
MANAGE_CONSTANT_TENCENT_EXPLAIN: 存儲桶名和起始目錄配置時可通過英文逗號分隔不同存儲桶的設置,順序必須一致,逗號間留空或缺失項使用默認值
|
||||
MANAGE_CONSTANT_TENCENT_REFER_TEXT: '配置教程請參考: '
|
||||
MANAGE_CONSTANT_UPYUN_NAME: 又拍雲
|
||||
MANAGE_CONSTANT_UPYUN_ALIAS_DESC: 配置別名-必需
|
||||
MANAGE_CONSTANT_UPYUN_ALIAS_PLACEHOLDER: 該配置的唯一標識
|
||||
MANAGE_CONSTANT_UPYUN_BUCKET_DESC: 服務名-必需
|
||||
MANAGE_CONSTANT_UPYUN_BUCKET_PLACEHOLDER: 對應其它對象存儲的存儲桶名
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_DESC: 操作員名-必需
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_PLACEHOLDER: 推薦使用具有讀取、寫入和刪除完整權限的操作員
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_NAME_RULE: 操作員
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_DESC: 操作員密碼-必需
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_PLACEHOLDER: 請填寫密碼
|
||||
MANAGE_CONSTANT_UPYUN_OPERATOR_PWD_RULE: 操作員密碼
|
||||
MANAGE_CONSTANT_UPYUN_BASE_DIR_DESC: 起始目錄-可選
|
||||
MANAGE_CONSTANT_UPYUN_BASE_DIR_PLACEHOLDER: 讀取文件時的初始目錄
|
||||
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_DESC: 加速域名-必需
|
||||
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_PLACEHOLDER: 請以http://或https://開頭
|
||||
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_A: 加速域名不能為空
|
||||
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_B: 自定義域名請以http://或https://開頭
|
||||
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_DESC: 防盗链密钥-可選
|
||||
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_PLACEHOLDER: 請填寫防盗链密钥
|
||||
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_TOOLTIP: 如果不填寫,則不啟用防盗链
|
||||
MANAGE_CONSTANT_UPYUN_EXPIRE_TIME_DESC: 防盗链有效期(秒)-可選
|
||||
MANAGE_CONSTANT_UPYUN_PAGING: 是否開啟分頁
|
||||
MANAGE_CONSTANT_UPYUN_ITEMS_PAGE: 每頁顯示數量
|
||||
MANAGE_CONSTANT_UPYUN_EXPLAIN: 又拍雲圖床必須填寫加速域名,否則無法正常使用
|
||||
MANAGE_CONSTANT_UPYUN_REFER_TEXT: '配置教程請參考: '
|
||||
MANAGE_CONSTANT_IMGUR_NAME: Imgur
|
||||
MANAGE_CONSTANT_IMGUR_ALIAS_DESC: 配置別名-必需
|
||||
MANAGE_CONSTANT_IMGUR_ALIAS_PLACEHOLDER: 該配置的唯一標識
|
||||
MANAGE_CONSTANT_IMGUR_USERNAME_DESC: Imgur用戶名-必需
|
||||
MANAGE_CONSTANT_IMGUR_USERNAME_PLACEHOLDER: 請填寫Imgur用戶名
|
||||
MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_DESC: Access Token-必需
|
||||
MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_PLACEHOLDER: 請填寫Access Token
|
||||
MANAGE_CONSTANT_IMGUR_ACCESS_TOKEN_TOOLTIP: 不是client ID,請參考配置教程
|
||||
MANAGE_CONSTANT_IMGUR_PROXY_DESC: 代理-可選
|
||||
MANAGE_CONSTANT_IMGUR_PROXY_PLACEHOLDER: 例如:http://127.0.0.1:1080
|
||||
MANAGE_CONSTANT_IMGUR_PROXY_TOOLTIP: 大陸地區請使用代理,否則無法正常使用
|
||||
MANAGE_CONSTANT_IMGUR_EXPLAIN: 大陸地區請使用代理,API調用存在限制,請注意使用頻率
|
||||
MANAGE_CONSTANT_IMGUR_REFER_TEXT: '配置教程請參考:'
|
||||
MANAGE_CONSTANT_S3_NAME: S3兼容雲
|
||||
MANAGE_CONSTANT_S3_ALIAS_DESC: 配置別名-必需
|
||||
MANAGE_CONSTANT_S3_ALIAS_PLACEHOLDER: 該配置的唯一標識
|
||||
MANAGE_CONSTANT_S3_ACCESS_KEY_ID_DESC: accessKeyId-必需
|
||||
MANAGE_CONSTANT_S3_ACCESS_KEY_ID_PLACEHOLDER: 請填寫accessKeyId
|
||||
MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_DESC: secretAccessKey-必需
|
||||
MANAGE_CONSTANT_S3_SECRET_ACCESS_KEY_PLACEHOLDER: 請填寫secretAccessKey
|
||||
MANAGE_CONSTANT_S3_ENDPOINT_DESC: endpoint-可選
|
||||
MANAGE_CONSTANT_S3_ENDPOINT_PLACEHOLDER: 例如:s3.us-east-1.amazonaws.com
|
||||
MANAGE_CONSTANT_S3_ENDPOINT_TOOLTIP: 如果不填寫,默認訪問 AWS S3,請提供根API endpoint
|
||||
MANAGE_CONSTANT_S3_SSLENABLED_DESC: 使用HTTPS連接
|
||||
MANAGE_CONSTANT_S3_SSLENABLED_TOOLTIP: 如果您的平臺不支持,請關閉該選項
|
||||
MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_DESC: 啟用 S3 Path style
|
||||
MANAGE_CONSTANT_S3_FORCE_PATH_STYLE_TOOLTIP: 例如使用 minio 時需要啟用
|
||||
MANAGE_CONSTANT_S3_PROXY_DESC: 代理-可選
|
||||
MANAGE_CONSTANT_S3_PROXY_PLACEHOLDER: 例如:http://127.0.0.1:1080
|
||||
MANAGE_CONSTANT_S3_PROXY_TOOLTIP: 如果部分平臺大陸地區無法訪問,請使用代理
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_DESC: 上傳文件的權限
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PRIVATE: 私有
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ: 公共讀
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_PUBLIC_READ_WRITE: 公共讀寫
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AUTHENTICATED_READ: 授權讀
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_READ: 桶所有者讀
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_BUCKET_OWNER_FULL_CONTROL: 桶所有者完全控制
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_OPTIONS_AWS_EXEC_READ: AWS執行讀
|
||||
MANAGE_CONSTANT_S3_ACL_FOR_UPLOAD_TOOLTIP: 上傳文件的權限,可選值:private、public-read、public-read-write、authenticated-read、bucket-owner-read、bucket-owner-full-control、aws-exec-read
|
||||
MANAGE_CONSTANT_S3_BUCKET_DESC: 存儲桶名-可選
|
||||
MANAGE_CONSTANT_S3_BUCKET_PLACEHOLDER: 英文逗號分隔,例如:bucket1,bucket2
|
||||
MANAGE_CONSTANT_S3_BASE_DIR_DESC: 起始目錄-可選
|
||||
MANAGE_CONSTANT_S3_BASE_DIR_PLACEHOLDER: 英文逗號分隔,例如:/dir1,/dir2
|
||||
MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_DESC: 啟用 Doge Cloud 支援
|
||||
MANAGE_CONSTANT_S3_DOGE_CLOUD_SUPPORT_TOOLTIP: 啟用後,將會啟用Doge Cloud API
|
||||
MANAGE_CONSTANT_S3_PAGING_DESC: 是否開啟分頁
|
||||
MANAGE_CONSTANT_S3_ITEMS_PAGE_DESC: 每頁顯示數量
|
||||
MANAGE_CONSTANT_S3_EXPLAIN: 存儲桶名和起始目錄配置時可通過英文逗號分隔不同存儲桶的設置,順序必須一致,逗號間留空或缺失項使用默認值
|
||||
MANAGE_CONSTANT_S3_REFER_TEXT: '配置教程請參考:'
|
||||
MANAGE_CONSTANT_WEBDAV_ALIAS_DESC: 配置別名-必需
|
||||
MANAGE_CONSTANT_WEBDAV_ALIAS_PLACEHOLDER: 該配置的唯一標識
|
||||
MANAGE_CONSTANT_WEBDAV_HOST_DESC: 地址-必需
|
||||
MANAGE_CONSTANT_WEBDAV_HOST_PLACEHOLDER: 例如:https://example.com/dav
|
||||
MANAGE_CONSTANT_WEBDAV_HOST_TOOLTIP: 請填寫完整的WebDAV地址
|
||||
MANAGE_CONSTANT_WEBDAV_USERNAME_DESC: 使用者名稱-必需
|
||||
MANAGE_CONSTANT_WEBDAV_USERNAME_PLACEHOLDER: 請填寫使用者名稱
|
||||
MANAGE_CONSTANT_WEBDAV_BUCKET_DESC: 特殊配置
|
||||
MANAGE_CONSTANT_WEBDAV_BUCKET_PLACEHOLDER: 例如:bucket1
|
||||
MANAGE_CONSTANT_WEBDAV_BUCKET_TOOLTIP: 此處不可修改,僅為軟體相容性考量
|
||||
MANAGE_CONSTANT_WEBDAV_PASSWORD_DESC: 密碼-必需
|
||||
MANAGE_CONSTANT_WEBDAV_PASSWORD_PLACEHOLDER: 請填寫密碼
|
||||
MANAGE_CONSTANT_WEBDAV_BASE_DIR_DESC: 起始目錄-可選
|
||||
MANAGE_CONSTANT_WEBDAV_BASE_DIR_PLACEHOLDER: 例如:/dir1
|
||||
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_DESC: 自訂網域名稱-可選
|
||||
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_PLACEHOLDER: 例如:https://example.com
|
||||
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_TOOLTIP: 如果您的WebDAV伺服器支援自訂網域名稱,請填寫
|
||||
MANAGE_CONSTANT_WEBDAV_CUSTOM_URL_RULE_MESSAGE: 自訂網域名稱請以http://或https://開頭
|
||||
MANAGE_CONSTANT_WEBDAV_WEB_PATH: WebDAV網路路徑-可選
|
||||
MANAGE_CONSTANT_WEBDAV_WEB_PATH_PLACEHOLDER: 例如:test/ttc
|
||||
MANAGE_CONSTANT_WEBDAV_WEB_PATH_TOOLTIP: 用於拼接網址
|
||||
MANAGE_CONSTANT_WEBDAV_PROXY_DESC: 代理-可選
|
||||
MANAGE_CONSTANT_WEBDAV_PROXY_PLACEHOLDER: 例如:http://127.0.0.1:1080
|
||||
MANAGE_CONSTANT_WEBDAV_PROXY_TOOLTIP: 如果需要特殊網路環境才能訪問,請使用代理
|
||||
MANAGE_CONSTANT_WEBDAV_SSL_DESC: 使用HTTPS連線
|
||||
MANAGE_CONSTANT_WEBDAV_SSL_TOOLTIP: 根據WebDAV伺服器的配置,如果您的伺服器不支援HTTPS,請關閉該選項
|
||||
MANAGE_CONSTANT_WEBDAV_AUTH_TYPE_DESC: 認證類型
|
||||
MANAGE_CONSTANT_WEBDAV_EXPLAIN: WebDAV配置
|
||||
MANAGE_CONSTANT_WEBDAV_REFER_TEXT: '配置教程請參考: '
|
||||
MANAGE_CONSTANT_LOCAL_NAME: 本地
|
||||
MANAGE_CONSTANT_LOCAL_ALIAS_DESC: 配置別名-必需
|
||||
MANAGE_CONSTANT_LOCAL_ALIAS_PLACEHOLDER: 該配置的唯一標識
|
||||
MANAGE_CONSTANT_LOCAL_BASE_DIR_DESC: 起始目錄-必需
|
||||
MANAGE_CONSTANT_LOCAL_BASE_DIR_PLACEHOLDER: 請填寫起始目錄
|
||||
MANAGE_CONSTANT_LOCAL_CUSTOM_URL_DESC: 自定義網域-可選
|
||||
MANAGE_CONSTANT_LOCAL_CUSTOM_URL_PLACEHOLDER: 例如:https://example.com
|
||||
MANAGE_CONSTANT_LOCAL_CUSTOM_URL_TOOLTIP: 如果您的目錄支援自定義網域,請填寫
|
||||
MANAGE_CONSTANT_LOCAL_WEB_PATH: 網路路徑-可選
|
||||
MANAGE_CONSTANT_LOCAL_WEB_PATH_PLACEHOLDER: 例如:test/ttc
|
||||
MANAGE_CONSTANT_LOCAL_WEB_PATH_TOOLTIP: 用於拼接網址
|
||||
MANAGE_CONSTANT_LOCAL_EXPLAIN: 本地配置
|
||||
MANAGE_CONSTANT_LOCAL_REFER_TEXT: '配置教程請參考: '
|
||||
MANAGE_CONSTANT_LOCAL_BASE_DIR_RULE_MESSAGE: 起始目錄不能為空
|
||||
MANAGE_CONSTANT_LOCAL_BUCKET_DESC: 特殊配置
|
||||
MANAGE_CONSTANT_LOCAL_BUCKET_PLACEHOLDER: 例如:bucket1
|
||||
MANAGE_CONSTANT_LOCAL_BUCKET_TOOLTIP: 此處不可修改,僅為軟體相容性考量
|
||||
MANAGE_CONSTANT_SFTP_NAME: SFTP
|
||||
MANAGE_CONSTANT_SFTP_ALIAS_DESC: 配置別名-必需
|
||||
MANAGE_CONSTANT_SFTP_ALIAS_PLACEHOLDER: 該配置的唯一標識
|
||||
MANAGE_CONSTANT_SFTP_HOST_DESC: 地址-必需
|
||||
MANAGE_CONSTANT_SFTP_HOST_PLACEHOLDER: 例如:233.233.233.233
|
||||
MANAGE_CONSTANT_SFTP_PORT_DESC: 端口-必需
|
||||
MANAGE_CONSTANT_SFTP_PORT_PLACEHOLDER: 例如:22
|
||||
MANAGE_CONSTANT_SFTP_USERNAME_DESC: 用戶名
|
||||
MANAGE_CONSTANT_SFTP_USERNAME_PLACEHOLDER: 請填寫用戶名
|
||||
MANAGE_CONSTANT_SFTP_PASSWORD_DESC: 密碼
|
||||
MANAGE_CONSTANT_SFTP_PASSWORD_PLACEHOLDER: 請填寫密碼
|
||||
MANAGE_CONSTANT_SFTP_PRIVATE_KEY_DESC: 私鑰地址
|
||||
MANAGE_CONSTANT_SFTP_PRIVATE_KEY_PLACEHOLDER: 請填寫私鑰地址
|
||||
MANAGE_CONSTANT_SFTP_PASSPHRASE_DESC: 私鑰密碼
|
||||
MANAGE_CONSTANT_SFTP_PASSPHRASE_PLACEHOLDER: 請填寫私鑰密碼
|
||||
MANAGE_CONSTANT_SFTP_BASE_DIR_DESC: 起始目錄-可選
|
||||
MANAGE_CONSTANT_SFTP_BASE_DIR_PLACEHOLDER: 例如:/dir1
|
||||
MANAGE_CONSTANT_SFTP_CUSTOM_URL_DESC: 自定義網域-可選
|
||||
MANAGE_CONSTANT_SFTP_CUSTOM_URL_PLACEHOLDER: 例如:https://example.com
|
||||
MANAGE_CONSTANT_SFTP_CUSTOM_URL_TOOLTIP: 如果您的目錄支援自定義網域,請填寫
|
||||
MANAGE_CONSTANT_SFTP_WEB_PATH: 網路路徑-可選
|
||||
MANAGE_CONSTANT_SFTP_WEB_PATH_PLACEHOLDER: 例如:test/ttc
|
||||
MANAGE_CONSTANT_SFTP_WEB_PATH_TOOLTIP: 用於拼接網址
|
||||
MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_DESC: 文件權限
|
||||
MANAGE_CONSTANT_SFTP_FILE_PERMISSIONS_PLACEHOLDER: 例如:0644
|
||||
MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_DESC: 目錄權限
|
||||
MANAGE_CONSTANT_SFTP_DIR_PERMISSIONS_PLACEHOLDER: 例如:0755
|
||||
MANAGE_CONSTANT_SFTP_EXPLAIN: SFTP配置
|
||||
MANAGE_CONSTANT_SFTP_REFER_TEXT: '配置教程請參考: '
|
||||
MANAGE_CONSTANT_SFTP_BASE_DIR_RULE_MESSAGE: 起始目錄不能為空
|
||||
MANAGE_CONSTANT_SFTP_BUCKET_DESC: 特殊配置
|
||||
MANAGE_CONSTANT_SFTP_BUCKET_PLACEHOLDER: 例如:bucket1
|
||||
MANAGE_CONSTANT_SFTP_BUCKET_TOOLTIP: 此處不可修改,僅為軟體相容性考量
|
||||
MANAGE_LOGIN_PAGE_PANE_NAME: 已保存配置
|
||||
MANAGE_LOGIN_PAGE_PANE_KEY_NAME: 配置項
|
||||
MANAGE_LOGIN_PAGE_PANE_KEY_VALUE: 值
|
||||
MANAGE_LOGIN_PAGE_PANE_ENTER: 進入
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE: 刪除
|
||||
MANAGE_LOGIN_PAGE_PANE_SELECT_PLACEHOLDER: 請選擇
|
||||
MANAGE_LOGIN_PAGE_PANE_IMPORT: 導入
|
||||
MANAGE_LOGIN_PAGE_PANE_SAVE: 保存
|
||||
MANAGE_LOGIN_PAGE_PANE_RESET: 重置
|
||||
MANAGE_LOGIN_PAGE_PANE_TABLE_TITLE: 已有配置,單擊可複製對應儲存格資料
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_MESSAGE_A: 請填寫
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ALIAS_MESSAGE: 別名只能包含中文、英文、數字、下劃線和中劃線
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_ITEMS_PER_PAGE_MESSAGE: 每頁數量必須在20-1000之間
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_CUSTOM_URL_MESSAGE: 自定義網域請以http://或https://開頭
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_NAME: 通知
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE: 已覆蓋別名
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_B: 已保存別名
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_C: 已刪除別名
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_D: 刪除別名為
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_NOTICE_MESSAGE_E: 的配置失敗
|
||||
MANAGE_LOGIN_PAGE_PANE_CONFIG_CHANGE_COPY_SUCCESS: 已複製
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TITLE: 確定要删除嗎??
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_TIP: 提示
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CONFIRM: 確定
|
||||
MANAGE_LOGIN_PAGE_PANE_DELETE_CONFIG_CANCEL: 取消
|
||||
MANAGE_BUCKET_PAGE_LOADING_TEXT: 載入檔案中...
|
||||
MANAGE_BUCKET_PAGE_CUSTOM_URL_SELECT_PLACEHOLDER: 請選擇自訂域名
|
||||
MANAGE_BUCKET_PAGE_CUSTOM_URL_INPUT_PLACEHOLDER: 請輸入自訂域名
|
||||
MANAGE_BUCKET_PAGE_UPLOAD_FILES_TOOLTIP: 檔案上傳(支援多選)
|
||||
MANAGE_BUCKET_PAGE_UPLOAD_FROM_URL_TOOLTIP: 從 URL 上傳
|
||||
MANAGE_BUCKET_PAGE_CREATE_FOLDER_TOOLTIP: 建立資料夾
|
||||
MANAGE_BUCKET_PAGE_DOWNLOAD_TOOLTIP: 下載頁面
|
||||
MANAGE_BUCKET_PAGE_BATCH_RENAME_TOOLTIP: 批次重新命名
|
||||
MANAGE_BUCKET_PAGE_BATCH_COPY_URL_TOOLTIP: 批次複製 URL
|
||||
MANAGE_BUCKET_PAGE_COPY_FILE_INFO_TOOLTIP: 複製檔案資訊
|
||||
MANAGE_BUCKET_PAGE_FORCE_REFRESH_TOOLTIP: 強制重新整理檔案列表
|
||||
MANAGE_BUCKET_PAGE_SEARCH_PLACEHOLDER: 搜尋檔案
|
||||
MANAGE_BUCKET_PAGE_ROOT_FOLDER: 根目錄
|
||||
MANAGE_BUCKET_PAGE_FILE_NUMBER: 檔案數:
|
||||
MANAGE_BUCKET_PAGE_FILE_SIZE: 總大小:
|
||||
MANAGE_BUCKET_PAGE_SELECT_ALL: 全選
|
||||
MANAGE_BUCKET_PAGE_SELECT_NONE: 取消選擇
|
||||
MANAGE_BUCKET_PAGE_SELECT_INVERT: 反選
|
||||
MANAGE_BUCKET_DOWNLOAD_BTN: 下載
|
||||
MANAGE_BUCKET_DELETE_BTN: 刪除
|
||||
MANAGE_BUCKET_SORT_TITLE: 排序
|
||||
MANAGE_BUCKET_SORT_NAME: 檔案名稱
|
||||
MANAGE_BUCKET_SORT_SIZE: 大小
|
||||
MANAGE_BUCKET_SORT_EXT: 類型
|
||||
MANAGE_BUCKET_SORT_TIME: 時間
|
||||
MANAGE_BUCKET_SORT_CHECK: 選取狀態
|
||||
MANAGE_BUCKET_SORT_INIT: 初始化
|
||||
MANAGE_BUCKET_URL_UPLOAD_DIALOG_TITLE: 請輸入 URL,支援多個 URL,以換行分隔
|
||||
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CONFIRM: 確定
|
||||
MANAGE_BUCKET_URL_UPLOAD_DIALOG_CANCEL: 取消
|
||||
MANAGE_BUCKET_URL_FORMAT_MARKDOWN: Markdown
|
||||
MANAGE_BUCKET_URL_FORMAT_MARKDOWN_WITH_LINK: Markdown-link
|
||||
MANAGE_BUCKET_URL_FORMAT_URL: Url
|
||||
MANAGE_BUCKET_URL_FORMAT_HTML: Html
|
||||
MANAGE_BUCKET_URL_FORMAT_BBCODE: BBCode
|
||||
MANAGE_BUCKET_URL_FORMAT_CUSTOM: 自訂
|
||||
MANAGE_BUCKET_URL_FORMAT_PRESIGN: 預簽名連結
|
||||
MANAGE_BUCKET_FILE_INFO_TITLE: 檔案資訊
|
||||
MANAGE_BUCKET_FILE_INFO_COPY_TIPS: 複製 JSON 格式資訊
|
||||
MANAGE_BUCKET_FILE_LIST_LOADING: 載入中,點擊取消
|
||||
MANAGE_BUCKET_FILE_LIST_DOWNLOAD_PRE: 準備下載中,點擊取消
|
||||
MANAGE_BUCKET_KEEP_FOLDER_STRUCTURE: 保持目錄結構
|
||||
MANAGE_BUCKET_NOT_KEEP_FOLDER_STRUCTURE: 不保持目錄結構
|
||||
MANAGE_BUCKET_UPLOAD_AREA_TITLE: 拖放上傳支援遞歸上傳資料夾
|
||||
MANAGE_BUCKET_UPLOAD_AREA_TEXT: 或:點選選擇檔案(不支援資料夾)
|
||||
MANAGE_BUCKET_UPLOAD_AREA_BTN_LOADING: 讀取檔案中
|
||||
MANAGE_BUCKET_UPLOAD_AREA_BTN: 上傳
|
||||
MANAGE_BUCKET_UPLOAD_AREA_CLEAR: 清空
|
||||
MANAGE_BUCKET_UPLOAD_AREA_STATUS_UPLOADING: 上傳中
|
||||
MANAGE_BUCKET_UPLOAD_AREA_COPY_TASK: 複製上傳任務資訊
|
||||
MANAGE_BUCKET_UPLOAD_AREA_CLEAR_UPLOADED_TASK: 清空已完成任務
|
||||
MANAGE_BUCKET_UPLOAD_AREA_CLEAR_ALL_TASK: 清空所有任務
|
||||
MANAGE_BUCKET_UPLOAD_AREA_SUCCESS: 成功
|
||||
MANAGE_BUCKET_UPLOAD_AREA_FAILED: 失敗
|
||||
MANAGE_BUCKET_DOWNLOAD_PAGE_TITLE: 下載頁面
|
||||
MANAGE_BUCKET_DOWNLOADING: 下載中
|
||||
MANAGE_BUCKET_DOWNLOAD_COPY_TASK: 複製下載任務資訊
|
||||
MANAGE_BUCKET_DOWNLOAD_CLEAR_DOWNLOADED_TASK: 清空已完成任務
|
||||
MANAGE_BUCKET_DOWNLOAD_CLEAR_ALL_TASK: 清空所有任務
|
||||
MANAGE_BUCKET_DOWNLOAD_OPEN_FOLDER: 開啟下載目錄
|
||||
MANAGE_BUCKET_DOWNLOAD_SUCCESS: 成功
|
||||
MANAGE_BUCKET_DOWNLOAD_FAILED: 失敗
|
||||
MANAGE_BUCKET_MARKDOWN_PREVIEW: 預覽
|
||||
MANAGE_BUCKET_PLAY: 播放
|
||||
MANAGE_BUCKET_RENAME_FILE: 檔案重新命名
|
||||
MANAGE_BUCKET_RENAME_FILE_INPUT_A: 進行替換時匹配的字串或 JS 正則表達式
|
||||
MANAGE_BUCKET_RENAME_FILE_INPUT_A_TIPS: 正則表達式請直接輸入,不需要加上 /
|
||||
MANAGE_BUCKET_RENAME_FILE_INPUT_A_PLACEHOLDER: 例如:^\d{4}-\d{2}-\d{2}
|
||||
MANAGE_BUCKET_RENAME_FILE_INPUT_B: 需要替換的字串,可使用自訂重新命名規則中的佔位符
|
||||
MANAGE_BUCKET_RENAME_FILE_TABLE_IID: 自增數字
|
||||
MANAGE_BUCKET_RENAME_FILE_EXT: 是否匹配副檔名進行替換
|
||||
MANAGE_BUCKET_RENAME_FILE_EXT_TIPS: 如果希望修改副檔名,請勾選此項
|
||||
MANAGE_BUCKET_RENAME_FILE_EXT_YES: 是
|
||||
MANAGE_BUCKET_RENAME_FILE_EXT_NO: 否
|
||||
MANAGE_BUCKET_RENAME_FILE_CANCEL: 取消
|
||||
MANAGE_BUCKET_RENAME_FILE_CONFIRM: 確定
|
||||
MANAGE_BUCKET_COPY_SUCCESS: 複製成功
|
||||
MANAGE_BUCKET_START_LOADING_MESSAGE: 開始取得檔案
|
||||
MANAGE_BUCKET_END_LOADING_MESSAGE_FAIL: 取得檔案內容失敗
|
||||
MANAGE_BUCKET_LAST_PAGE_TITLE: 提示
|
||||
MANAGE_BUCKET_LAST_PAGE_MSG: 已經是最後一頁了
|
||||
MANAGE_BUCKET_GET_LIST_FAIL_TITLE: 提示
|
||||
MANAGE_BUCKET_GET_LIST_FAIL_MSG: 獲取檔案列表失敗
|
||||
MANAGE_BUCKET_GET_LIST_FAIL_MSG2: 正在後台獲取檔案列表,請勿切換頁面
|
||||
MANAGE_BUCKET_GET_LIST_FAIL_MSG3: 正在載入檔案列表,請稍後再試
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TITLE: 確定要下載該資料夾嗎?
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_TIP: 提示
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CONFIRM: 確定
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_BOX_CANCEL: 取消
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_SUCCESS: 獲取下載列表成功
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_FAIL: 獲取失敗
|
||||
MANAGE_BUCKET_DOWNLOAD_FOLDER_CANCEL: 已取消
|
||||
MANAGE_BUCKET_CREATE_FOLDER_BOX_TITLE: 請輸入資料夾名稱
|
||||
MANAGE_BUCKET_CREATE_FOLDER_BOX_TIP: 新建資料夾
|
||||
MANAGE_BUCKET_CREATE_FOLDER_BOX_CONFIRM: 確定
|
||||
MANAGE_BUCKET_CREATE_FOLDER_BOX_CANCEL: 取消
|
||||
MANAGE_BUCKET_CREATE_FOLDER_ERROR_MSG: 資料夾名稱只能包含中文、英文、數字、下劃線和斜線
|
||||
MANAGE_BUCKET_CREATE_FOLDER_SUCCESS: 創建成功,請刷新
|
||||
MANAGE_BUCKET_CREATE_FOLDER_FAIL: 創建失敗
|
||||
MANAGE_BUCKET_UPLOAD_URL_ERROR_MSQ: 請輸入有效的URL
|
||||
MANAGE_BUCKET_UPLOAD_URL_NOT_TITLE: 提示
|
||||
MANAGE_BUCKET_UPLOAD_URL_NOT_MSG: 開始後台下載,成功後自動上傳
|
||||
MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG: 請輸入匹配字串
|
||||
MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG2: 沒有匹配到檔案
|
||||
MANAGE_BUCKET_BATCH_RENAME_ERROR_MSG3: 沒有需要重命名的檔案
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_A: 檢測到有
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_B: 個檔案重複,是否繼續
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_MSG_C: 提示
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_CONFIRM: 確定
|
||||
MANAGE_BUCKET_BATCH_RENAME_REPEATED_CANCEL: 取消
|
||||
MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_A: 重命名成功
|
||||
MANAGE_BUCKET_BATCH_RENAME_RESULT_MSG_B: 失敗
|
||||
MANAGE_BUCKET_BATCH_RENAME_CANCEL: 已取消
|
||||
MANAGE_BUCKET_BATCH_COPY_INFO_ERROR_MSG: 請先選擇檔案
|
||||
MANAGE_BUCKET_BATCH_COPY_INFO_MSG_A: 已複製
|
||||
MANAGE_BUCKET_BATCH_COPY_INFO_MSG_B: 個檔案資訊
|
||||
MANAGE_BUCKET_BATCH_COPY_URL_ERROR_MSG: 請先選擇檔案
|
||||
MANAGE_BUCKET_BATCH_COPY_URL_MSG_A: 已複製
|
||||
MANAGE_BUCKET_BATCH_COPY_URL_MSG_B: 個連結
|
||||
MANAGE_BUCKET_CANCEL_LOADING_TITLE: 是否停止獲取檔案列表?
|
||||
MANAGE_BUCKET_CANCEL_LOADING_MSG: 提示
|
||||
MANAGE_BUCKET_CANCEL_LOADING_CONFIRM: 确定
|
||||
MANAGE_BUCKET_CANCEL_LOADING_CANCEL: 取消
|
||||
MANAGE_BUCKET_CANCEL_LOADING_SUCCESS: 文件列表获取已停止
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_TITLE: 是否停止下载文件获取?
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_MSG: 提示
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CONFIRM: 确定
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_CANCEL: 取消
|
||||
MANAGE_BUCKET_CANCEL_DOWNLOAD_LOADING_SUCCESS: 下载文件获取已停止
|
||||
MANAGE_BUCKET_GET_FILE_BS_NOT_TITLE: 提示
|
||||
MANAGE_BUCKET_GET_FILE_BS_NOT_MSG: 获取文件列表成功
|
||||
MANAGE_BUCKET_GET_FILE_BS_NOT_MSG2: 部分文件获取失败
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_A: 将永久删除
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_TITLE_B: 个文件,是否继续?
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_MSG: 提示
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CONFIRM: 确定
|
||||
MANAGE_BUCKET_BATCH_DELETE_CONFIRM_CANCEL: 取消
|
||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_TITLE: 提示
|
||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG: 删除失败
|
||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG2: 删除成功
|
||||
MANAGE_BUCKET_BATCH_DELETE_ERROR_MSG_MSG3: 失败
|
||||
MANAGE_BUCKET_BATCH_DELETE_CANCEL: 已取消删除
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE: 将永久删除
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER: 文件夹
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FOLDER_A: 和该目录下的所有文件
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_FILE: 文件
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_TITLE_C: 是否继续
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_MSG: 提示
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_CONFIRM: 确定
|
||||
MANAGE_BUCKET_DELETE_CONFIRM_CANCEL: 取消
|
||||
MANAGE_BUCKET_DELETE_ERROR_MSG_TITLE: 提示
|
||||
MANAGE_BUCKET_DELETE_ERROR_MSG_MSG: 删除文件夹可能需要一段时间,请耐心等待
|
||||
MANAGE_BUCKET_DELETE_SUCCESS: 刪除成功
|
||||
MANAGE_BUCKET_DELETE_FAIL: 刪除失敗
|
||||
MANAGE_BUCKET_DELETE_CANCEL: 已取消删除
|
||||
MANAGE_BUCKET_RENAME_INFO_MSG: 新文件名和原文件名相同,無需重命名
|
||||
MANAGE_BUCKET_RENAME_SUCCESS: 重命名成功
|
||||
MANAGE_BUCKET_RENAME_ERROR_MSG: 重命名失敗
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_FILENAME: 文件名
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_FINISHTIME: 完成時間
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS: 狀態
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_SUCCESS: 成功
|
||||
MANAGE_BUCKET_DOWNLOAD_COLUMN_STATUS_FAIL: 失敗
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_FILENAME: 文件名
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_TARGETFILEPATH: 上傳路徑
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_FINISHTIME: 完成時間
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_STATUS: 狀態
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_SUCCESS: 成功
|
||||
MANAGE_BUCKET_UPLOAD_COLUMN_STATUS_FAIL: 失敗
|
||||
MANAGE_BUCKET_DOWNLOADING_COLUMN_FILENAME: 文件名
|
||||
MANAGE_BUCKET_DOWNLOADING_COLUMN_PROGRESS: 進度
|
||||
MANAGE_BUCKET_UPLOADING_COLUMN_FILENAME: 文件名
|
||||
MANAGE_BUCKET_UPLOADING_COLUMN_PROGRESS: 進度
|
||||
MANAGE_BUCKET_UPLOADED_COLUMN_FILENAME: 文件名
|
||||
MANAGE_BUCKET_UPLOADED_COLUMN_FILESIZE: 大小
|
||||
MANAGE_BUCKET_UPLOADED_COLUMN_FILENUM: 文件數
|
||||
MANAGE_BUCKET_FILE_COLUMN_FILENAME: 文件名
|
||||
MANAGE_BUCKET_FILE_COLUMN_COPY_URL: 複製鏈接
|
||||
MANAGE_BUCKET_FILE_COLUMN_INFO: 文件信息
|
||||
MANAGE_BUCKET_FILE_COLUMN_FILESIZE: 大小
|
||||
MANAGE_BUCKET_FILE_COLUMN_TIME: 修改時間
|
||||
MANAGE_NEW_BUCKET_TCYUN_NAME: 腾讯雲
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_DESC: Bucket名稱
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_PLACEHOLDER: 請輸入Bucket名稱
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_A: Bucket名稱不能為空
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_B: Bucket名稱長度不能超過23個字符
|
||||
MANAGE_NEW_BUCKET_TCYUN_BUCKETNAME_RULE_MSG_C: Bucket名稱只能包含小寫字母、數字和中橫線,且不能以中橫線開頭和結尾
|
||||
MANAGE_NEW_BUCKET_TCYUN_REGION: 區域
|
||||
MANAGE_NEW_BUCKET_TCYUN_ACL_DESC: 訪問權限
|
||||
MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_RW: 公共讀寫
|
||||
MANAGE_NEW_BUCKET_TCYUN_ACL_PUBLIC_R: 公共讀
|
||||
MANAGE_NEW_BUCKET_TCYUN_ACL_PRIVATE: 私有
|
||||
MANAGE_NEW_BUCKET_ALIYUN_NAME: 阿里雲
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_DESC: Bucket名稱
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_PLACEHOLDER: 請輸入Bucket名稱
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_A: Bucket名稱不能為空
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_B: Bucket名稱長度不能超過63個字符
|
||||
MANAGE_NEW_BUCKET_ALIYUN_BUCKETNAME_RULE_MSG_C: Bucket名稱只能包含小寫字母、數字和中橫線,且不能以中橫線開頭和結尾
|
||||
MANAGE_NEW_BUCKET_ALIYUN_REGION: 區域
|
||||
MANAGE_NEW_BUCKET_ALIYUN_ACL_DESC: 訪問權限
|
||||
MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_RW: 公共讀寫
|
||||
MANAGE_NEW_BUCKET_ALIYUN_ACL_PUBLIC_R: 公共讀
|
||||
MANAGE_NEW_BUCKET_ALIYUN_ACL_PRIVATE: 私有
|
||||
MANAGE_NEW_BUCKET_QINIU_NAME: 七牛雲
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_DESC: Bucket名稱
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_PLACEHOLDER: 請輸入Bucket名稱
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_A: Bucket名稱不能為空
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_B: Bucket名稱長度不能超過63個字符
|
||||
MANAGE_NEW_BUCKET_QINIU_BUCKETNAME_RULE_MSG_C: Bucket名稱只能包含小寫字母、數字和中橫線,且不能以中橫線開頭和結尾
|
||||
MANAGE_NEW_BUCKET_QINIU_REGION: 區域
|
||||
MANAGE_NEW_BUCKET_QINIU_ACL_DESC: 公開訪問
|
||||
MANAGE_NEW_BUCKET_S3PLIST_NAME: S3兼容雲
|
||||
MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_DESC: Bucket名稱
|
||||
MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_PLACEHOLDER: 請輸入Bucket名稱
|
||||
MANAGE_NEW_BUCKET_S3PLIST_BUCKETNAME_RULE_MSG_A: Bucket名稱不能為空
|
||||
MANAGE_NEW_BUCKET_S3PLIST_REGION: 區域
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_DESC: 訪問權限
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_RW: 公共讀寫
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_PUBLIC_R: 公共讀
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_PRIVATE: 私有
|
||||
MANAGE_NEW_BUCKET_S3PLIST_ACL_AUTHENTICATED_READ: 授權讀
|
||||
PLUGIN_INSTALL_FAILED: 插件安裝失敗
|
||||
PLUGIN_UNINSTALL_FAILED: 插件卸載失敗
|
||||
PLUGIN_UPDATE_SUCCEED: 插件更新成功
|
||||
PLUGIN_UPDATE_FAILED: 插件更新失敗
|
||||
PLUGIN_IMPORT_SUCCEED: 插件導入成功
|
||||
PLUGIN_IMPORT_FAILED: 插件導入失敗
|
||||
ENABLE_PLUGIN: 啟用插件
|
||||
DISABLE_PLUGIN: 禁用插件
|
||||
UNINSTALL_PLUGIN: 卸載插件
|
||||
UPDATE_PLUGIN: 更新插件
|
||||
TIPS_NOTICE: 注意
|
||||
TIPS_WARNING: 警告
|
||||
TIPS_ERROR: 發生錯誤
|
||||
TIPS_INSTALL_NODE_AND_RELOAD_PICGO: 請安裝Node.js並重新啟動PicList再繼續操作
|
||||
TIPS_PLUGIN_REMOVE_GALLERY_ITEM: 有插件正在試圖刪除一些相簿圖片,是否繼續?
|
||||
TIPS_UPLOAD_NOT_PICTURES: 剪貼簿最新的一條記錄不是圖片
|
||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_DEFAULT: PicList設定檔案已損壞,已經恢復為預設設定
|
||||
TIPS_PICGO_CONFIG_FILE_BROKEN_WITH_BACKUP: PicList 設定檔案已損壞,已經恢復為備份設定
|
||||
TIPS_PICGO_BACKUP_FILE_VERSION: '備份檔案版本: ${v}'
|
||||
TIPS_SHORTCUT_MODIFIED_SUCCEED: 快捷鍵已經修改成功
|
||||
TIPS_SHORTCUT_MODIFIED_CONFLICT: 快捷鍵衝突,請重新設定
|
||||
TIPS_CUSTOM_CONFIG_FILE_PATH_ERROR: 自訂設定檔案解析出錯,請檢查路徑內容是否正確
|
||||
TIPS_FIND_NEW_VERSION: 發現新版本${v},更新了很多功能,是否後台下載最新的版本?
|
||||
UPDATE_DOWNLOADED: 更新已下載
|
||||
TIPS_UPDATE_DOWNLOADED: 更新已下載,将在下次啟動時安裝,是否立即重啟?
|
||||
QUIT: 退出
|
||||
13
dist/renderer/index.html
vendored
@@ -1,13 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>PicList</title>
|
||||
<script type="module" crossorigin src="./assets/index-BqdcQlNn.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="./assets/index-mOcaXuMe.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
</body>
|
||||
34
dist/renderer/linux.sh
vendored
@@ -1,34 +0,0 @@
|
||||
#!/bin/sh
|
||||
if [ "$XDG_SESSION_TYPE" = "x11" ]; then
|
||||
# require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)
|
||||
command -v xclip >/dev/null 2>&1 || { echo >&1 "no xclip"; exit 1; }
|
||||
# write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)
|
||||
filePath=`xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-`
|
||||
if [ ! -n "$filePath" ] ;then
|
||||
if
|
||||
xclip -selection clipboard -target image/png -o >/dev/null 2>&1
|
||||
then
|
||||
xclip -selection clipboard -target image/png -o >$1 2>/dev/null
|
||||
echo $1
|
||||
else
|
||||
echo "no image"
|
||||
fi
|
||||
else
|
||||
echo $filePath
|
||||
fi
|
||||
elif [ "$XDG_SESSION_TYPE" = "wayland" ]; then
|
||||
command -v wl-copy >/dev/null 2>&1 || { echo >&1 "no wl-clipboard"; exit 1; }
|
||||
filePath=`wl-copy -o 2>/dev/null | grep ^file:// | cut -c8-`
|
||||
if [ ! -n "$filePath" ] ;then
|
||||
if
|
||||
wl-copy -t image/png -o >/dev/null 2>&1
|
||||
then
|
||||
wl-copy -t image/png image/png -o >$1 2>/dev/null
|
||||
echo $1
|
||||
else
|
||||
echo "no image"
|
||||
fi
|
||||
else
|
||||
echo $filePath
|
||||
fi
|
||||
fi
|
||||
BIN
dist/renderer/loading.jpg
vendored
|
Before Width: | Height: | Size: 9.2 KiB |
BIN
dist/renderer/logo.png
vendored
|
Before Width: | Height: | Size: 109 KiB |
BIN
dist/renderer/mac.applescript
vendored
BIN
dist/renderer/menubar 256.png
vendored
|
Before Width: | Height: | Size: 5.2 KiB |
BIN
dist/renderer/menubar-newdarwin.png
vendored
|
Before Width: | Height: | Size: 1.1 KiB |
BIN
dist/renderer/menubar-newdarwin@2.png
vendored
|
Before Width: | Height: | Size: 1.7 KiB |
BIN
dist/renderer/menubar-newdarwin@3.png
vendored
|
Before Width: | Height: | Size: 2.6 KiB |
BIN
dist/renderer/menubar-newdarwinTemplate.png
vendored
|
Before Width: | Height: | Size: 639 B |
BIN
dist/renderer/menubar-newdarwinTemplate@2x.png
vendored
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
dist/renderer/menubar-newdarwinTemplate@3x.png
vendored
|
Before Width: | Height: | Size: 2.2 KiB |
BIN
dist/renderer/menubar-newdarwinTemplate@4x.png
vendored
|
Before Width: | Height: | Size: 3.3 KiB |
BIN
dist/renderer/menubar-newdarwinTemplate@512w.png
vendored
|
Before Width: | Height: | Size: 76 KiB |
BIN
dist/renderer/menubar-nodarwin.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
dist/renderer/menubar-nodarwin@2x.png
vendored
|
Before Width: | Height: | Size: 1.5 KiB |
BIN
dist/renderer/menubar-nodarwin@3x.png
vendored
|
Before Width: | Height: | Size: 2.8 KiB |
BIN
dist/renderer/menubar.png
vendored
|
Before Width: | Height: | Size: 645 B |
BIN
dist/renderer/menubar@2x.png
vendored
|
Before Width: | Height: | Size: 1.2 KiB |
BIN
dist/renderer/menubar@3x.png
vendored
|
Before Width: | Height: | Size: 1.9 KiB |
BIN
dist/renderer/picbed/aliyun.png
vendored
|
Before Width: | Height: | Size: 5.0 KiB |
BIN
dist/renderer/picbed/github.png
vendored
|
Before Width: | Height: | Size: 19 KiB |
BIN
dist/renderer/picbed/imgur.png
vendored
|
Before Width: | Height: | Size: 19 KiB |
BIN
dist/renderer/picbed/qiniu.png
vendored
|
Before Width: | Height: | Size: 17 KiB |
BIN
dist/renderer/picbed/sftp.png
vendored
|
Before Width: | Height: | Size: 5.1 KiB |
BIN
dist/renderer/picbed/smms.png
vendored
|
Before Width: | Height: | Size: 17 KiB |
BIN
dist/renderer/picbed/tcyun.png
vendored
|
Before Width: | Height: | Size: 6.0 KiB |
BIN
dist/renderer/picbed/upyun.png
vendored
|
Before Width: | Height: | Size: 9.5 KiB |
BIN
dist/renderer/roundLogo.png
vendored
|
Before Width: | Height: | Size: 50 KiB |
BIN
dist/renderer/squareLogo.png
vendored
|
Before Width: | Height: | Size: 109 KiB |
1
dist/renderer/unknown-file-type.svg
vendored
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1672454579182" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2800" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M160 0h512l256 256v704c0 35.3472-28.6528 64-64 64H160c-35.3472 0-64-28.6528-64-64V64c0-35.3472 28.6528-64 64-64z" fill="#CCCCCC" p-id="2801"></path><path d="M672 0l256 256h-192c-35.3472 0-64-28.6528-64-64V0z" fill="#EAEAEA" p-id="2802"></path><path d="M384 499.2c0-25.6 5.12-46.08 10.24-58.88 5.12-12.8 15.36-25.6 28.16-35.84 12.8-12.8 25.6-20.48 43.52-25.6 15.36-5.12 30.72-7.68 48.64-7.68 35.84 0 64 10.24 89.6 30.72C627.2 422.4 640 448 640 481.28c0 15.36-5.12 28.16-10.24 40.96s-17.92 28.16-38.4 46.08-28.16 30.72-35.84 38.4c-7.68 7.68-10.24 17.92-15.36 28.16-5.12 10.24-2.56 17.92-2.56 43.52h-51.2c0-25.6 2.56-38.4 5.12-51.2s7.68-23.04 15.36-33.28 15.36-23.04 33.28-40.96c17.92-17.92 30.72-30.72 35.84-38.4 5.12-7.68 10.24-20.48 10.24-38.4s-7.68-30.72-20.48-43.52-30.72-20.48-53.76-20.48c-51.2 0-76.8 35.84-76.8 87.04h-51.2z m153.6 281.6h-51.2v-51.2h51.2v51.2z" fill="#FFFFFF" p-id="2803"></path></svg>
|
||||
|
Before Width: | Height: | Size: 1.2 KiB |
BIN
dist/renderer/upload-dark.png
vendored
|
Before Width: | Height: | Size: 823 B |
BIN
dist/renderer/upload-dark@2x.png
vendored
|
Before Width: | Height: | Size: 2.0 KiB |
BIN
dist/renderer/upload-dark@3x.png
vendored
|
Before Width: | Height: | Size: 3.1 KiB |
BIN
dist/renderer/upload.png
vendored
|
Before Width: | Height: | Size: 777 B |
BIN
dist/renderer/upload@2x.png
vendored
|
Before Width: | Height: | Size: 1.8 KiB |
BIN
dist/renderer/upload@3x.png
vendored
|
Before Width: | Height: | Size: 2.6 KiB |
26
dist/renderer/windows.ps1
vendored
@@ -1,26 +0,0 @@
|
||||
|
||||
param($imagePath)
|
||||
|
||||
# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1
|
||||
|
||||
Add-Type -Assembly PresentationCore
|
||||
$img = [Windows.Clipboard]::GetImage()
|
||||
|
||||
if ($img -eq $null) {
|
||||
"no image"
|
||||
Exit 1
|
||||
}
|
||||
|
||||
if (-not $imagePath) {
|
||||
"no image"
|
||||
Exit 1
|
||||
}
|
||||
|
||||
$fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)
|
||||
$stream = [IO.File]::Open($imagePath, "OpenOrCreate")
|
||||
$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder
|
||||
$encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null
|
||||
$encoder.Save($stream) | out-null
|
||||
$stream.Dispose() | out-null
|
||||
|
||||
$imagePath
|
||||
45
dist/renderer/windows10.ps1
vendored
@@ -1,45 +0,0 @@
|
||||
# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1
|
||||
param($imagePath)
|
||||
|
||||
# https://github.com/PowerShell/PowerShell/issues/7233
|
||||
# fix the output encoding bug
|
||||
[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding
|
||||
|
||||
Add-Type -Assembly PresentationCore
|
||||
function main {
|
||||
$img = [Windows.Clipboard]::GetImage()
|
||||
|
||||
if ($img -eq $null) {
|
||||
"no image"
|
||||
Exit 1
|
||||
}
|
||||
|
||||
if (-not $imagePath) {
|
||||
"no image"
|
||||
Exit 1
|
||||
}
|
||||
|
||||
$fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)
|
||||
$stream = [IO.File]::Open($imagePath, "OpenOrCreate")
|
||||
$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder
|
||||
$encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null
|
||||
$encoder.Save($stream) | out-null
|
||||
$stream.Dispose() | out-null
|
||||
|
||||
$imagePath
|
||||
Exit 1
|
||||
}
|
||||
|
||||
try {
|
||||
# For WIN10
|
||||
$file = Get-Clipboard -Format FileDropList
|
||||
if ($file -ne $null) {
|
||||
Convert-Path $file
|
||||
Exit 1
|
||||
}
|
||||
} catch {
|
||||
# For WIN7 WIN8 WIN10
|
||||
main
|
||||
}
|
||||
|
||||
main
|
||||
18
dist/renderer/wsl.sh
vendored
@@ -1,18 +0,0 @@
|
||||
#!/bin/sh
|
||||
# grab the paths
|
||||
scriptPath=$(echo $0 | awk '{ print substr( $0, 1, length($0)-6 ) }')"windows10.ps1"
|
||||
imagePath=$(echo $1 | awk '{ print substr( $0, 1, length($0)-18 ) }')
|
||||
imageName=$(echo $1 | awk '{ print substr( $0, length($0)-17, length($0) ) }')
|
||||
|
||||
# run the powershell script
|
||||
res=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\"$imageName)
|
||||
|
||||
# note that there is a return symbol in powershell result
|
||||
noImage=$(echo "no image\r")
|
||||
|
||||
# check whether image exists
|
||||
if [ "$res" = "$noImage" ] ;then
|
||||
echo "no image"
|
||||
else
|
||||
echo $(wslpath -u $res)
|
||||
fi
|
||||
17604
out/main/index.js
@@ -1,122 +0,0 @@
|
||||
import crypto from "node:crypto";
|
||||
import https from "node:https";
|
||||
import path from "node:path";
|
||||
import { ObjectAdapter, I18n } from "@piclist/i18n";
|
||||
import OSS from "ali-oss";
|
||||
import COS from "cos-nodejs-sdk-v5";
|
||||
import { contextBridge, ipcRenderer, clipboard, webFrame } from "electron";
|
||||
import fs from "fs-extra";
|
||||
import yaml from "js-yaml";
|
||||
import mime from "mime-types";
|
||||
import qiniu from "qiniu";
|
||||
import Upyun from "upyun";
|
||||
import { isRef, unref, isReactive, toRaw } from "vue";
|
||||
const RPC_ACTIONS = "RPC_ACTIONS";
|
||||
const RPC_ACTIONS_INVOKE = "RPC_ACTIONS_INVOKE";
|
||||
let i18nObj = null;
|
||||
const getRawData = (args) => {
|
||||
if (isRef(args)) return unref(args);
|
||||
if (isReactive(args)) return toRaw(args);
|
||||
if (Array.isArray(args)) return args.map(getRawData);
|
||||
if (typeof args === "object" && args !== null) {
|
||||
const data = {};
|
||||
for (const key in args) {
|
||||
data[key] = getRawData(args[key]);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
return args;
|
||||
};
|
||||
function sendToMain(channel, ...args) {
|
||||
ipcRenderer.send(channel, ...getRawData(args));
|
||||
}
|
||||
function sendRPC(action, ...args) {
|
||||
ipcRenderer.send(RPC_ACTIONS, action, getRawData(args));
|
||||
}
|
||||
async function triggerRPC(action, ...args) {
|
||||
return await ipcRenderer.invoke(RPC_ACTIONS_INVOKE, action, getRawData(args));
|
||||
}
|
||||
function sendRpcSync(action, ...args) {
|
||||
return ipcRenderer.sendSync(RPC_ACTIONS, action, getRawData(args));
|
||||
}
|
||||
try {
|
||||
contextBridge.exposeInMainWorld("electron", {
|
||||
setVisualZoomLevelLimits: (min, max) => {
|
||||
webFrame.setVisualZoomLevelLimits(min, max);
|
||||
},
|
||||
clipboard: {
|
||||
writeText: clipboard.writeText
|
||||
},
|
||||
sendRpcSync,
|
||||
triggerRPC,
|
||||
sendToMain,
|
||||
sendRPC,
|
||||
ipcRendererOn: (channel, listener) => {
|
||||
ipcRenderer.on(channel, listener);
|
||||
},
|
||||
ipcRendererRemoveListener: (channel, listener) => {
|
||||
ipcRenderer.removeListener(channel, listener);
|
||||
}
|
||||
});
|
||||
contextBridge.exposeInMainWorld("node", {
|
||||
path: {
|
||||
join: path.join,
|
||||
dirname: path.dirname,
|
||||
basename: path.basename,
|
||||
normalize: path.normalize,
|
||||
extname: path.extname,
|
||||
sep: path.sep,
|
||||
posix: {
|
||||
sep: path.posix.sep
|
||||
}
|
||||
},
|
||||
fs: {
|
||||
remove: fs.remove,
|
||||
readFile: fs.readFile,
|
||||
statSync: fs.statSync
|
||||
},
|
||||
crypto: {
|
||||
randomBytes: crypto.randomBytes,
|
||||
createHash: crypto.createHash
|
||||
},
|
||||
https: {
|
||||
Agent: https.Agent
|
||||
},
|
||||
qiniu: {
|
||||
auth: qiniu.auth,
|
||||
rs: qiniu.rs,
|
||||
conf: qiniu.conf
|
||||
},
|
||||
COS,
|
||||
OSS,
|
||||
Upyun: {
|
||||
Service: Upyun.Service,
|
||||
Client: Upyun.Client
|
||||
},
|
||||
yaml: {
|
||||
load: yaml.load
|
||||
},
|
||||
mime: {
|
||||
lookup: mime.lookup
|
||||
}
|
||||
});
|
||||
contextBridge.exposeInMainWorld("i18n", {
|
||||
setLocales: (lang, locales) => {
|
||||
const objectAdapter = new ObjectAdapter({
|
||||
[lang]: locales
|
||||
});
|
||||
i18nObj = new I18n({
|
||||
adapter: objectAdapter,
|
||||
defaultLanguage: lang
|
||||
});
|
||||
},
|
||||
translate: (key, args = {}) => {
|
||||
return i18nObj?.translate(key, args) || key;
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
export {
|
||||
getRawData
|
||||
};
|
||||