From a7550c48bf25d04e07adb9dda3704b8f0e4580cf Mon Sep 17 00:00:00 2001 From: MarSeventh <1193267292@qq.com> Date: Wed, 22 Jul 2026 22:17:21 +0800 Subject: [PATCH] style: tune upload card effects by theme --- .../css/{36.5ae2c698.css => 24.03ecf779.css} | 2 +- frontend-dist/css/24.03ecf779.css.gz | Bin 0 -> 11843 bytes frontend-dist/css/36.5ae2c698.css.gz | Bin 11835 -> 0 bytes frontend-dist/css/app.0aed682c.css | 1 + frontend-dist/css/app.0aed682c.css.gz | Bin 0 -> 3790 bytes frontend-dist/css/app.fcec83ce.css | 1 - frontend-dist/css/app.fcec83ce.css.gz | Bin 3673 -> 0 bytes frontend-dist/index.html | 2 +- frontend-dist/index.html.gz | Bin 545 -> 546 bytes frontend-dist/js/24.e38d6915.js | 2 ++ frontend-dist/js/24.e38d6915.js.gz | Bin 0 -> 31672 bytes frontend-dist/js/24.e38d6915.js.map | 1 + frontend-dist/js/24.e38d6915.js.map.gz | Bin 0 -> 78575 bytes frontend-dist/js/36.1f3c2bdf.js | 2 -- frontend-dist/js/36.1f3c2bdf.js.gz | Bin 31469 -> 0 bytes frontend-dist/js/36.1f3c2bdf.js.map | 1 - frontend-dist/js/36.1f3c2bdf.js.map.gz | Bin 78791 -> 0 bytes frontend-dist/js/app.33af96b9.js | 2 ++ frontend-dist/js/app.33af96b9.js.gz | Bin 0 -> 25169 bytes ...{app.57c02bdc.js.map => app.33af96b9.js.map} | 2 +- frontend-dist/js/app.33af96b9.js.map.gz | Bin 0 -> 18375 bytes frontend-dist/js/app.57c02bdc.js | 2 -- frontend-dist/js/app.57c02bdc.js.gz | Bin 25169 -> 0 bytes frontend-dist/js/app.57c02bdc.js.map.gz | Bin 18376 -> 0 bytes 24 files changed, 9 insertions(+), 9 deletions(-) rename frontend-dist/css/{36.5ae2c698.css => 24.03ecf779.css} (54%) create mode 100644 frontend-dist/css/24.03ecf779.css.gz delete mode 100644 frontend-dist/css/36.5ae2c698.css.gz create mode 100644 frontend-dist/css/app.0aed682c.css create mode 100644 frontend-dist/css/app.0aed682c.css.gz delete mode 100644 frontend-dist/css/app.fcec83ce.css delete mode 100644 frontend-dist/css/app.fcec83ce.css.gz create mode 100644 frontend-dist/js/24.e38d6915.js create mode 100644 frontend-dist/js/24.e38d6915.js.gz create mode 100644 frontend-dist/js/24.e38d6915.js.map create mode 100644 frontend-dist/js/24.e38d6915.js.map.gz delete mode 100644 frontend-dist/js/36.1f3c2bdf.js delete mode 100644 frontend-dist/js/36.1f3c2bdf.js.gz delete mode 100644 frontend-dist/js/36.1f3c2bdf.js.map delete mode 100644 frontend-dist/js/36.1f3c2bdf.js.map.gz create mode 100644 frontend-dist/js/app.33af96b9.js create mode 100644 frontend-dist/js/app.33af96b9.js.gz rename frontend-dist/js/{app.57c02bdc.js.map => app.33af96b9.js.map} (99%) create mode 100644 frontend-dist/js/app.33af96b9.js.map.gz delete mode 100644 frontend-dist/js/app.57c02bdc.js delete mode 100644 frontend-dist/js/app.57c02bdc.js.gz delete mode 100644 frontend-dist/js/app.57c02bdc.js.map.gz diff --git a/frontend-dist/css/36.5ae2c698.css b/frontend-dist/css/24.03ecf779.css similarity index 54% rename from frontend-dist/css/36.5ae2c698.css rename to frontend-dist/css/24.03ecf779.css index a1c61dee..649eb8b7 100644 --- a/frontend-dist/css/36.5ae2c698.css +++ b/frontend-dist/css/24.03ecf779.css @@ -1 +1 @@ -.history-container[data-v-7da2f8c2]{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2000;display:flex;flex-direction:column;color:var(--upload-text-color);clip-path:circle(0 at calc(100% - 200px) 50px);opacity:0;transition:clip-path .6s cubic-bezier(.4,0,.2,1),opacity .3s ease}.history-container[data-v-7da2f8c2]:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background:var(--admin-container-bg-color);z-index:-1;will-change:transform;transform:translateZ(0)}.history-container.active[data-v-7da2f8c2]{clip-path:circle(150% at calc(100% - 200px) 50px);opacity:1}.history-header[data-v-7da2f8c2]{padding:20px 40px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--el-border-color-lighter)}.header-left[data-v-7da2f8c2]{display:flex;align-items:baseline;gap:15px}.header-left h2[data-v-7da2f8c2]{margin:0;font-size:24px;background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent;font-weight:700}.record-count[data-v-7da2f8c2]{color:var(--upload-text-color);font-size:14px;opacity:.8}.header-right[data-v-7da2f8c2]{display:flex;gap:10px}.header-right .el-button[data-v-7da2f8c2]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);border:none;color:var(--theme-toggle-color);transition:all .3s ease}.header-right .el-button[data-v-7da2f8c2]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.header-right .el-button.el-button--danger[data-v-7da2f8c2]{background:#dc2626;color:#fff}.history-content[data-v-7da2f8c2]{flex:1;overflow-y:auto;padding:20px 40px}.grid-view[data-v-7da2f8c2]{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:20px}.grid-item[data-v-7da2f8c2]{background:var(--toolbar-button-bg-color);border-radius:12px;overflow:hidden;box-shadow:var(--toolbar-button-shadow);transition:transform .3s ease,box-shadow .3s ease;border:1px solid var(--glass-border)}.grid-item[data-v-7da2f8c2]:hover{box-shadow:var(--toolbar-button-shadow-hover)}.grid-preview[data-v-7da2f8c2]{height:160px;position:relative;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;overflow:hidden}.grid-preview img[data-v-7da2f8c2],.grid-preview video[data-v-7da2f8c2]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper[data-v-7da2f8c2]{font-size:48px;color:var(--theme-toggle-color);opacity:.5}.grid-overlay[data-v-7da2f8c2]{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .3s ease}.grid-item:hover .grid-overlay[data-v-7da2f8c2]{opacity:1}.grid-actions[data-v-7da2f8c2]{display:flex;gap:15px}.grid-info[data-v-7da2f8c2]{padding:12px}.file-name[data-v-7da2f8c2]{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px;color:var(--upload-text-color)}.upload-time[data-v-7da2f8c2]{font-size:12px;color:var(--upload-text-color);opacity:.6}.list-view[data-v-7da2f8c2]{display:flex;flex-direction:column;gap:10px}.list-item[data-v-7da2f8c2]{display:flex;align-items:center;padding:12px 15px;background:var(--toolbar-button-bg-color);border-radius:12px;box-shadow:var(--toolbar-button-shadow);border:1px solid var(--glass-border);transition:all .3s ease}.list-item[data-v-7da2f8c2]:hover{transform:translateX(5px);box-shadow:var(--toolbar-button-shadow-hover)}.list-preview[data-v-7da2f8c2]{width:50px;height:50px;border-radius:8px;overflow:hidden;margin-right:15px;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;flex-shrink:0}.list-preview img[data-v-7da2f8c2],.list-preview video[data-v-7da2f8c2]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper-small[data-v-7da2f8c2]{font-size:24px;color:var(--theme-toggle-color);opacity:.5}.list-info[data-v-7da2f8c2]{flex:1;min-width:0;margin-right:20px}.file-url[data-v-7da2f8c2]{font-size:12px;color:var(--upload-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.6}.list-meta[data-v-7da2f8c2]{margin-right:20px;text-align:right;min-width:140px}.list-actions[data-v-7da2f8c2]{display:flex;gap:8px}.empty-state[data-v-7da2f8c2]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--upload-text-color);font-size:18px;opacity:.5}.empty-icon[data-v-7da2f8c2]{font-size:64px;margin-bottom:20px;color:var(--theme-toggle-color)}.history-content[data-v-7da2f8c2]::-webkit-scrollbar{width:8px}.history-content[data-v-7da2f8c2]::-webkit-scrollbar-track{background:transparent}.history-content[data-v-7da2f8c2]::-webkit-scrollbar-thumb{background:var(--el-border-color);border-radius:4px}.history-content[data-v-7da2f8c2]::-webkit-scrollbar-thumb:hover{background:var(--el-border-color-darker)}.action-btn-view[data-v-7da2f8c2]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);border:none;color:var(--theme-toggle-color)}.action-btn-view[data-v-7da2f8c2]:hover{box-shadow:var(--toolbar-button-shadow-hover);color:var(--el-color-primary)}.history-group[data-v-7da2f8c2]{position:relative;padding-left:30px;border-left:2px solid var(--el-border-color-lighter);margin-left:10px;padding-bottom:30px}.history-group[data-v-7da2f8c2]:last-child{border-left:2px solid transparent}.timeline-header[data-v-7da2f8c2]{display:flex;align-items:center;margin-bottom:20px;position:relative}.timeline-dot[data-v-7da2f8c2]{position:absolute;left:-38px;width:14px;height:14px;border-radius:50%;background:var(--el-upload-dragger-uniform-color);box-shadow:none;z-index:2;box-sizing:border-box}.date-label[data-v-7da2f8c2]{font-size:20px;font-weight:700;background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent}.load-more-container[data-v-7da2f8c2]{display:flex;justify-content:center;padding:20px}.loading-indicator[data-v-7da2f8c2]{display:flex;align-items:center;gap:8px;color:var(--el-upload-dragger-uniform-color)}.load-more-hint[data-v-7da2f8c2],.no-more-hint[data-v-7da2f8c2]{color:var(--upload-text-color);opacity:.5;font-size:14px}.no-more-hint[data-v-7da2f8c2]{text-align:center;padding:20px}@media (max-width:768px){.history-header[data-v-7da2f8c2]{padding:15px 20px}.header-left h2[data-v-7da2f8c2]{font-size:20px}.history-content[data-v-7da2f8c2]{padding:15px 20px}.grid-view[data-v-7da2f8c2]{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:15px}.grid-preview[data-v-7da2f8c2]{height:120px}.list-meta[data-v-7da2f8c2]{display:none}.list-info[data-v-7da2f8c2]{margin-right:10px}}.page-footer[data-v-08acbaa9]{display:flex;justify-content:center;align-items:center;width:100vw;color:var(--page-footer-text-color);font-size:large;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.page-footer[data-v-08acbaa9]{font-size:small}}.footer-name[data-v-08acbaa9]{color:var(--page-footer-name-color);font-weight:700;text-decoration:none;position:relative;transition:all .3s ease}.footer-name[data-v-08acbaa9]:after{content:"";position:absolute;width:0;height:2px;bottom:-2px;left:0;background-color:var(--page-footer-name-color);transition:width .3s ease-in-out}.footer-name[data-v-08acbaa9]:hover:after{width:100%}.footer-link-icon[data-v-08acbaa9]{color:var(--page-footer-name-color);margin-left:5px;transition:transform .3s ease-in-out}.footer-link-icon[data-v-08acbaa9]:hover{transform:scale(1.2) rotate(-12deg)}.el-input-number{display:inline-flex;line-height:30px;position:relative;vertical-align:middle;width:150px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;line-height:1;text-align:center}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__decrease,.el-input-number__increase{align-items:center;background:var(--el-fill-color-light);bottom:1px;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:13px;height:auto;justify-content:center;position:absolute;top:1px;-webkit-user-select:none;user-select:none;width:32px;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-left:var(--el-border);border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{line-height:38px;width:180px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{font-size:14px;width:40px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{line-height:22px;width:120px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{font-size:12px;width:24px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-bottom:var(--el-border);border-radius:0 var(--el-border-radius-base) 0 0;bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;border-right:none;left:auto;right:1px;top:auto}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;display:flex;height:32px;width:100%}.el-slider__runway{background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;height:var(--el-slider-height);position:relative}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{background-color:var(--el-slider-main-bg-color);border-bottom-left-radius:var(--el-slider-border-radius);border-top-left-radius:var(--el-slider-border-radius);height:var(--el-slider-height);position:absolute}.el-slider__button-wrapper{background-color:transparent;height:var(--el-slider-button-wrapper-size);line-height:normal;outline:none;position:absolute;text-align:center;top:var(--el-slider-button-wrapper-offset);transform:translateX(-50%);-webkit-user-select:none;user-select:none;width:var(--el-slider-button-wrapper-size);z-index:1}.el-slider__button-wrapper:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{background-color:var(--el-color-white);border:2px solid var(--el-slider-main-bg-color);border-radius:50%;box-sizing:border-box;display:inline-block;height:var(--el-slider-button-size);transition:var(--el-transition-duration-fast);-webkit-user-select:none;user-select:none;vertical-align:middle;width:var(--el-slider-button-size)}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{background-color:var(--el-slider-stop-bg-color);border-radius:var(--el-border-radius-circle);height:var(--el-slider-height);position:absolute;transform:translateX(-50%);width:var(--el-slider-height)}.el-slider__marks{height:100%;left:12px;top:0;width:18px}.el-slider__marks-text{color:var(--el-color-info);font-size:14px;margin-top:15px;position:absolute;transform:translateX(-50%);white-space:pre}.el-slider.is-vertical{display:inline-flex;flex:0;height:100%;position:relative;width:auto}.el-slider.is-vertical .el-slider__runway{height:100%;margin:0 16px;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__bar{border-radius:0 0 3px 3px;height:auto;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__button-wrapper{left:var(--el-slider-button-wrapper-offset);top:auto;transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{left:15px;margin-top:0;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.channel-icon-wrapper[data-v-ce6ff2ce]{display:inline-flex;align-items:center;justify-content:center;line-height:1}.channel-icon-wrapper[data-v-ce6ff2ce] svg,.channel-svg-icon[data-v-ce6ff2ce]{width:1em;height:1em;fill:currentColor}.channel-icon-wrapper.channel-brand-telegram[data-v-ce6ff2ce]{color:#229ed9}.channel-icon-wrapper.channel-brand-cfr2[data-v-ce6ff2ce]{color:#f38020}.channel-icon-wrapper.channel-brand-s3[data-v-ce6ff2ce]{color:#f90}.channel-icon-wrapper.channel-brand-discord[data-v-ce6ff2ce]{color:#5865f2}.channel-icon-wrapper.channel-brand-huggingface[data-v-ce6ff2ce]{color:#ff9d00}.channel-icon-wrapper.channel-brand-webdav[data-v-ce6ff2ce]{color:#14b8a6}.upload-settings-dialog .radio-card-group.compact{gap:8px}.upload-settings-dialog .radio-card-group.compact .radio-card{padding:8px 12px;font-size:13px}.upload-settings-dialog .radio-card-group.compact .radio-card .el-radio__label{display:flex;align-items:center;gap:6px}.upload-settings-dialog .radio-card-group.compact .channel-icon{width:18px;font-size:18px;text-align:center;flex-shrink:0}.upload-settings-dialog .slider-item{flex-direction:column;align-items:flex-start;gap:12px}.upload-settings-dialog .slider-wrapper{display:flex;align-items:center;gap:12px;width:100%}.upload-settings-dialog .slider-wrapper .el-slider{flex:1;min-width:0}.upload-settings-dialog .slider-input{width:96px!important;flex-shrink:0}.upload-settings-dialog .slider-input .el-input__inner{text-align:center}.upload-settings-dialog .slider-input-wrapper{display:flex;align-items:center;gap:6px;flex-shrink:0}.upload-settings-dialog .slider-unit{font-size:13px;font-weight:500;color:var(--el-text-color-secondary)}@media (max-width:768px){.upload-settings-dialog .setting-item .radio-card-group.compact{width:100%}.upload-settings-dialog .radio-card-group.compact{flex-direction:row;display:grid;grid-template-columns:repeat(2,1fr);gap:8px;width:100%}.upload-settings-dialog .radio-card-group.compact .radio-card{width:100%;box-sizing:border-box;justify-content:center;flex:1}.upload-settings-dialog .radio-card-group.compact .radio-card .el-radio__label{justify-content:center}.upload-settings-dialog .slider-wrapper{gap:8px}}.el-progress{align-items:center;display:flex;line-height:1;position:relative}.el-progress__text{color:var(--el-text-color-regular);font-size:14px;line-height:1;margin-left:5px;min-width:50px}.el-progress__text i{display:block;vertical-align:middle}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{left:0;margin:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{display:inline-block;vertical-align:middle}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{display:block;margin-right:0;padding-right:0}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);border-radius:100px;height:6px;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{background-color:var(--el-color-primary);border-radius:100px;height:100%;left:0;line-height:1;position:absolute;text-align:right;top:0;transition:width .6s ease;white-space:nowrap}.el-progress-bar__inner:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{animation:indeterminate 3s infinite;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 0,transparent 50%,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 75%,transparent 0,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{color:#fff;display:inline-block;font-size:12px;margin:0 5px;vertical-align:middle}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.upload-list-item[data-v-645a7810]{display:flex;align-items:center;justify-content:space-between;margin:8px 10px;border:1px solid var(--upload-list-item-border-color,rgba(37,99,235,.1));padding:10px 12px;border-radius:16px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);box-shadow:none;transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item[data-v-645a7810]:hover{border-color:var(--upload-list-item-hover-border,rgba(37,99,235,.25));box-shadow:none}.upload-list-item-content[data-v-645a7810]{display:flex;flex-direction:column;margin-left:10px}.upload-list-item-action[data-v-645a7810]{display:flex;flex-direction:column;align-items:center;gap:6px}.upload-list-item-url-row[data-v-645a7810]{display:flex;flex-direction:row;align-items:center;width:38vw;gap:8px;margin-bottom:6px}.upload-list-item-url-row[data-v-645a7810]:last-child{margin-bottom:0}.upload-list-item-url[data-v-645a7810]{display:flex;flex-direction:column}.file-icon[data-v-645a7810]{font-size:30px;color:var(--upload-list-file-icon-color)}.upload-list-item-name-wrapper[data-v-645a7810]{display:flex;align-items:center;justify-content:center;padding:8px 16px;background:var(--file-name-bg,rgba(37,99,235,.05));border-radius:10px;margin-bottom:8px;border:1px solid var(--file-name-border,rgba(37,99,235,.12));transition:all .3s ease}.upload-list-item-name-wrapper[data-v-645a7810]:hover{background:var(--file-name-hover-bg,rgba(37,99,235,.09));border-color:var(--file-name-hover-border,rgba(37,99,235,.2))}.upload-list-item-name[data-v-645a7810]{font-size:14px;font-weight:600;max-width:28vw;color:var(--el-text-color-primary);letter-spacing:.3px;text-align:center}.upload-list-item-progress[data-v-645a7810]{margin-top:8px;width:28vw;padding:4px 8px;background:var(--progress-wrapper-bg,rgba(37,99,235,.04));border-radius:12px;border:1px solid var(--progress-wrapper-border,rgba(37,99,235,.1))}.upload-list-item-progress[data-v-645a7810] .el-progress{--el-color-primary:var(--primary-color)}.upload-list-item-progress[data-v-645a7810] .el-progress-bar{padding-right:0;margin-right:0}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__outer{height:10px!important;border-radius:8px;background:var(--progress-outer-bg,rgba(0,0,0,.045));box-shadow:none;overflow:hidden}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__inner{border-radius:8px;background:var(--primary-color)!important;box-shadow:none;position:relative;overflow:hidden;transition:width .3s ease}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__inner:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:hsla(0,0%,100%,.12);pointer-events:none}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__inner:before{content:"";position:absolute;top:0;left:-100%;width:300%;height:100%;background:repeating-linear-gradient(45deg,transparent,transparent 8px,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 16px);animation:progressStripes-645a7810 1s linear infinite}.upload-list-item-progress[data-v-645a7810] .el-progress--success .el-progress-bar__inner{background:#16a34a!important;background-size:200% 100%;box-shadow:none;animation:none}.upload-list-item-progress[data-v-645a7810] .el-progress--success .el-progress-bar__inner:after,.upload-list-item-progress[data-v-645a7810] .el-progress--success .el-progress-bar__inner:before{animation:none;background:none}.upload-list-item-progress[data-v-645a7810] .el-progress--exception .el-progress-bar__inner{background:#dc2626!important;background-size:200% 100%;box-shadow:none;animation:progressPulse-645a7810 1s ease-in-out infinite}.upload-list-item-progress[data-v-645a7810] .el-progress--exception .el-progress-bar__inner:before{animation:none;background:none}@keyframes progressStripes-645a7810{0%{transform:translateX(0)}to{transform:translateX(22.627px)}}@keyframes progressPulse-645a7810{0%,to{opacity:1}50%{opacity:.7}}.upload-list-item-url[data-v-645a7810] .el-input{transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item-url[data-v-645a7810] .el-input__wrapper{border-radius:10px;box-shadow:none;transition:all .3s cubic-bezier(.4,0,.2,1);background:var(--el-fill-color-blank);border:1px solid var(--el-border-color-lighter);overflow:hidden;position:relative;padding:0}.upload-list-item-url[data-v-645a7810] .el-input-group>.el-input__wrapper{border-radius:0 9px 9px 0!important}.upload-list-item-url[data-v-645a7810] .el-input__wrapper:hover{box-shadow:none;border-color:var(--el-color-primary-light-5)}.upload-list-item-url[data-v-645a7810] .el-input__wrapper.is-focus{box-shadow:none;border-color:var(--el-color-primary)}.upload-list-item-url[data-v-645a7810] .el-input__wrapper.is-focus:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(37,99,235,.08),transparent);animation:shimmer-645a7810 2s infinite;z-index:0}@keyframes shimmer-645a7810{0%{left:-100%}to{left:100%}}.upload-list-item-url[data-v-645a7810] .el-input__inner{font-size:13px;font-family:Courier New,Monaco,monospace;color:var(--el-text-color-regular);transition:all .3s ease;padding-left:12px;position:relative;z-index:1;border-radius:0 10px 10px 0}.upload-list-item-url[data-v-645a7810] .el-input__inner::-moz-selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-645a7810] .el-input__inner::selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-645a7810] .el-input-group__prepend{background:var(--el-color-primary-light-9);color:var(--el-color-primary);font-weight:600;font-size:12px;border:none;padding:0 14px;margin:0;border-radius:9px 0 0 9px;box-shadow:none;transition:all .3s ease;letter-spacing:.5px;position:relative;z-index:1}.upload-list-item-url[data-v-645a7810] .el-input-group__prepend:after{content:"";position:absolute;right:0;top:50%;transform:translateY(-50%);height:60%;width:1px;background:var(--el-color-primary-light-7);opacity:.3;transition:all .3s ease}.upload-list-item-url[data-v-645a7810] .el-input:hover .el-input-group__prepend{background:var(--el-color-primary-light-8)}.upload-list-item-url[data-v-645a7810] .el-input:hover .el-input-group__prepend:after{opacity:.5}.upload-list-item-url[data-v-645a7810] .el-input.is-focus .el-input-group__prepend{background:var(--el-color-primary);color:#fff;animation:prependPulse-645a7810 2s ease-in-out infinite}.upload-list-item-url[data-v-645a7810] .el-input.is-focus .el-input-group__prepend:after{background:hsla(0,0%,100%,.3);opacity:1}@keyframes prependPulse-645a7810{0%,to{opacity:1}50%{opacity:.95}}.modern-file-action-btn[data-v-645a7810]{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:10px;background:var(--upload-action-btn-bg);color:var(--upload-action-btn-color);box-shadow:var(--upload-action-btn-shadow);cursor:pointer;transition:background-color .22s ease,color .22s ease,transform .22s ease;font-size:16px;position:relative;overflow:hidden;margin:4px 0;outline:none}.modern-file-action-btn[data-v-645a7810]:before{content:"";position:absolute;inset:2px;border-radius:8px;background:currentColor;opacity:0;transition:opacity .22s ease}.modern-file-action-btn[data-v-645a7810]:hover{background:var(--upload-action-btn-hover-bg)}.modern-file-action-btn[data-v-645a7810]:hover:before{opacity:.08}.modern-file-action-btn[data-v-645a7810]:active{transform:scale(.96)}.modern-file-action-btn-primary[data-v-645a7810]{color:var(--upload-action-copy-color)}.modern-file-action-btn-danger[data-v-645a7810]{color:var(--upload-action-danger-color);background:var(--upload-action-danger-bg)}.modern-file-action-btn-danger[data-v-645a7810]:hover{background:var(--upload-action-danger-hover-bg)}@media (max-width:768px){.upload-list-item[data-v-645a7810]{margin:5px 6px;padding:7px 8px;border-radius:12px}.upload-list-item-content[data-v-645a7810]{margin-left:2px}.upload-list-item-action[data-v-645a7810]{gap:3px}.upload-list-item-url-row[data-v-645a7810]{width:42vw;flex-direction:column;gap:4px;margin-bottom:4px}.upload-list-item-progress[data-v-645a7810]{width:32vw;margin-top:5px;padding:2px 5px;border-radius:9px}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__outer{height:6px!important}.upload-list-item-url[data-v-645a7810] .el-input__wrapper{border-radius:7px}.upload-list-item-url[data-v-645a7810] .el-input__inner{font-size:10px;padding-left:8px}.upload-list-item-url[data-v-645a7810] .el-input-group__prepend{font-size:9px;padding:0 6px;border-radius:7px 0 0 7px}.modern-file-action-btn[data-v-645a7810]{width:26px;height:26px;margin:2px 0;border-radius:8px;font-size:12px}.upload-list-item-name-wrapper[data-v-645a7810]{padding:3px 8px;margin-bottom:5px;border-radius:7px}.upload-list-item-name[data-v-645a7810]{font-size:11px;width:32vw}}.el-upload{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;align-items:center;cursor:pointer;display:inline-flex;justify-content:center;outline:none}.el-upload.is-disabled{cursor:not-allowed}.el-upload.is-disabled:focus{color:inherit}.el-upload.is-disabled:focus,.el-upload.is-disabled:focus .el-upload-dragger{border-color:var(--el-border-color-darker)}.el-upload.is-disabled .el-upload-dragger{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-upload.is-disabled .el-upload-dragger .el-upload__text{color:var(--el-text-color-placeholder)}.el-upload.is-disabled .el-upload-dragger .el-upload__text em{color:var(--el-disabled-text-color)}.el-upload.is-disabled .el-upload-dragger:hover{border-color:var(--el-border-color-darker)}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);font-size:12px;margin-top:7px}.el-upload iframe{filter:alpha(opacity=0);left:0;opacity:0;position:absolute;top:0;z-index:-1}.el-upload--picture-card{align-items:center;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:var(--el-upload-picture-card-size);justify-content:center;vertical-align:top;width:var(--el-upload-picture-card-size)}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{color:var(--el-color-primary)}.el-upload:focus,.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;cursor:pointer;overflow:hidden;padding:var(--el-upload-dragger-padding-vertical) var(--el-upload-dragger-padding-horizontal);position:relative;text-align:center}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);font-size:67px;line-height:50px;margin-bottom:16px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary);padding:calc(var(--el-upload-dragger-padding-vertical) - 1px) calc(var(--el-upload-dragger-padding-horizontal) - 1px)}.el-upload-list{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;list-style:none;margin:10px 0 0;padding:0;position:relative}.el-upload-list__item{border-radius:4px;box-sizing:border-box;color:var(--el-text-color-regular);font-size:14px;margin-bottom:5px;position:relative;transition:all .5s cubic-bezier(.55,0,.1,1);width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{color:var(--el-text-color-regular);cursor:pointer;display:none;opacity:.75;position:absolute;right:5px;top:50%;transform:translateY(-50%);transition:opacity var(--el-transition-duration)}.el-upload-list__item .el-icon--close:hover{color:var(--el-color-primary);opacity:1}.el-upload-list__item .el-icon--close-tip{color:var(--el-color-primary);cursor:pointer;display:none;font-size:12px;font-style:normal;opacity:1;position:absolute;right:5px;top:1px}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;flex-direction:column;justify-content:center;margin-left:4px;width:calc(100% - 30px)}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{align-items:center;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);padding:0 4px;text-align:center;transition:color var(--el-transition-duration)}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{align-items:center;display:none;height:100%;justify-content:center;line-height:inherit;position:absolute;right:5px;top:0;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{color:var(--el-text-color-regular);display:none;font-size:12px;position:absolute;right:10px;top:0}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:inline-flex;height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;overflow:hidden;padding:0;width:var(--el-upload-list-picture-card-size)}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:block;opacity:0}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{height:100%;object-fit:contain;width:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{align-items:center;background-color:var(--el-overlay-color-lighter);color:#fff;cursor:default;display:inline-flex;font-size:20px;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:opacity var(--el-transition-duration);width:100%}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:16px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{color:inherit;font-size:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{bottom:auto;left:50%;top:50%;transform:translate(-50%,-50%);width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{align-items:center;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:flex;margin-top:10px;overflow:hidden;padding:10px;z-index:0}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{display:inline-flex;opacity:0}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{align-items:center;background-color:var(--el-color-white);display:inline-flex;height:70px;justify-content:center;object-fit:contain;position:relative;width:70px;z-index:1}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);height:26px;position:absolute;right:-17px;text-align:center;top:-7px;transform:rotate(45deg);width:46px}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{cursor:default;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:10}.el-upload-cover:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;height:100%;width:100%}.el-upload-cover__label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-cover__label i{color:#fff;font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-cover__progress{display:inline-block;position:static;vertical-align:middle;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{height:100%;left:0;position:absolute;top:0;width:100%}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);bottom:0;height:100%;left:0;position:absolute;text-align:center;width:100%}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;display:inline-block;font-size:14px;margin-top:60px;transition:var(--el-transition-md-fade);vertical-align:middle}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{background-color:#fff;bottom:0;color:var(--el-text-color-primary);font-size:14px;font-weight:400;height:36px;left:0;line-height:36px;margin:0;overflow:hidden;padding:0 10px;position:absolute;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}@property --border-angle{syntax:"";initial-value:0deg;inherits:false}@keyframes borderRotate-fe1ea9cc{0%{--border-angle:0deg}to{--border-angle:360deg}}.upload-form[data-v-fe1ea9cc]{--upload-card-height:45vh;--upload-card-busy-height:17vh;--upload-list-height:7vh;--upload-list-busy-height:calc(var(--upload-card-height) - var(--upload-card-busy-height) + var(--upload-list-height));--upload-list-gap:10px;--upload-list-radius:15px;--upload-card-vertical-padding:40px;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;height:calc(var(--upload-card-height) + var(--upload-list-height) + var(--upload-list-gap) + var(--upload-card-vertical-padding))}.upload-list-card[data-v-fe1ea9cc]{width:55vw;height:var(--upload-list-height);margin-top:var(--upload-list-gap);display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:var(--upload-list-radius);background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)!important;transition:height .3s ease;overflow:hidden}.upload-list-card[data-v-fe1ea9cc] .el-card__body{padding:0;width:100%;height:100%;overflow:hidden}.upload-list-container[data-v-fe1ea9cc]{width:100%;height:100%;overflow:hidden}@media (max-width:768px){.upload-list-card[data-v-fe1ea9cc]{width:70vw}}.upload-list-card.upload-list-busy[data-v-fe1ea9cc]{height:var(--upload-list-busy-height)}.upload-card-wrapper[data-v-fe1ea9cc]{position:relative;overflow:visible}.upload-card-glow[data-v-fe1ea9cc]{position:absolute;width:200px;height:200px;border-radius:50%;background:radial-gradient(circle,rgba(96,165,250,.2) 0,transparent 70%);pointer-events:none;transform:translate(-50%,-50%);opacity:0;transition:opacity .3s ease;z-index:10}.upload-card[data-v-fe1ea9cc]{width:55vw;padding:20px;background:none}@media (max-width:768px){.upload-card[data-v-fe1ea9cc]{width:70vw}}.upload-card-busy[data-v-fe1ea9cc] .el-upload-dragger{height:var(--upload-card-busy-height)}[data-v-fe1ea9cc] .el-upload-dragger{display:flex;flex-direction:column;justify-content:center;align-items:center;height:var(--upload-card-height);border-radius:15px;border:1px solid var(--glass-border);opacity:.7;background-color:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);box-shadow:var(--glass-shadow);transition:height .3s ease,opacity .25s ease,border-color .25s ease,box-shadow .25s ease,background-color .25s ease}[data-v-fe1ea9cc] .el-upload:focus .el-upload-dragger{border-color:var(--glass-border-hover)}[data-v-fe1ea9cc] .el-upload-dragger.is-dragover,[data-v-fe1ea9cc] .el-upload-dragger:hover{opacity:.7;box-shadow:var(--glass-shadow)}.is-uploading[data-v-fe1ea9cc] .el-upload-dragger{border-color:transparent!important}.upload-card.is-uploading[data-v-fe1ea9cc]{position:relative;background:none}.upload-card.is-uploading[data-v-fe1ea9cc]:before{content:"";position:absolute;top:20px;left:20px;right:20px;bottom:20px;border-radius:15px;padding:2px;background:conic-gradient(from var(--border-angle),transparent 0deg,transparent 30deg,var(--el-upload-dragger-uniform-color,#2563eb) 60deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#2563eb) 70%,#fff) 90deg,transparent 120deg,transparent 180deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#2563eb) 70%,#fff) 210deg,var(--el-upload-dragger-uniform-color,#2563eb) 240deg,transparent 270deg,transparent 1turn);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:borderRotate-fe1ea9cc 2s linear infinite;pointer-events:none;z-index:1}.el-upload__text[data-v-fe1ea9cc]{font-weight:700;font-size:medium;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}@media (max-width:768px){.el-upload__text[data-v-fe1ea9cc]{font-size:small}}.el-upload__text.upload-list-busy[data-v-fe1ea9cc]{font-size:small}.el-icon--upload[data-v-fe1ea9cc]{font-size:100px;transition:font-size .3s ease;color:#60a5fa}html.dark .el-icon--upload[data-v-fe1ea9cc]{color:#6b6b73}.el-upload__text[data-v-fe1ea9cc] em{color:#1d4ed8}html.dark .el-upload__text[data-v-fe1ea9cc] em{color:#93c5fd}.el-icon--upload.upload-list-busy[data-v-fe1ea9cc]{font-size:60px}@media (max-width:768px){.el-icon--upload[data-v-fe1ea9cc]{font-size:50px}.el-icon--upload.upload-list-busy[data-v-fe1ea9cc]{font-size:30px}}.paste-card[data-v-fe1ea9cc]{display:flex;flex-direction:column;justify-content:center;align-items:center;height:var(--upload-card-height);border-radius:15px;border:var(--el-upload-dragger-border);box-shadow:none;opacity:.7;background-color:var(--el-upload-dragger-bg-color);transition:all .3s ease;box-sizing:border-box}.paste-card[data-v-fe1ea9cc]:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.paste-card.is-uploading[data-v-fe1ea9cc]{position:relative;border-color:transparent!important;overflow:visible}.paste-card.is-uploading[data-v-fe1ea9cc]:before{content:"";position:absolute;inset:-4px;border-radius:15px;padding:2px;background:conic-gradient(from var(--border-angle),transparent 0deg,transparent 30deg,var(--el-upload-dragger-uniform-color,#2563eb) 60deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#2563eb) 70%,#fff) 90deg,transparent 120deg,transparent 180deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#2563eb) 70%,#fff) 210deg,var(--el-upload-dragger-uniform-color,#2563eb) 240deg,transparent 270deg,transparent 1turn);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:borderRotate-fe1ea9cc 2s linear infinite;pointer-events:none;z-index:1}.paste-card[data-v-fe1ea9cc] .el-card__body{padding:0;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}.upload-card-busy.paste-card[data-v-fe1ea9cc]{height:var(--upload-card-busy-height)}.upload-card-textarea[data-v-fe1ea9cc]{width:50vw;height:70%;border-radius:16px;background:color-mix(in srgb,var(--primary-color) 4%,var(--glass-bg));border:1px solid var(--glass-border);box-shadow:none;transition:background-color .22s ease,border-color .22s ease,box-shadow .22s ease;box-sizing:border-box;display:flex;position:relative;overflow:hidden}.upload-card-busy .upload-card-textarea[data-v-fe1ea9cc]{height:50%}.upload-card-textarea[data-v-fe1ea9cc]:hover{background:color-mix(in srgb,var(--primary-color) 6%,var(--glass-bg));border-color:var(--glass-border-hover)}.upload-card-textarea[data-v-fe1ea9cc]:focus-within{background:color-mix(in srgb,var(--primary-color) 7%,var(--glass-bg));border-color:color-mix(in srgb,var(--primary-color) 45%,var(--glass-border));box-shadow:none}.upload-card-textarea[data-v-fe1ea9cc] .el-textarea__inner{border-radius:16px;background:transparent;transition:color .2s ease,background-color .2s ease;resize:none;border:none;box-shadow:none!important;padding:16px 20px;font-size:14px;line-height:1.6;color:var(--el-text-color-primary)}.upload-card-textarea[data-v-fe1ea9cc] .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}.upload-card-textarea[data-v-fe1ea9cc] .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}.upload-card-textarea[data-v-fe1ea9cc] .el-textarea__inner:focus{background:transparent;box-shadow:none!important}.upload-card-textarea[data-v-fe1ea9cc] ::-webkit-scrollbar{width:6px;height:6px}.upload-card-textarea[data-v-fe1ea9cc] ::-webkit-scrollbar-track{background:transparent;border-radius:6px;margin:8px}.upload-card-textarea[data-v-fe1ea9cc] ::-webkit-scrollbar-thumb{background:rgba(37,99,235,.5);border-radius:6px;-webkit-transition:background .3s ease;transition:background .3s ease}.upload-card-textarea[data-v-fe1ea9cc] ::-webkit-scrollbar-thumb:hover{background:rgba(37,99,235,.7)}.paste-card-actions[data-v-fe1ea9cc]{display:flex;justify-content:space-between;align-items:center;width:50vw;gap:12px;margin-top:16px}.paste-card-upload-button[data-v-fe1ea9cc]{min-width:92px;height:38px;border-radius:10px!important;font-weight:600;font-size:14px;letter-spacing:.04em;color:var(--primary-color-accent)!important;background:color-mix(in srgb,var(--primary-color) 10%,transparent)!important;border:1px solid color-mix(in srgb,var(--primary-color) 36%,var(--glass-border))!important;box-shadow:none;transition:background-color .2s ease,border-color .2s ease,transform .2s ease!important}.paste-card-upload-button[data-v-fe1ea9cc]:hover{color:var(--primary-color-accent)!important;background:color-mix(in srgb,var(--primary-color) 14%,transparent)!important;border-color:color-mix(in srgb,var(--primary-color) 52%,var(--glass-border))!important;transform:translateY(-1px);box-shadow:none}.paste-card-upload-button[data-v-fe1ea9cc]:focus-visible{color:var(--primary-color-accent)!important;background:color-mix(in srgb,var(--primary-color) 14%,transparent)!important;border-color:color-mix(in srgb,var(--primary-color) 52%,var(--glass-border))!important;box-shadow:0 0 0 3px color-mix(in srgb,var(--primary-color) 14%,transparent)!important}.paste-card-upload-button[data-v-fe1ea9cc]:active{transform:translateY(0);background:color-mix(in srgb,var(--primary-color) 18%,transparent)!important}.upload-card-busy .paste-card-upload-button[data-v-fe1ea9cc]{min-width:72px;height:32px;border-radius:8px!important;font-size:13px;letter-spacing:.02em}.upload-card-busy .paste-card-actions[data-v-fe1ea9cc]{margin-top:10px}.paste-card-method-group[data-v-fe1ea9cc]{position:relative;display:inline-flex;align-items:center;width:158px;height:38px;box-sizing:border-box;gap:2px;padding:3px;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:10px;overflow:hidden}.paste-card-method-group[data-v-fe1ea9cc]:before{content:"";position:absolute;top:3px;left:3px;width:calc(50% - 4px);height:calc(100% - 6px);border-radius:7px;background:color-mix(in srgb,var(--primary-color) 14%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--primary-color) 42%,var(--glass-border)) inset;transform:translateX(0);transition:transform .22s cubic-bezier(.4,0,.2,1);pointer-events:none}.paste-card-method-group.is-external[data-v-fe1ea9cc]:before{transform:translateX(calc(100% + 2px))}.paste-card-method-button[data-v-fe1ea9cc]{position:relative;z-index:1;display:inline-flex;flex:1 1 0;align-items:center;justify-content:center;min-width:0;height:30px;box-sizing:border-box;padding:0 14px;border:none;border-radius:7px;background:transparent;font-weight:500;font-size:13px;line-height:1;color:var(--el-text-color-secondary);cursor:pointer;transition:color .2s ease}.paste-card-method-button.is-active[data-v-fe1ea9cc],.paste-card-method-button[data-v-fe1ea9cc]:hover{color:var(--primary-color-accent)}.paste-card-method-button[data-v-fe1ea9cc]:focus-visible{outline:none;color:var(--primary-color-accent)}@media (max-width:768px){.paste-card[data-v-fe1ea9cc]{height:auto;min-height:30vh;padding:6px;border-radius:12px}.upload-card-busy.paste-card[data-v-fe1ea9cc]{height:auto;min-height:18vh;padding:5px}.upload-card-textarea[data-v-fe1ea9cc]{margin-top:4px;width:calc(100% - 4px)!important}.upload-card-textarea[data-v-fe1ea9cc] .el-textarea__inner{border-radius:10px;padding:8px 10px;font-size:12px}.paste-card-actions[data-v-fe1ea9cc]{width:100%!important;margin-top:8px;gap:8px}.paste-card-upload-button[data-v-fe1ea9cc]{height:32px;min-width:64px;border-radius:8px!important;font-size:12px;letter-spacing:.02em;padding:0 12px}.paste-card-method-group[data-v-fe1ea9cc]{width:128px;height:32px;padding:3px;border-radius:9px}.paste-card-method-group[data-v-fe1ea9cc]:before{border-radius:6px}.paste-card-method-button[data-v-fe1ea9cc]{height:26px;padding:0 10px;font-size:11px;border-radius:6px}}.upload-list-dashboard[data-v-fe1ea9cc]{display:flex;justify-content:space-between;align-items:center;height:7vh;padding:0 15px;box-sizing:border-box;width:100%;min-width:0;position:sticky;top:0;z-index:1;background:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);border-radius:var(--upload-list-radius);box-shadow:var(--glass-shadow);opacity:.7}[data-v-fe1ea9cc] .el-upload-dragger{position:relative;overflow:hidden}[data-v-fe1ea9cc] .el-upload-dragger:before{background-image:radial-gradient(2px 2px at 10% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 20% 30%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 30% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 40% 30%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 50% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 60% 30%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 70% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 80% 30%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 90% 10%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2px 2px at 15% 70%,var(--el-upload-dragger-uniform-color) 50%,transparent 0);background-size:200px 200px}[data-v-fe1ea9cc] .el-upload-dragger:after,[data-v-fe1ea9cc] .el-upload-dragger:before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;z-index:0;transition:opacity .6s ease}[data-v-fe1ea9cc] .el-upload-dragger:after{background-image:radial-gradient(3px 3px at 15% 15%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(3px 3px at 50% 50%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(3px 3px at 85% 85%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2.5px 2.5px at 35% 65%,var(--el-upload-dragger-uniform-color) 50%,transparent 0),radial-gradient(2.5px 2.5px at 65% 35%,var(--el-upload-dragger-uniform-color) 50%,transparent 0);background-size:150px 150px}.upload-card[data-v-fe1ea9cc]:hover .el-upload-dragger:before{opacity:.3;animation:starScroll-fe1ea9cc 60s linear infinite}.upload-card[data-v-fe1ea9cc]:hover .el-upload-dragger:after{opacity:.6;animation:starScroll-fe1ea9cc 40s linear infinite,starPulse-fe1ea9cc 4s ease-in-out infinite}@keyframes starScroll-fe1ea9cc{0%{background-position:0 0}to{background-position:100px 100px}}@keyframes starPulse-fe1ea9cc{0%,to{opacity:.6}50%{opacity:.3}}.modern-action-group[data-v-fe1ea9cc]{display:flex;align-items:center;gap:5px;height:44px;box-sizing:border-box;padding:5px;background:var(--glass-bg);border-radius:12px;border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.modern-action-group[data-v-fe1ea9cc]:hover{background:var(--glass-bg);border-color:var(--glass-border);box-shadow:var(--glass-shadow)}.modern-action-btn[data-v-fe1ea9cc]{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border:none;border-radius:13px;background:var(--upload-action-btn-bg);color:var(--upload-action-btn-color);cursor:pointer;transition:background-color .22s ease,color .22s ease,box-shadow .22s ease,transform .22s ease;font-size:14px;box-shadow:var(--upload-action-btn-shadow);position:relative;overflow:hidden;outline:none!important}.modern-action-btn[data-v-fe1ea9cc]:focus,.modern-action-btn[data-v-fe1ea9cc]:focus-visible{outline:none!important}.modern-action-btn[data-v-fe1ea9cc]:before{content:"";position:absolute;inset:2px;border-radius:11px;background:currentColor;opacity:0;transition:opacity .22s ease}.modern-action-btn[data-v-fe1ea9cc]:hover{background:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-hover-shadow)}.modern-action-btn[data-v-fe1ea9cc]:hover:before{opacity:.08}.modern-action-btn[data-v-fe1ea9cc]:active{transform:translateY(0) scale(.97);box-shadow:var(--upload-action-btn-active-shadow)}.modern-action-btn-copy[data-v-fe1ea9cc]{color:var(--upload-action-copy-color)}.modern-action-btn-retry[data-v-fe1ea9cc]{color:var(--upload-action-retry-color)}.modern-action-btn-danger[data-v-fe1ea9cc]{color:var(--upload-action-danger-color);background:var(--upload-action-danger-bg)}.modern-action-btn-danger[data-v-fe1ea9cc]:hover{background:var(--upload-action-danger-hover-bg);box-shadow:var(--upload-action-danger-hover-shadow)}.modern-dropdown-item-content[data-v-fe1ea9cc]{display:flex;align-items:center;justify-content:space-between;width:100%;gap:12px;padding:4px 0}.modern-dropdown-item-content span[data-v-fe1ea9cc]{font-weight:500;color:var(--el-text-color-primary)}.upload-list-dashboard-title[data-v-fe1ea9cc]{font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px;height:44px;box-sizing:border-box;padding:0 14px;background:var(--dashboard-title-bg,rgba(37,99,235,.06));border:none;border-radius:12px;color:var(--el-text-color-primary)}.upload-list-dashboard-title .el-icon[data-v-fe1ea9cc]{font-size:16px;margin-right:4px;opacity:.85}@media (max-width:768px){.modern-action-group[data-v-fe1ea9cc]{height:34px;gap:2px;padding:2px;border-radius:9px}.modern-action-btn[data-v-fe1ea9cc]{width:28px;height:28px;border-radius:7px;font-size:11px}.upload-list-dashboard-title[data-v-fe1ea9cc]{height:34px;font-size:11px;padding:0 7px;border-radius:9px}.upload-list-dashboard-title .el-icon[data-v-fe1ea9cc]{font-size:13px;margin-right:1px}.upload-list-dashboard[data-v-fe1ea9cc]{padding:0 6px;gap:4px}.upload-list-dashboard-title[data-v-fe1ea9cc]{gap:3px;min-width:0;flex-shrink:1;overflow:hidden}.upload-list-dashboard-action[data-v-fe1ea9cc]{flex-shrink:0}}.logo-link[data-v-17f54292]{text-decoration:none;display:inline-block}.logo[data-v-17f54292]{transition:all .3s ease;border-radius:8px}.logo--fixed[data-v-17f54292]{position:fixed;top:20px;left:20px;z-index:100}.logo--relative[data-v-17f54292]{position:relative}.logo--absolute[data-v-17f54292]{position:absolute;top:5px;left:5px;z-index:100}.logo--static[data-v-17f54292]{position:static}.logo--small[data-v-17f54292]{height:50px;width:50px}.logo--normal[data-v-17f54292]{height:70px;width:70px}.logo--large[data-v-17f54292]{height:90px;width:90px}.logo--hover-enabled[data-v-17f54292]:hover{transform:scale(1.1) rotate(5deg);filter:drop-shadow(0 0 10px var(--logo-glow-color))}@media (max-width:768px){.logo--small[data-v-17f54292]{height:40px;width:40px}.logo--normal[data-v-17f54292]{height:60px;width:60px}.logo--large[data-v-17f54292]{height:75px;width:75px}}.logo[data-v-17f54292]:focus{outline:2px solid var(--el-color-primary);outline-offset:2px}.logo[data-v-17f54292]{filter:var(--logo-filter,none);opacity:var(--logo-opacity,1)}@media (prefers-color-scheme:dark){.logo[data-v-17f54292]{filter:var(--logo-dark-filter,brightness(.9))}}.directory-suggestion-input[data-v-28b8eda7]{width:100%;height:100%;position:relative}.suggestion-dropdown[data-v-28b8eda7]{position:absolute;top:calc(100% + 10px);left:0;width:100%;z-index:9999;border-radius:12px;border:1px solid var(--glass-border);background-color:var(--popper-bg-color);box-shadow:var(--popper-shadow);padding:6px 0;overflow:hidden}.suggestion-list[data-v-28b8eda7]{list-style:none;margin:0;padding:0;max-height:260px;overflow-y:auto}.suggestion-item[data-v-28b8eda7]{padding:8px 16px;font-size:13px;border-radius:6px;margin:2px 6px;cursor:pointer;transition:background-color .2s ease;text-align:left;color:var(--el-text-color-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.suggestion-item[data-v-28b8eda7]:hover{background-color:var(--el-fill-color-light)}#themeToggle[data-v-2122c62a]{border:1px solid var(--glass-border);cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:12px;background-color:var(--glass-bg);box-shadow:none;transition:background-color .25s ease,border-color .25s ease,transform .25s ease}#themeToggle[data-v-2122c62a]:hover{border-color:var(--glass-border-hover)}#themeToggle[data-v-2122c62a]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}@media (max-width:768px){#themeToggle[data-v-2122c62a]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-2122c62a]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-2122c62a]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-2122c62a]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-2122c62a]{transform:rotate(40deg)}.theme_toggle_g[data-v-2122c62a]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-2122c62a],.icon-fade-leave-active[data-v-2122c62a]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-2122c62a]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-2122c62a]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-2122c62a],.icon-fade-leave-from[data-v-2122c62a]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-2122c62a]{display:inline-block}.container[data-v-06705292]{background:var(--bg-color);min-height:100vh}.rotate[data-v-06705292]{animation:spin-06705292 2s ease-in-out}.scale[data-v-06705292]{animation:scale-06705292 .5s ease-in-out}@keyframes spin-06705292{0%{transform:rotate(0deg)}25%{transform:rotate(5deg)}50%{transform:rotate(0deg)}75%{transform:rotate(-3deg)}to{transform:rotate(0deg)}}@keyframes streamer-06705292{0%{background-position:200%}to{background-position:-200%}}@keyframes rotate-shake-06705292{0%{transform:rotate(0deg)}50%{transform:rotate(10deg)}to{transform:rotate(0deg)}}@keyframes shake-06705292{0%{transform:translateX(0)}50%{transform:translateX(-1px)}to{transform:translateX(0)}}@keyframes scale-06705292{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.desktop-only[data-v-06705292]{display:inline-block}.mobile-only[data-v-06705292]{display:none}@media (max-width:768px){.desktop-only[data-v-06705292]{display:none!important}.mobile-only[data-v-06705292]{display:flex!important}}.toggle-dark-button[data-v-06705292]{width:2.5rem;height:2.5rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;border-radius:12px;position:fixed;top:30px;right:80px;padding:0}.more-dropdown[data-v-06705292]{position:fixed;top:30px;right:30px;z-index:100}.more-dropdown .more-button[data-v-06705292]{width:2.5rem;height:2.5rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.more-dropdown .more-button[data-v-06705292]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-method-button[data-v-06705292]{width:2.5rem;height:2.5rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;color:var(--theme-toggle-color);border-radius:12px;position:fixed;top:30px;right:130px;outline:none;padding:0}@media (max-width:768px){.upload-method-button[data-v-06705292]{width:2rem;height:2rem}}.upload-method-icon[data-v-06705292]{outline:none}.more-button .svg-inline--fa[data-v-06705292],.upload-method-button .svg-inline--fa[data-v-06705292]{font-size:1.5em}.directory-tree-trigger .svg-inline--fa[data-v-06705292]{font-size:1.2em}.mobile-more-dropdown[data-v-06705292]{position:fixed;top:30px;right:18px;z-index:100}.mobile-more-button[data-v-06705292]{width:2rem;height:2rem;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.mobile-more-button[data-v-06705292]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-folder-container[data-v-06705292]{display:flex;align-items:center;position:fixed;top:30px;right:180px;z-index:100}.upload-folder-container.no-announcement[data-v-06705292]{right:180px}@media (max-width:768px){.upload-folder-container.no-announcement[data-v-06705292],.upload-folder-container[data-v-06705292]{right:58px}}.upload-folder[data-v-06705292]{width:100px;height:2.5rem;border-radius:12px;display:flex;align-items:center;box-sizing:border-box;transition:all .3s ease,width .4s ease}.upload-folder.active[data-v-06705292]{width:200px}@media (max-width:768px){.upload-folder[data-v-06705292]{width:80px;height:2rem}.upload-folder.active[data-v-06705292]{width:120px}}.directory-tree-trigger[data-v-06705292]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;box-sizing:border-box;border:1px solid var(--glass-border);margin-left:10px;background-color:var(--glass-bg);box-shadow:var(--glass-shadow);color:var(--theme-toggle-color);border-radius:12px;outline:none;cursor:pointer;transition:background-color .25s ease,border-color .25s ease,transform .25s ease}.directory-tree-trigger[data-v-06705292]:hover{border-color:var(--glass-border-hover);transform:scale(1.05)}@media (max-width:768px){.directory-tree-trigger[data-v-06705292]{width:2rem;height:2rem}.directory-tree-trigger .svg-inline--fa[data-v-06705292]{font-size:1.1em}}.upload-folder[data-v-06705292] .inner-folder-input{width:100%;height:100%}.upload-folder[data-v-06705292] .el-input{height:100%;box-sizing:border-box}.upload-folder[data-v-06705292] .el-input__wrapper{border-radius:12px;background-color:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);box-shadow:var(--glass-shadow);border:1px solid var(--glass-border);height:100%;padding:0 10px;box-sizing:border-box;transition:background-color .25s ease,border-color .25s ease,box-shadow .25s ease!important}.upload-folder[data-v-06705292] .el-input__wrapper:hover{background-color:color-mix(in srgb,var(--el-fill-color-blank) 85%,transparent);border-color:var(--glass-border-hover)}html.dark .upload-folder[data-v-06705292] .el-input__wrapper:hover{background-color:color-mix(in srgb,var(--el-bg-color) 88%,transparent);border-color:var(--glass-border-hover)}.upload-folder[data-v-06705292] .el-input__wrapper.is-focus,.upload-folder[data-v-06705292] .el-input__wrapper:focus-within{border-color:var(--glass-border);box-shadow:var(--glass-shadow)!important}.quick-toolbar[data-v-06705292]{--quick-toolbar-size:2.5rem;--quick-toolbar-button-size:calc(var(--quick-toolbar-size) - 6px);position:fixed;bottom:50px;right:30px;width:var(--quick-toolbar-size);box-sizing:border-box;display:flex;flex-direction:column;align-items:center;gap:0;z-index:200;padding:3px;border-radius:999px;border:1px solid var(--glass-border);background-color:var(--glass-bg);box-shadow:none;transition:background-color .24s ease,border-color .24s ease}.directory-tree-trigger[data-v-06705292],.mobile-more-button[data-v-06705292],.more-dropdown .more-button[data-v-06705292],.quick-toolbar[data-v-06705292],.toggle-dark-button[data-v-06705292],.upload-method-button[data-v-06705292]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.quick-toolbar-button[data-v-06705292]{width:var(--quick-toolbar-button-size);height:var(--quick-toolbar-button-size);border:none;transition:transform .22s ease,background-color .22s ease,box-shadow .22s ease,color .22s ease;margin-left:0;padding:0;border-radius:999px;background-color:transparent;box-shadow:none;color:var(--toolbar-button-color);outline:none}.quick-toolbar-actions[data-v-06705292]{display:grid;grid-template-rows:0fr;width:100%;margin-bottom:0;opacity:0;pointer-events:none;transform:translateY(12px);transform-origin:bottom center;transition:grid-template-rows .52s cubic-bezier(.16,1,.3,1),margin-bottom .52s cubic-bezier(.16,1,.3,1),opacity .32s ease,transform .52s cubic-bezier(.16,1,.3,1)}.quick-toolbar.is-expanded .quick-toolbar-actions[data-v-06705292]{grid-template-rows:1fr;margin-bottom:4px;opacity:1;pointer-events:auto;transform:translateY(0)}.quick-toolbar-actions-inner[data-v-06705292]{display:flex;flex-direction:column;align-items:center;gap:3px;min-height:0;overflow:hidden}.quick-toolbar-more.is-active[data-v-06705292]{background-color:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-shadow)}.quick-toolbar-more[data-v-06705292]{margin-top:4px}.quick-toolbar-icon[data-v-06705292]{font-size:16px}.quick-toolbar-toggle-icon[data-v-06705292]{transform:rotate(180deg);transition:transform .32s ease}.quick-toolbar-more.is-active .quick-toolbar-toggle-icon[data-v-06705292]{transform:rotate(0deg)}.info-container[data-v-06705292]:hover,.quick-toolbar-button[data-v-06705292]:hover{transform:scale(1.05);background-color:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-hover-shadow)}.quick-toolbar[data-v-06705292]:hover{border-color:var(--glass-border-hover)}.quick-toolbar-button[data-v-06705292]:hover{transform:none}.toggle-dark-button[data-v-06705292]:hover,.upload-method-button[data-v-06705292]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-folder[data-v-06705292]:hover .el-input__wrapper{background-color:color-mix(in srgb,var(--el-fill-color-blank) 85%,transparent);border-color:var(--glass-border-hover)}html.dark .upload-folder[data-v-06705292]:hover .el-input__wrapper{background-color:color-mix(in srgb,var(--el-bg-color) 88%,transparent);border-color:var(--glass-border-hover)}@media (max-width:768px){.quick-toolbar[data-v-06705292]{--quick-toolbar-size:2rem;--quick-toolbar-button-size:calc(var(--quick-toolbar-size) - 4px);right:18px;bottom:max(72px,calc(6vh + 20px + env(safe-area-inset-bottom)));padding:2px}.quick-toolbar-actions[data-v-06705292]{margin-bottom:0}.quick-toolbar.is-expanded .quick-toolbar-actions[data-v-06705292]{margin-bottom:3px}.quick-toolbar-actions-inner[data-v-06705292]{gap:2px}.quick-toolbar-more[data-v-06705292]{margin-top:3px}.quick-toolbar-icon[data-v-06705292]{font-size:14px}}[data-v-06705292] .el-dialog{border-radius:12px;border:1px solid var(--glass-border);background-color:var(--dialog-bg-color);box-shadow:var(--dialog-box-shadow)}.dialog-action[data-v-06705292]{display:flex;justify-content:center;margin-top:20px}.header[data-v-06705292]{display:flex;justify-content:center;align-items:center;padding:15px;margin-top:5vh;color:var(--upload-header-color);-webkit-user-select:none;-moz-user-select:none;user-select:none;text-decoration:none;position:relative;top:-3vh;transition:all .3s ease}.title[data-v-06705292]{font-size:2.25rem;font-weight:400;font-family:Pacifico,Noto Sans SC,sans-serif;color:var(--upload-title-text-color);text-shadow:var(--upload-title-text-shadow);position:relative;padding-bottom:8px;cursor:pointer;transition:transform .4s cubic-bezier(.4,0,.2,1),filter .25s ease;animation:float-06705292 4s ease-in-out infinite;letter-spacing:3px}.title[data-v-06705292]:hover{transform:scale(1.08);filter:drop-shadow(0 0 20px var(--upload-title-hover-glow))}.title[data-v-06705292]:after{content:"";position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:0;height:3px;background:var(--upload-title-underline-bg);border-radius:3px;transition:width .5s cubic-bezier(.4,0,.2,1);box-shadow:var(--upload-title-underline-shadow)}.title[data-v-06705292]:hover:after{width:80%}.main-title[data-v-06705292]{color:var(--upload-main-title-color);text-decoration:none;display:inline-block;position:relative;filter:drop-shadow(0 0 8px rgba(255,255,255,.3));transition:opacity .16s ease}.title:hover .main-title[data-v-06705292]{opacity:0}.title[data-v-06705292]:hover{color:transparent;text-shadow:none}.title-crayon-text[data-v-06705292]{position:absolute;left:50%;top:-1px;z-index:2;width:-moz-max-content;width:max-content;pointer-events:none;white-space:nowrap;color:var(--upload-title-crayon-deep,#1d2129);opacity:0;-webkit-text-stroke:.35px var(--upload-title-crayon-edge);text-shadow:-1.2px .4px 0 var(--upload-title-crayon-burr),.9px -.7px 0 hsla(0,0%,100%,.24),1.5px .5px 0 var(--upload-title-crayon-dust),-1.7px -.6px 0 var(--upload-title-crayon-dust);transform:translateX(-50%) rotate(-.8deg);transform-origin:left 68%;clip-path:inset(-10px 100% -10px -10px);filter:saturate(1.08) contrast(1.06)}.title:hover .title-crayon-text[data-v-06705292]{animation:crayonWrite-06705292 .82s steps(18) forwards,crayonScratch-06705292 .16s steps(2) .82s 3}@keyframes float-06705292{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes crayonWrite-06705292{0%{opacity:0;clip-path:inset(-10px 100% -10px -10px)}12%{opacity:.92}32%{clip-path:inset(-10px 68% -10px -10px)}47%{clip-path:inset(-10px 52% -10px -10px)}63%{clip-path:inset(-10px 34% -10px -10px)}78%{clip-path:inset(-10px 18% -10px -10px)}to{opacity:.92;clip-path:inset(-10px -10px -10px -10px)}}@keyframes crayonScratch-06705292{0%,to{transform:translateX(-50%) rotate(-.8deg)}50%{transform:translateX(calc(-50% + 1px)) rotate(-.45deg)}}@media (max-width:768px){.title[data-v-06705292]{font-size:1.55rem;letter-spacing:1px}.title[data-v-06705292]:hover{transform:scale(1.05)}}.upload-home[data-v-06705292]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:94vh;background-color:transparent}.upload[data-v-06705292]{margin-bottom:5px;position:relative;top:-3vh}@media (max-width:768px){.header[data-v-06705292]{padding:8px 15px 4px;top:-2.5vh}.title[data-v-06705292]{padding-bottom:5px}.upload[data-v-06705292]{top:-3.8vh}}.footer[data-v-06705292]{height:6vh} \ No newline at end of file +.history-container[data-v-7da2f8c2]{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2000;display:flex;flex-direction:column;color:var(--upload-text-color);clip-path:circle(0 at calc(100% - 200px) 50px);opacity:0;transition:clip-path .6s cubic-bezier(.4,0,.2,1),opacity .3s ease}.history-container[data-v-7da2f8c2]:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background:var(--admin-container-bg-color);z-index:-1;will-change:transform;transform:translateZ(0)}.history-container.active[data-v-7da2f8c2]{clip-path:circle(150% at calc(100% - 200px) 50px);opacity:1}.history-header[data-v-7da2f8c2]{padding:20px 40px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--el-border-color-lighter)}.header-left[data-v-7da2f8c2]{display:flex;align-items:baseline;gap:15px}.header-left h2[data-v-7da2f8c2]{margin:0;font-size:24px;background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent;font-weight:700}.record-count[data-v-7da2f8c2]{color:var(--upload-text-color);font-size:14px;opacity:.8}.header-right[data-v-7da2f8c2]{display:flex;gap:10px}.header-right .el-button[data-v-7da2f8c2]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);border:none;color:var(--theme-toggle-color);transition:all .3s ease}.header-right .el-button[data-v-7da2f8c2]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.header-right .el-button.el-button--danger[data-v-7da2f8c2]{background:#dc2626;color:#fff}.history-content[data-v-7da2f8c2]{flex:1;overflow-y:auto;padding:20px 40px}.grid-view[data-v-7da2f8c2]{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:20px}.grid-item[data-v-7da2f8c2]{background:var(--toolbar-button-bg-color);border-radius:12px;overflow:hidden;box-shadow:var(--toolbar-button-shadow);transition:transform .3s ease,box-shadow .3s ease;border:1px solid var(--glass-border)}.grid-item[data-v-7da2f8c2]:hover{box-shadow:var(--toolbar-button-shadow-hover)}.grid-preview[data-v-7da2f8c2]{height:160px;position:relative;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;overflow:hidden}.grid-preview img[data-v-7da2f8c2],.grid-preview video[data-v-7da2f8c2]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper[data-v-7da2f8c2]{font-size:48px;color:var(--theme-toggle-color);opacity:.5}.grid-overlay[data-v-7da2f8c2]{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .3s ease}.grid-item:hover .grid-overlay[data-v-7da2f8c2]{opacity:1}.grid-actions[data-v-7da2f8c2]{display:flex;gap:15px}.grid-info[data-v-7da2f8c2]{padding:12px}.file-name[data-v-7da2f8c2]{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:5px;color:var(--upload-text-color)}.upload-time[data-v-7da2f8c2]{font-size:12px;color:var(--upload-text-color);opacity:.6}.list-view[data-v-7da2f8c2]{display:flex;flex-direction:column;gap:10px}.list-item[data-v-7da2f8c2]{display:flex;align-items:center;padding:12px 15px;background:var(--toolbar-button-bg-color);border-radius:12px;box-shadow:var(--toolbar-button-shadow);border:1px solid var(--glass-border);transition:all .3s ease}.list-item[data-v-7da2f8c2]:hover{transform:translateX(5px);box-shadow:var(--toolbar-button-shadow-hover)}.list-preview[data-v-7da2f8c2]{width:50px;height:50px;border-radius:8px;overflow:hidden;margin-right:15px;background:var(--el-fill-color-light);display:flex;align-items:center;justify-content:center;flex-shrink:0}.list-preview img[data-v-7da2f8c2],.list-preview video[data-v-7da2f8c2]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper-small[data-v-7da2f8c2]{font-size:24px;color:var(--theme-toggle-color);opacity:.5}.list-info[data-v-7da2f8c2]{flex:1;min-width:0;margin-right:20px}.file-url[data-v-7da2f8c2]{font-size:12px;color:var(--upload-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.6}.list-meta[data-v-7da2f8c2]{margin-right:20px;text-align:right;min-width:140px}.list-actions[data-v-7da2f8c2]{display:flex;gap:8px}.empty-state[data-v-7da2f8c2]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--upload-text-color);font-size:18px;opacity:.5}.empty-icon[data-v-7da2f8c2]{font-size:64px;margin-bottom:20px;color:var(--theme-toggle-color)}.history-content[data-v-7da2f8c2]::-webkit-scrollbar{width:8px}.history-content[data-v-7da2f8c2]::-webkit-scrollbar-track{background:transparent}.history-content[data-v-7da2f8c2]::-webkit-scrollbar-thumb{background:var(--el-border-color);border-radius:4px}.history-content[data-v-7da2f8c2]::-webkit-scrollbar-thumb:hover{background:var(--el-border-color-darker)}.action-btn-view[data-v-7da2f8c2]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);border:none;color:var(--theme-toggle-color)}.action-btn-view[data-v-7da2f8c2]:hover{box-shadow:var(--toolbar-button-shadow-hover);color:var(--el-color-primary)}.history-group[data-v-7da2f8c2]{position:relative;padding-left:30px;border-left:2px solid var(--el-border-color-lighter);margin-left:10px;padding-bottom:30px}.history-group[data-v-7da2f8c2]:last-child{border-left:2px solid transparent}.timeline-header[data-v-7da2f8c2]{display:flex;align-items:center;margin-bottom:20px;position:relative}.timeline-dot[data-v-7da2f8c2]{position:absolute;left:-38px;width:14px;height:14px;border-radius:50%;background:var(--el-upload-dragger-uniform-color);box-shadow:none;z-index:2;box-sizing:border-box}.date-label[data-v-7da2f8c2]{font-size:20px;font-weight:700;background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent}.load-more-container[data-v-7da2f8c2]{display:flex;justify-content:center;padding:20px}.loading-indicator[data-v-7da2f8c2]{display:flex;align-items:center;gap:8px;color:var(--el-upload-dragger-uniform-color)}.load-more-hint[data-v-7da2f8c2],.no-more-hint[data-v-7da2f8c2]{color:var(--upload-text-color);opacity:.5;font-size:14px}.no-more-hint[data-v-7da2f8c2]{text-align:center;padding:20px}@media (max-width:768px){.history-header[data-v-7da2f8c2]{padding:15px 20px}.header-left h2[data-v-7da2f8c2]{font-size:20px}.history-content[data-v-7da2f8c2]{padding:15px 20px}.grid-view[data-v-7da2f8c2]{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:15px}.grid-preview[data-v-7da2f8c2]{height:120px}.list-meta[data-v-7da2f8c2]{display:none}.list-info[data-v-7da2f8c2]{margin-right:10px}}.page-footer[data-v-08acbaa9]{display:flex;justify-content:center;align-items:center;width:100vw;color:var(--page-footer-text-color);font-size:large;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.page-footer[data-v-08acbaa9]{font-size:small}}.footer-name[data-v-08acbaa9]{color:var(--page-footer-name-color);font-weight:700;text-decoration:none;position:relative;transition:all .3s ease}.footer-name[data-v-08acbaa9]:after{content:"";position:absolute;width:0;height:2px;bottom:-2px;left:0;background-color:var(--page-footer-name-color);transition:width .3s ease-in-out}.footer-name[data-v-08acbaa9]:hover:after{width:100%}.footer-link-icon[data-v-08acbaa9]{color:var(--page-footer-name-color);margin-left:5px;transition:transform .3s ease-in-out}.footer-link-icon[data-v-08acbaa9]:hover{transform:scale(1.2) rotate(-12deg)}.el-input-number{display:inline-flex;line-height:30px;position:relative;vertical-align:middle;width:150px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;line-height:1;text-align:center}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__decrease,.el-input-number__increase{align-items:center;background:var(--el-fill-color-light);bottom:1px;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:13px;height:auto;justify-content:center;position:absolute;top:1px;-webkit-user-select:none;user-select:none;width:32px;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-left:var(--el-border);border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{line-height:38px;width:180px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{font-size:14px;width:40px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{line-height:22px;width:120px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{font-size:12px;width:24px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-bottom:var(--el-border);border-radius:0 var(--el-border-radius-base) 0 0;bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;border-right:none;left:auto;right:1px;top:auto}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;display:flex;height:32px;width:100%}.el-slider__runway{background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;height:var(--el-slider-height);position:relative}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{background-color:var(--el-slider-main-bg-color);border-bottom-left-radius:var(--el-slider-border-radius);border-top-left-radius:var(--el-slider-border-radius);height:var(--el-slider-height);position:absolute}.el-slider__button-wrapper{background-color:transparent;height:var(--el-slider-button-wrapper-size);line-height:normal;outline:none;position:absolute;text-align:center;top:var(--el-slider-button-wrapper-offset);transform:translateX(-50%);-webkit-user-select:none;user-select:none;width:var(--el-slider-button-wrapper-size);z-index:1}.el-slider__button-wrapper:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{background-color:var(--el-color-white);border:2px solid var(--el-slider-main-bg-color);border-radius:50%;box-sizing:border-box;display:inline-block;height:var(--el-slider-button-size);transition:var(--el-transition-duration-fast);-webkit-user-select:none;user-select:none;vertical-align:middle;width:var(--el-slider-button-size)}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{background-color:var(--el-slider-stop-bg-color);border-radius:var(--el-border-radius-circle);height:var(--el-slider-height);position:absolute;transform:translateX(-50%);width:var(--el-slider-height)}.el-slider__marks{height:100%;left:12px;top:0;width:18px}.el-slider__marks-text{color:var(--el-color-info);font-size:14px;margin-top:15px;position:absolute;transform:translateX(-50%);white-space:pre}.el-slider.is-vertical{display:inline-flex;flex:0;height:100%;position:relative;width:auto}.el-slider.is-vertical .el-slider__runway{height:100%;margin:0 16px;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__bar{border-radius:0 0 3px 3px;height:auto;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__button-wrapper{left:var(--el-slider-button-wrapper-offset);top:auto;transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{left:15px;margin-top:0;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.channel-icon-wrapper[data-v-ce6ff2ce]{display:inline-flex;align-items:center;justify-content:center;line-height:1}.channel-icon-wrapper[data-v-ce6ff2ce] svg,.channel-svg-icon[data-v-ce6ff2ce]{width:1em;height:1em;fill:currentColor}.channel-icon-wrapper.channel-brand-telegram[data-v-ce6ff2ce]{color:#229ed9}.channel-icon-wrapper.channel-brand-cfr2[data-v-ce6ff2ce]{color:#f38020}.channel-icon-wrapper.channel-brand-s3[data-v-ce6ff2ce]{color:#f90}.channel-icon-wrapper.channel-brand-discord[data-v-ce6ff2ce]{color:#5865f2}.channel-icon-wrapper.channel-brand-huggingface[data-v-ce6ff2ce]{color:#ff9d00}.channel-icon-wrapper.channel-brand-webdav[data-v-ce6ff2ce]{color:#14b8a6}.upload-settings-dialog .radio-card-group.compact{gap:8px}.upload-settings-dialog .radio-card-group.compact .radio-card{padding:8px 12px;font-size:13px}.upload-settings-dialog .radio-card-group.compact .radio-card .el-radio__label{display:flex;align-items:center;gap:6px}.upload-settings-dialog .radio-card-group.compact .channel-icon{width:18px;font-size:18px;text-align:center;flex-shrink:0}.upload-settings-dialog .slider-item{flex-direction:column;align-items:flex-start;gap:12px}.upload-settings-dialog .slider-wrapper{display:flex;align-items:center;gap:12px;width:100%}.upload-settings-dialog .slider-wrapper .el-slider{flex:1;min-width:0}.upload-settings-dialog .slider-input{width:96px!important;flex-shrink:0}.upload-settings-dialog .slider-input .el-input__inner{text-align:center}.upload-settings-dialog .slider-input-wrapper{display:flex;align-items:center;gap:6px;flex-shrink:0}.upload-settings-dialog .slider-unit{font-size:13px;font-weight:500;color:var(--el-text-color-secondary)}@media (max-width:768px){.upload-settings-dialog .setting-item .radio-card-group.compact{width:100%}.upload-settings-dialog .radio-card-group.compact{flex-direction:row;display:grid;grid-template-columns:repeat(2,1fr);gap:8px;width:100%}.upload-settings-dialog .radio-card-group.compact .radio-card{width:100%;box-sizing:border-box;justify-content:center;flex:1}.upload-settings-dialog .radio-card-group.compact .radio-card .el-radio__label{justify-content:center}.upload-settings-dialog .slider-wrapper{gap:8px}}.el-progress{align-items:center;display:flex;line-height:1;position:relative}.el-progress__text{color:var(--el-text-color-regular);font-size:14px;line-height:1;margin-left:5px;min-width:50px}.el-progress__text i{display:block;vertical-align:middle}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{left:0;margin:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{display:inline-block;vertical-align:middle}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{display:block;margin-right:0;padding-right:0}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);border-radius:100px;height:6px;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{background-color:var(--el-color-primary);border-radius:100px;height:100%;left:0;line-height:1;position:absolute;text-align:right;top:0;transition:width .6s ease;white-space:nowrap}.el-progress-bar__inner:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{animation:indeterminate 3s infinite;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 0,transparent 50%,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 75%,transparent 0,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{color:#fff;display:inline-block;font-size:12px;margin:0 5px;vertical-align:middle}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.upload-list-item[data-v-645a7810]{display:flex;align-items:center;justify-content:space-between;margin:8px 10px;border:1px solid var(--upload-list-item-border-color,rgba(37,99,235,.1));padding:10px 12px;border-radius:16px;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);box-shadow:none;transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item[data-v-645a7810]:hover{border-color:var(--upload-list-item-hover-border,rgba(37,99,235,.25));box-shadow:none}.upload-list-item-content[data-v-645a7810]{display:flex;flex-direction:column;margin-left:10px}.upload-list-item-action[data-v-645a7810]{display:flex;flex-direction:column;align-items:center;gap:6px}.upload-list-item-url-row[data-v-645a7810]{display:flex;flex-direction:row;align-items:center;width:38vw;gap:8px;margin-bottom:6px}.upload-list-item-url-row[data-v-645a7810]:last-child{margin-bottom:0}.upload-list-item-url[data-v-645a7810]{display:flex;flex-direction:column}.file-icon[data-v-645a7810]{font-size:30px;color:var(--upload-list-file-icon-color)}.upload-list-item-name-wrapper[data-v-645a7810]{display:flex;align-items:center;justify-content:center;padding:8px 16px;background:var(--file-name-bg,rgba(37,99,235,.05));border-radius:10px;margin-bottom:8px;border:1px solid var(--file-name-border,rgba(37,99,235,.12));transition:all .3s ease}.upload-list-item-name-wrapper[data-v-645a7810]:hover{background:var(--file-name-hover-bg,rgba(37,99,235,.09));border-color:var(--file-name-hover-border,rgba(37,99,235,.2))}.upload-list-item-name[data-v-645a7810]{font-size:14px;font-weight:600;max-width:28vw;color:var(--el-text-color-primary);letter-spacing:.3px;text-align:center}.upload-list-item-progress[data-v-645a7810]{margin-top:8px;width:28vw;padding:4px 8px;background:var(--progress-wrapper-bg,rgba(37,99,235,.04));border-radius:12px;border:1px solid var(--progress-wrapper-border,rgba(37,99,235,.1))}.upload-list-item-progress[data-v-645a7810] .el-progress{--el-color-primary:var(--primary-color)}.upload-list-item-progress[data-v-645a7810] .el-progress-bar{padding-right:0;margin-right:0}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__outer{height:10px!important;border-radius:8px;background:var(--progress-outer-bg,rgba(0,0,0,.045));box-shadow:none;overflow:hidden}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__inner{border-radius:8px;background:var(--primary-color)!important;box-shadow:none;position:relative;overflow:hidden;transition:width .3s ease}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__inner:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:hsla(0,0%,100%,.12);pointer-events:none}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__inner:before{content:"";position:absolute;top:0;left:-100%;width:300%;height:100%;background:repeating-linear-gradient(45deg,transparent,transparent 8px,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 16px);animation:progressStripes-645a7810 1s linear infinite}.upload-list-item-progress[data-v-645a7810] .el-progress--success .el-progress-bar__inner{background:#16a34a!important;background-size:200% 100%;box-shadow:none;animation:none}.upload-list-item-progress[data-v-645a7810] .el-progress--success .el-progress-bar__inner:after,.upload-list-item-progress[data-v-645a7810] .el-progress--success .el-progress-bar__inner:before{animation:none;background:none}.upload-list-item-progress[data-v-645a7810] .el-progress--exception .el-progress-bar__inner{background:#dc2626!important;background-size:200% 100%;box-shadow:none;animation:progressPulse-645a7810 1s ease-in-out infinite}.upload-list-item-progress[data-v-645a7810] .el-progress--exception .el-progress-bar__inner:before{animation:none;background:none}@keyframes progressStripes-645a7810{0%{transform:translateX(0)}to{transform:translateX(22.627px)}}@keyframes progressPulse-645a7810{0%,to{opacity:1}50%{opacity:.7}}.upload-list-item-url[data-v-645a7810] .el-input{transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item-url[data-v-645a7810] .el-input__wrapper{border-radius:10px;box-shadow:none;transition:all .3s cubic-bezier(.4,0,.2,1);background:var(--el-fill-color-blank);border:1px solid var(--el-border-color-lighter);overflow:hidden;position:relative;padding:0}.upload-list-item-url[data-v-645a7810] .el-input-group>.el-input__wrapper{border-radius:0 9px 9px 0!important}.upload-list-item-url[data-v-645a7810] .el-input__wrapper:hover{box-shadow:none;border-color:var(--el-color-primary-light-5)}.upload-list-item-url[data-v-645a7810] .el-input__wrapper.is-focus{box-shadow:none;border-color:var(--el-color-primary)}.upload-list-item-url[data-v-645a7810] .el-input__wrapper.is-focus:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(37,99,235,.08),transparent);animation:shimmer-645a7810 2s infinite;z-index:0}@keyframes shimmer-645a7810{0%{left:-100%}to{left:100%}}.upload-list-item-url[data-v-645a7810] .el-input__inner{font-size:13px;font-family:Courier New,Monaco,monospace;color:var(--el-text-color-regular);transition:all .3s ease;padding-left:12px;position:relative;z-index:1;border-radius:0 10px 10px 0}.upload-list-item-url[data-v-645a7810] .el-input__inner::-moz-selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-645a7810] .el-input__inner::selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-645a7810] .el-input-group__prepend{background:var(--el-color-primary-light-9);color:var(--el-color-primary);font-weight:600;font-size:12px;border:none;padding:0 14px;margin:0;border-radius:9px 0 0 9px;box-shadow:none;transition:all .3s ease;letter-spacing:.5px;position:relative;z-index:1}.upload-list-item-url[data-v-645a7810] .el-input-group__prepend:after{content:"";position:absolute;right:0;top:50%;transform:translateY(-50%);height:60%;width:1px;background:var(--el-color-primary-light-7);opacity:.3;transition:all .3s ease}.upload-list-item-url[data-v-645a7810] .el-input:hover .el-input-group__prepend{background:var(--el-color-primary-light-8)}.upload-list-item-url[data-v-645a7810] .el-input:hover .el-input-group__prepend:after{opacity:.5}.upload-list-item-url[data-v-645a7810] .el-input.is-focus .el-input-group__prepend{background:var(--el-color-primary);color:#fff;animation:prependPulse-645a7810 2s ease-in-out infinite}.upload-list-item-url[data-v-645a7810] .el-input.is-focus .el-input-group__prepend:after{background:hsla(0,0%,100%,.3);opacity:1}@keyframes prependPulse-645a7810{0%,to{opacity:1}50%{opacity:.95}}.modern-file-action-btn[data-v-645a7810]{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:10px;background:var(--upload-action-btn-bg);color:var(--upload-action-btn-color);box-shadow:var(--upload-action-btn-shadow);cursor:pointer;transition:background-color .22s ease,color .22s ease,transform .22s ease;font-size:16px;position:relative;overflow:hidden;margin:4px 0;outline:none}.modern-file-action-btn[data-v-645a7810]:before{content:"";position:absolute;inset:2px;border-radius:8px;background:currentColor;opacity:0;transition:opacity .22s ease}.modern-file-action-btn[data-v-645a7810]:hover{background:var(--upload-action-btn-hover-bg)}.modern-file-action-btn[data-v-645a7810]:hover:before{opacity:.08}.modern-file-action-btn[data-v-645a7810]:active{transform:scale(.96)}.modern-file-action-btn-primary[data-v-645a7810]{color:var(--upload-action-copy-color)}.modern-file-action-btn-danger[data-v-645a7810]{color:var(--upload-action-danger-color);background:var(--upload-action-danger-bg)}.modern-file-action-btn-danger[data-v-645a7810]:hover{background:var(--upload-action-danger-hover-bg)}@media (max-width:768px){.upload-list-item[data-v-645a7810]{margin:5px 6px;padding:7px 8px;border-radius:12px}.upload-list-item-content[data-v-645a7810]{margin-left:2px}.upload-list-item-action[data-v-645a7810]{gap:3px}.upload-list-item-url-row[data-v-645a7810]{width:42vw;flex-direction:column;gap:4px;margin-bottom:4px}.upload-list-item-progress[data-v-645a7810]{width:32vw;margin-top:5px;padding:2px 5px;border-radius:9px}.upload-list-item-progress[data-v-645a7810] .el-progress-bar__outer{height:6px!important}.upload-list-item-url[data-v-645a7810] .el-input__wrapper{border-radius:7px}.upload-list-item-url[data-v-645a7810] .el-input__inner{font-size:10px;padding-left:8px}.upload-list-item-url[data-v-645a7810] .el-input-group__prepend{font-size:9px;padding:0 6px;border-radius:7px 0 0 7px}.modern-file-action-btn[data-v-645a7810]{width:26px;height:26px;margin:2px 0;border-radius:8px;font-size:12px}.upload-list-item-name-wrapper[data-v-645a7810]{padding:3px 8px;margin-bottom:5px;border-radius:7px}.upload-list-item-name[data-v-645a7810]{font-size:11px;width:32vw}}.el-upload{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;align-items:center;cursor:pointer;display:inline-flex;justify-content:center;outline:none}.el-upload.is-disabled{cursor:not-allowed}.el-upload.is-disabled:focus{color:inherit}.el-upload.is-disabled:focus,.el-upload.is-disabled:focus .el-upload-dragger{border-color:var(--el-border-color-darker)}.el-upload.is-disabled .el-upload-dragger{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-upload.is-disabled .el-upload-dragger .el-upload__text{color:var(--el-text-color-placeholder)}.el-upload.is-disabled .el-upload-dragger .el-upload__text em{color:var(--el-disabled-text-color)}.el-upload.is-disabled .el-upload-dragger:hover{border-color:var(--el-border-color-darker)}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);font-size:12px;margin-top:7px}.el-upload iframe{filter:alpha(opacity=0);left:0;opacity:0;position:absolute;top:0;z-index:-1}.el-upload--picture-card{align-items:center;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:var(--el-upload-picture-card-size);justify-content:center;vertical-align:top;width:var(--el-upload-picture-card-size)}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{color:var(--el-color-primary)}.el-upload:focus,.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;cursor:pointer;overflow:hidden;padding:var(--el-upload-dragger-padding-vertical) var(--el-upload-dragger-padding-horizontal);position:relative;text-align:center}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);font-size:67px;line-height:50px;margin-bottom:16px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary);padding:calc(var(--el-upload-dragger-padding-vertical) - 1px) calc(var(--el-upload-dragger-padding-horizontal) - 1px)}.el-upload-list{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;list-style:none;margin:10px 0 0;padding:0;position:relative}.el-upload-list__item{border-radius:4px;box-sizing:border-box;color:var(--el-text-color-regular);font-size:14px;margin-bottom:5px;position:relative;transition:all .5s cubic-bezier(.55,0,.1,1);width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{color:var(--el-text-color-regular);cursor:pointer;display:none;opacity:.75;position:absolute;right:5px;top:50%;transform:translateY(-50%);transition:opacity var(--el-transition-duration)}.el-upload-list__item .el-icon--close:hover{color:var(--el-color-primary);opacity:1}.el-upload-list__item .el-icon--close-tip{color:var(--el-color-primary);cursor:pointer;display:none;font-size:12px;font-style:normal;opacity:1;position:absolute;right:5px;top:1px}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;flex-direction:column;justify-content:center;margin-left:4px;width:calc(100% - 30px)}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{align-items:center;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);padding:0 4px;text-align:center;transition:color var(--el-transition-duration)}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{align-items:center;display:none;height:100%;justify-content:center;line-height:inherit;position:absolute;right:5px;top:0;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{color:var(--el-text-color-regular);display:none;font-size:12px;position:absolute;right:10px;top:0}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:inline-flex;height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;overflow:hidden;padding:0;width:var(--el-upload-list-picture-card-size)}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:block;opacity:0}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{height:100%;object-fit:contain;width:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{align-items:center;background-color:var(--el-overlay-color-lighter);color:#fff;cursor:default;display:inline-flex;font-size:20px;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:opacity var(--el-transition-duration);width:100%}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:16px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{color:inherit;font-size:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{bottom:auto;left:50%;top:50%;transform:translate(-50%,-50%);width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{align-items:center;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:flex;margin-top:10px;overflow:hidden;padding:10px;z-index:0}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{display:inline-flex;opacity:0}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{align-items:center;background-color:var(--el-color-white);display:inline-flex;height:70px;justify-content:center;object-fit:contain;position:relative;width:70px;z-index:1}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);height:26px;position:absolute;right:-17px;text-align:center;top:-7px;transform:rotate(45deg);width:46px}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{cursor:default;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:10}.el-upload-cover:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;height:100%;width:100%}.el-upload-cover__label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-cover__label i{color:#fff;font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-cover__progress{display:inline-block;position:static;vertical-align:middle;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{height:100%;left:0;position:absolute;top:0;width:100%}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);bottom:0;height:100%;left:0;position:absolute;text-align:center;width:100%}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;display:inline-block;font-size:14px;margin-top:60px;transition:var(--el-transition-md-fade);vertical-align:middle}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{background-color:#fff;bottom:0;color:var(--el-text-color-primary);font-size:14px;font-weight:400;height:36px;left:0;line-height:36px;margin:0;overflow:hidden;padding:0 10px;position:absolute;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}@property --border-angle{syntax:"";initial-value:0deg;inherits:false}@keyframes borderRotate-a099cfac{0%{--border-angle:0deg}to{--border-angle:360deg}}.upload-form[data-v-a099cfac]{--upload-card-height:45vh;--upload-card-busy-height:17vh;--upload-list-height:7vh;--upload-list-inner-height:calc(var(--upload-list-height) - 2px);--upload-list-busy-height:calc(var(--upload-card-height) - var(--upload-card-busy-height) + var(--upload-list-height));--upload-list-gap:10px;--upload-list-radius:15px;--upload-card-vertical-padding:40px;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;height:calc(var(--upload-card-height) + var(--upload-list-height) + var(--upload-list-gap) + var(--upload-card-vertical-padding))}.upload-list-card[data-v-a099cfac]{width:55vw;height:var(--upload-list-height);margin-top:var(--upload-list-gap);display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:var(--upload-list-radius);background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)!important;transition:height .3s ease;overflow:hidden}.upload-list-card[data-v-a099cfac] .el-card__body{padding:0;width:100%;height:100%;overflow:hidden}.upload-list-container[data-v-a099cfac]{width:100%;height:100%;overflow:hidden}@media (max-width:768px){.upload-list-card[data-v-a099cfac]{width:70vw}}.upload-list-card.upload-list-busy[data-v-a099cfac]{height:var(--upload-list-busy-height)}.upload-card-wrapper[data-v-a099cfac]{position:relative;overflow:visible}.upload-card-glow[data-v-a099cfac]{position:absolute;width:200px;height:200px;border-radius:50%;background:var(--upload-card-hover-glow-bg);pointer-events:none;transform:translate(-50%,-50%);opacity:0;transition:opacity .3s ease;z-index:10}.upload-card[data-v-a099cfac]{width:55vw;padding:20px;background:none}@media (max-width:768px){.upload-card[data-v-a099cfac]{width:70vw}}.upload-card-busy[data-v-a099cfac] .el-upload-dragger{height:var(--upload-card-busy-height)}[data-v-a099cfac] .el-upload-dragger{display:flex;flex-direction:column;justify-content:center;align-items:center;height:var(--upload-card-height);border-radius:15px;border:1px solid var(--glass-border);opacity:.7;background-color:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);box-shadow:var(--glass-shadow);transition:height .3s ease,opacity .25s ease,border-color .25s ease,box-shadow .25s ease,background-color .25s ease}[data-v-a099cfac] .el-upload:focus .el-upload-dragger{border-color:var(--glass-border-hover)}[data-v-a099cfac] .el-upload-dragger.is-dragover,[data-v-a099cfac] .el-upload-dragger:hover{opacity:.7;box-shadow:var(--glass-shadow)}.is-uploading[data-v-a099cfac] .el-upload-dragger{border-color:transparent!important}.upload-card.is-uploading[data-v-a099cfac]{position:relative;background:none}.upload-card.is-uploading[data-v-a099cfac]:before{content:"";position:absolute;top:20px;left:20px;right:20px;bottom:20px;border-radius:15px;padding:2px;background:conic-gradient(from var(--border-angle),transparent 0deg,transparent 30deg,var(--upload-card-effect-color,#2563eb) 60deg,var(--upload-card-effect-highlight-color,color-mix(in srgb,var(--upload-card-effect-color,#2563eb) 70%,#fff)) 90deg,transparent 120deg,transparent 180deg,var(--upload-card-effect-highlight-color,color-mix(in srgb,var(--upload-card-effect-color,#2563eb) 70%,#fff)) 210deg,var(--upload-card-effect-color,#2563eb) 240deg,transparent 270deg,transparent 1turn);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:borderRotate-a099cfac 2s linear infinite;pointer-events:none;z-index:1}.el-upload__text[data-v-a099cfac]{font-weight:700;font-size:medium;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .3s ease}@media (max-width:768px){.el-upload__text[data-v-a099cfac]{font-size:small}}.el-upload__text.upload-list-busy[data-v-a099cfac]{font-size:small}.el-icon--upload[data-v-a099cfac]{font-size:100px;transition:font-size .3s ease;color:#60a5fa}html.dark .el-icon--upload[data-v-a099cfac]{color:#6b6b73}.el-upload__text[data-v-a099cfac] em{color:#1d4ed8}html.dark .el-upload__text[data-v-a099cfac] em{color:#93c5fd}.el-icon--upload.upload-list-busy[data-v-a099cfac]{font-size:60px}@media (max-width:768px){.el-icon--upload[data-v-a099cfac]{font-size:50px}.el-icon--upload.upload-list-busy[data-v-a099cfac]{font-size:30px}}.paste-card[data-v-a099cfac]{display:flex;flex-direction:column;justify-content:center;align-items:center;height:var(--upload-card-height);border-radius:15px;border:var(--el-upload-dragger-border);box-shadow:none;opacity:.7;background-color:var(--el-upload-dragger-bg-color);transition:all .3s ease;box-sizing:border-box}.paste-card[data-v-a099cfac]:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.paste-card.is-uploading[data-v-a099cfac]{position:relative;border-color:transparent!important;overflow:visible}.paste-card.is-uploading[data-v-a099cfac]:before{content:"";position:absolute;inset:-4px;border-radius:15px;padding:2px;background:conic-gradient(from var(--border-angle),transparent 0deg,transparent 30deg,var(--upload-card-effect-color,#2563eb) 60deg,var(--upload-card-effect-highlight-color,color-mix(in srgb,var(--upload-card-effect-color,#2563eb) 70%,#fff)) 90deg,transparent 120deg,transparent 180deg,var(--upload-card-effect-highlight-color,color-mix(in srgb,var(--upload-card-effect-color,#2563eb) 70%,#fff)) 210deg,var(--upload-card-effect-color,#2563eb) 240deg,transparent 270deg,transparent 1turn);-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:borderRotate-a099cfac 2s linear infinite;pointer-events:none;z-index:1}.paste-card[data-v-a099cfac] .el-card__body{padding:0;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}.upload-card-busy.paste-card[data-v-a099cfac]{height:var(--upload-card-busy-height)}.upload-card-textarea[data-v-a099cfac]{width:50vw;height:70%;border-radius:16px;background:color-mix(in srgb,var(--primary-color) 4%,var(--glass-bg));border:1px solid var(--glass-border);box-shadow:none;transition:background-color .22s ease,border-color .22s ease,box-shadow .22s ease;box-sizing:border-box;display:flex;position:relative;overflow:hidden}.upload-card-busy .upload-card-textarea[data-v-a099cfac]{height:50%}.upload-card-textarea[data-v-a099cfac]:hover{background:color-mix(in srgb,var(--primary-color) 6%,var(--glass-bg));border-color:var(--glass-border-hover)}.upload-card-textarea[data-v-a099cfac]:focus-within{background:color-mix(in srgb,var(--primary-color) 7%,var(--glass-bg));border-color:color-mix(in srgb,var(--primary-color) 45%,var(--glass-border));box-shadow:none}.upload-card-textarea[data-v-a099cfac] .el-textarea__inner{border-radius:16px;background:transparent;transition:color .2s ease,background-color .2s ease;resize:none;border:none;box-shadow:none!important;padding:16px 20px;font-size:14px;line-height:1.6;color:var(--el-text-color-primary)}.upload-card-textarea[data-v-a099cfac] .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}.upload-card-textarea[data-v-a099cfac] .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}.upload-card-textarea[data-v-a099cfac] .el-textarea__inner:focus{background:transparent;box-shadow:none!important}.upload-card-textarea[data-v-a099cfac] ::-webkit-scrollbar{width:6px;height:6px}.upload-card-textarea[data-v-a099cfac] ::-webkit-scrollbar-track{background:transparent;border-radius:6px;margin:8px}.upload-card-textarea[data-v-a099cfac] ::-webkit-scrollbar-thumb{background:rgba(37,99,235,.5);border-radius:6px;-webkit-transition:background .3s ease;transition:background .3s ease}.upload-card-textarea[data-v-a099cfac] ::-webkit-scrollbar-thumb:hover{background:rgba(37,99,235,.7)}.paste-card-actions[data-v-a099cfac]{display:flex;justify-content:space-between;align-items:center;width:50vw;gap:12px;margin-top:16px}.paste-card-upload-button[data-v-a099cfac]{min-width:92px;height:38px;border-radius:10px!important;font-weight:600;font-size:14px;letter-spacing:.04em;color:var(--primary-color-accent)!important;background:color-mix(in srgb,var(--primary-color) 10%,transparent)!important;border:1px solid color-mix(in srgb,var(--primary-color) 36%,var(--glass-border))!important;box-shadow:none;transition:background-color .2s ease,border-color .2s ease,transform .2s ease!important}.paste-card-upload-button[data-v-a099cfac]:hover{color:var(--primary-color-accent)!important;background:color-mix(in srgb,var(--primary-color) 14%,transparent)!important;border-color:color-mix(in srgb,var(--primary-color) 52%,var(--glass-border))!important;transform:translateY(-1px);box-shadow:none}.paste-card-upload-button[data-v-a099cfac]:focus-visible{color:var(--primary-color-accent)!important;background:color-mix(in srgb,var(--primary-color) 14%,transparent)!important;border-color:color-mix(in srgb,var(--primary-color) 52%,var(--glass-border))!important;box-shadow:0 0 0 3px color-mix(in srgb,var(--primary-color) 14%,transparent)!important}.paste-card-upload-button[data-v-a099cfac]:active{transform:translateY(0);background:color-mix(in srgb,var(--primary-color) 18%,transparent)!important}.upload-card-busy .paste-card-upload-button[data-v-a099cfac]{min-width:72px;height:32px;border-radius:8px!important;font-size:13px;letter-spacing:.02em}.upload-card-busy .paste-card-actions[data-v-a099cfac]{margin-top:10px}.paste-card-method-group[data-v-a099cfac]{position:relative;display:inline-flex;align-items:center;width:158px;height:38px;box-sizing:border-box;gap:2px;padding:3px;background:var(--glass-bg);border:1px solid var(--glass-border);border-radius:10px;overflow:hidden}.paste-card-method-group[data-v-a099cfac]:before{content:"";position:absolute;top:3px;left:3px;width:calc(50% - 4px);height:calc(100% - 6px);border-radius:7px;background:color-mix(in srgb,var(--primary-color) 14%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--primary-color) 42%,var(--glass-border)) inset;transform:translateX(0);transition:transform .22s cubic-bezier(.4,0,.2,1);pointer-events:none}.paste-card-method-group.is-external[data-v-a099cfac]:before{transform:translateX(calc(100% + 2px))}.paste-card-method-button[data-v-a099cfac]{position:relative;z-index:1;display:inline-flex;flex:1 1 0;align-items:center;justify-content:center;min-width:0;height:30px;box-sizing:border-box;padding:0 14px;border:none;border-radius:7px;background:transparent;font-weight:500;font-size:13px;line-height:1;color:var(--el-text-color-secondary);cursor:pointer;transition:color .2s ease}.paste-card-method-button.is-active[data-v-a099cfac],.paste-card-method-button[data-v-a099cfac]:hover{color:var(--primary-color-accent)}.paste-card-method-button[data-v-a099cfac]:focus-visible{outline:none;color:var(--primary-color-accent)}@media (max-width:768px){.paste-card[data-v-a099cfac]{height:auto;min-height:30vh;padding:6px;border-radius:12px}.upload-card-busy.paste-card[data-v-a099cfac]{height:auto;min-height:18vh;padding:5px}.upload-card-textarea[data-v-a099cfac]{margin-top:4px;width:calc(100% - 4px)!important}.upload-card-textarea[data-v-a099cfac] .el-textarea__inner{border-radius:10px;padding:8px 10px;font-size:12px}.paste-card-actions[data-v-a099cfac]{width:100%!important;margin-top:8px;gap:8px}.paste-card-upload-button[data-v-a099cfac]{height:32px;min-width:64px;border-radius:8px!important;font-size:12px;letter-spacing:.02em;padding:0 12px}.paste-card-method-group[data-v-a099cfac]{width:128px;height:32px;padding:3px;border-radius:9px}.paste-card-method-group[data-v-a099cfac]:before{border-radius:6px}.paste-card-method-button[data-v-a099cfac]{height:26px;padding:0 10px;font-size:11px;border-radius:6px}}.upload-list-dashboard[data-v-a099cfac]{display:flex;justify-content:space-between;align-items:center;height:var(--upload-list-inner-height);padding:0 15px;box-sizing:border-box;width:100%;min-width:0;position:sticky;top:0;z-index:1;background:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border:1px solid var(--glass-border);border-radius:var(--upload-list-radius);box-shadow:var(--glass-shadow);opacity:.7}[data-v-a099cfac] .el-upload-dragger{position:relative;overflow:hidden}[data-v-a099cfac] .el-upload-dragger:before{background-image:radial-gradient(2px 2px at 10% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 20% 30%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 30% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 40% 30%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 50% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 60% 30%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 70% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 80% 30%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 90% 10%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2px 2px at 15% 70%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0);background-size:200px 200px}[data-v-a099cfac] .el-upload-dragger:after,[data-v-a099cfac] .el-upload-dragger:before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;z-index:0;transition:opacity .6s ease}[data-v-a099cfac] .el-upload-dragger:after{background-image:radial-gradient(3px 3px at 15% 15%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(3px 3px at 50% 50%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(3px 3px at 85% 85%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2.5px 2.5px at 35% 65%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0),radial-gradient(2.5px 2.5px at 65% 35%,var(--upload-card-effect-color,#2563eb) 50%,transparent 0);background-size:150px 150px}.upload-card[data-v-a099cfac]:hover .el-upload-dragger:before{opacity:.3;animation:starScroll-a099cfac 60s linear infinite}.upload-card[data-v-a099cfac]:hover .el-upload-dragger:after{opacity:.6;animation:starScroll-a099cfac 40s linear infinite,starPulse-a099cfac 4s ease-in-out infinite}@keyframes starScroll-a099cfac{0%{background-position:0 0}to{background-position:100px 100px}}@keyframes starPulse-a099cfac{0%,to{opacity:.6}50%{opacity:.3}}.modern-action-group[data-v-a099cfac]{display:flex;align-items:center;gap:5px;height:44px;box-sizing:border-box;padding:5px;background:var(--glass-bg);border-radius:12px;border:1px solid var(--glass-border);box-shadow:var(--glass-shadow)}.modern-action-group[data-v-a099cfac]:hover{background:var(--glass-bg);border-color:var(--glass-border);box-shadow:var(--glass-shadow)}.modern-action-btn[data-v-a099cfac]{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border:none;border-radius:13px;background:var(--upload-action-btn-bg);color:var(--upload-action-btn-color);cursor:pointer;transition:background-color .22s ease,color .22s ease,box-shadow .22s ease,transform .22s ease;font-size:14px;box-shadow:var(--upload-action-btn-shadow);position:relative;overflow:hidden;outline:none!important}.modern-action-btn[data-v-a099cfac]:focus,.modern-action-btn[data-v-a099cfac]:focus-visible{outline:none!important}.modern-action-btn[data-v-a099cfac]:before{content:"";position:absolute;inset:2px;border-radius:11px;background:currentColor;opacity:0;transition:opacity .22s ease}.modern-action-btn[data-v-a099cfac]:hover{background:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-hover-shadow)}.modern-action-btn[data-v-a099cfac]:hover:before{opacity:.08}.modern-action-btn[data-v-a099cfac]:active{transform:translateY(0) scale(.97);box-shadow:var(--upload-action-btn-active-shadow)}.modern-action-btn-copy[data-v-a099cfac]{color:var(--upload-action-copy-color)}.modern-action-btn-retry[data-v-a099cfac]{color:var(--upload-action-retry-color)}.modern-action-btn-danger[data-v-a099cfac]{color:var(--upload-action-danger-color);background:var(--upload-action-danger-bg)}.modern-action-btn-danger[data-v-a099cfac]:hover{background:var(--upload-action-danger-hover-bg);box-shadow:var(--upload-action-danger-hover-shadow)}.modern-dropdown-item-content[data-v-a099cfac]{display:flex;align-items:center;justify-content:space-between;width:100%;gap:12px;padding:4px 0}.modern-dropdown-item-content span[data-v-a099cfac]{font-weight:500;color:var(--el-text-color-primary)}.upload-list-dashboard-title[data-v-a099cfac]{font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px;height:44px;box-sizing:border-box;padding:0 14px;background:var(--dashboard-title-bg,rgba(37,99,235,.06));border:none;border-radius:12px;color:var(--el-text-color-primary)}.upload-list-dashboard-title .el-icon[data-v-a099cfac]{font-size:16px;margin-right:4px;opacity:.85}@media (max-width:768px){.modern-action-group[data-v-a099cfac]{height:34px;gap:2px;padding:2px;border-radius:9px}.modern-action-btn[data-v-a099cfac]{width:28px;height:28px;border-radius:7px;font-size:11px}.upload-list-dashboard-title[data-v-a099cfac]{height:34px;font-size:11px;padding:0 7px;border-radius:9px}.upload-list-dashboard-title .el-icon[data-v-a099cfac]{font-size:13px;margin-right:1px}.upload-list-dashboard[data-v-a099cfac]{padding:0 6px;gap:4px}.upload-list-dashboard-title[data-v-a099cfac]{gap:3px;min-width:0;flex-shrink:1;overflow:hidden}.upload-list-dashboard-action[data-v-a099cfac]{flex-shrink:0}}.logo-link[data-v-17f54292]{text-decoration:none;display:inline-block}.logo[data-v-17f54292]{transition:all .3s ease;border-radius:8px}.logo--fixed[data-v-17f54292]{position:fixed;top:20px;left:20px;z-index:100}.logo--relative[data-v-17f54292]{position:relative}.logo--absolute[data-v-17f54292]{position:absolute;top:5px;left:5px;z-index:100}.logo--static[data-v-17f54292]{position:static}.logo--small[data-v-17f54292]{height:50px;width:50px}.logo--normal[data-v-17f54292]{height:70px;width:70px}.logo--large[data-v-17f54292]{height:90px;width:90px}.logo--hover-enabled[data-v-17f54292]:hover{transform:scale(1.1) rotate(5deg);filter:drop-shadow(0 0 10px var(--logo-glow-color))}@media (max-width:768px){.logo--small[data-v-17f54292]{height:40px;width:40px}.logo--normal[data-v-17f54292]{height:60px;width:60px}.logo--large[data-v-17f54292]{height:75px;width:75px}}.logo[data-v-17f54292]:focus{outline:2px solid var(--el-color-primary);outline-offset:2px}.logo[data-v-17f54292]{filter:var(--logo-filter,none);opacity:var(--logo-opacity,1)}@media (prefers-color-scheme:dark){.logo[data-v-17f54292]{filter:var(--logo-dark-filter,brightness(.9))}}.directory-suggestion-input[data-v-28b8eda7]{width:100%;height:100%;position:relative}.suggestion-dropdown[data-v-28b8eda7]{position:absolute;top:calc(100% + 10px);left:0;width:100%;z-index:9999;border-radius:12px;border:1px solid var(--glass-border);background-color:var(--popper-bg-color);box-shadow:var(--popper-shadow);padding:6px 0;overflow:hidden}.suggestion-list[data-v-28b8eda7]{list-style:none;margin:0;padding:0;max-height:260px;overflow-y:auto}.suggestion-item[data-v-28b8eda7]{padding:8px 16px;font-size:13px;border-radius:6px;margin:2px 6px;cursor:pointer;transition:background-color .2s ease;text-align:left;color:var(--el-text-color-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.suggestion-item[data-v-28b8eda7]:hover{background-color:var(--el-fill-color-light)}#themeToggle[data-v-2122c62a]{border:1px solid var(--glass-border);cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:12px;background-color:var(--glass-bg);box-shadow:none;transition:background-color .25s ease,border-color .25s ease,transform .25s ease}#themeToggle[data-v-2122c62a]:hover{border-color:var(--glass-border-hover)}#themeToggle[data-v-2122c62a]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}@media (max-width:768px){#themeToggle[data-v-2122c62a]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-2122c62a]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-2122c62a]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-2122c62a]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-2122c62a]{transform:rotate(40deg)}.theme_toggle_g[data-v-2122c62a]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-2122c62a],.icon-fade-leave-active[data-v-2122c62a]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-2122c62a]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-2122c62a]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-2122c62a],.icon-fade-leave-from[data-v-2122c62a]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-2122c62a]{display:inline-block}.container[data-v-06705292]{background:var(--bg-color);min-height:100vh}.rotate[data-v-06705292]{animation:spin-06705292 2s ease-in-out}.scale[data-v-06705292]{animation:scale-06705292 .5s ease-in-out}@keyframes spin-06705292{0%{transform:rotate(0deg)}25%{transform:rotate(5deg)}50%{transform:rotate(0deg)}75%{transform:rotate(-3deg)}to{transform:rotate(0deg)}}@keyframes streamer-06705292{0%{background-position:200%}to{background-position:-200%}}@keyframes rotate-shake-06705292{0%{transform:rotate(0deg)}50%{transform:rotate(10deg)}to{transform:rotate(0deg)}}@keyframes shake-06705292{0%{transform:translateX(0)}50%{transform:translateX(-1px)}to{transform:translateX(0)}}@keyframes scale-06705292{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.desktop-only[data-v-06705292]{display:inline-block}.mobile-only[data-v-06705292]{display:none}@media (max-width:768px){.desktop-only[data-v-06705292]{display:none!important}.mobile-only[data-v-06705292]{display:flex!important}}.toggle-dark-button[data-v-06705292]{width:2.5rem;height:2.5rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;border-radius:12px;position:fixed;top:30px;right:80px;padding:0}.more-dropdown[data-v-06705292]{position:fixed;top:30px;right:30px;z-index:100}.more-dropdown .more-button[data-v-06705292]{width:2.5rem;height:2.5rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.more-dropdown .more-button[data-v-06705292]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-method-button[data-v-06705292]{width:2.5rem;height:2.5rem;box-sizing:border-box;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;color:var(--theme-toggle-color);border-radius:12px;position:fixed;top:30px;right:130px;outline:none;padding:0}@media (max-width:768px){.upload-method-button[data-v-06705292]{width:2rem;height:2rem}}.upload-method-icon[data-v-06705292]{outline:none}.more-button .svg-inline--fa[data-v-06705292],.upload-method-button .svg-inline--fa[data-v-06705292]{font-size:1.5em}.directory-tree-trigger .svg-inline--fa[data-v-06705292]{font-size:1.2em}.mobile-more-dropdown[data-v-06705292]{position:fixed;top:30px;right:18px;z-index:100}.mobile-more-button[data-v-06705292]{width:2rem;height:2rem;display:flex;justify-content:center;align-items:center;border:1px solid var(--glass-border);transition:background-color .25s ease,border-color .25s ease,transform .25s ease;background-color:var(--glass-bg);box-shadow:none;color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.mobile-more-button[data-v-06705292]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-folder-container[data-v-06705292]{display:flex;align-items:center;position:fixed;top:30px;right:180px;z-index:100}.upload-folder-container.no-announcement[data-v-06705292]{right:180px}@media (max-width:768px){.upload-folder-container.no-announcement[data-v-06705292],.upload-folder-container[data-v-06705292]{right:58px}}.upload-folder[data-v-06705292]{width:100px;height:2.5rem;border-radius:12px;display:flex;align-items:center;box-sizing:border-box;transition:all .3s ease,width .4s ease}.upload-folder.active[data-v-06705292]{width:200px}@media (max-width:768px){.upload-folder[data-v-06705292]{width:80px;height:2rem}.upload-folder.active[data-v-06705292]{width:120px}}.directory-tree-trigger[data-v-06705292]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;box-sizing:border-box;border:1px solid var(--glass-border);margin-left:10px;background-color:var(--glass-bg);box-shadow:var(--glass-shadow);color:var(--theme-toggle-color);border-radius:12px;outline:none;cursor:pointer;transition:background-color .25s ease,border-color .25s ease,transform .25s ease}.directory-tree-trigger[data-v-06705292]:hover{border-color:var(--glass-border-hover);transform:scale(1.05)}@media (max-width:768px){.directory-tree-trigger[data-v-06705292]{width:2rem;height:2rem}.directory-tree-trigger .svg-inline--fa[data-v-06705292]{font-size:1.1em}}.upload-folder[data-v-06705292] .inner-folder-input{width:100%;height:100%}.upload-folder[data-v-06705292] .el-input{height:100%;box-sizing:border-box}.upload-folder[data-v-06705292] .el-input__wrapper{border-radius:12px;background-color:var(--glass-bg);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);box-shadow:var(--glass-shadow);border:1px solid var(--glass-border);height:100%;padding:0 10px;box-sizing:border-box;transition:background-color .25s ease,border-color .25s ease,box-shadow .25s ease!important}.upload-folder[data-v-06705292] .el-input__wrapper:hover{background-color:color-mix(in srgb,var(--el-fill-color-blank) 85%,transparent);border-color:var(--glass-border-hover)}html.dark .upload-folder[data-v-06705292] .el-input__wrapper:hover{background-color:color-mix(in srgb,var(--el-bg-color) 88%,transparent);border-color:var(--glass-border-hover)}.upload-folder[data-v-06705292] .el-input__wrapper.is-focus,.upload-folder[data-v-06705292] .el-input__wrapper:focus-within{border-color:var(--glass-border);box-shadow:var(--glass-shadow)!important}.quick-toolbar[data-v-06705292]{--quick-toolbar-size:2.5rem;--quick-toolbar-button-size:calc(var(--quick-toolbar-size) - 6px);position:fixed;bottom:50px;right:30px;width:var(--quick-toolbar-size);box-sizing:border-box;display:flex;flex-direction:column;align-items:center;gap:0;z-index:200;padding:3px;border-radius:999px;border:1px solid var(--glass-border);background-color:var(--glass-bg);box-shadow:none;transition:background-color .24s ease,border-color .24s ease}.directory-tree-trigger[data-v-06705292],.mobile-more-button[data-v-06705292],.more-dropdown .more-button[data-v-06705292],.quick-toolbar[data-v-06705292],.toggle-dark-button[data-v-06705292],.upload-method-button[data-v-06705292]{backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)}.quick-toolbar-button[data-v-06705292]{width:var(--quick-toolbar-button-size);height:var(--quick-toolbar-button-size);border:none;transition:transform .22s ease,background-color .22s ease,box-shadow .22s ease,color .22s ease;margin-left:0;padding:0;border-radius:999px;background-color:transparent;box-shadow:none;color:var(--toolbar-button-color);outline:none}.quick-toolbar-actions[data-v-06705292]{display:grid;grid-template-rows:0fr;width:100%;margin-bottom:0;opacity:0;pointer-events:none;transform:translateY(12px);transform-origin:bottom center;transition:grid-template-rows .52s cubic-bezier(.16,1,.3,1),margin-bottom .52s cubic-bezier(.16,1,.3,1),opacity .32s ease,transform .52s cubic-bezier(.16,1,.3,1)}.quick-toolbar.is-expanded .quick-toolbar-actions[data-v-06705292]{grid-template-rows:1fr;margin-bottom:4px;opacity:1;pointer-events:auto;transform:translateY(0)}.quick-toolbar-actions-inner[data-v-06705292]{display:flex;flex-direction:column;align-items:center;gap:3px;min-height:0;overflow:hidden}.quick-toolbar-more.is-active[data-v-06705292]{background-color:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-shadow)}.quick-toolbar-more[data-v-06705292]{margin-top:4px}.quick-toolbar-icon[data-v-06705292]{font-size:16px}.quick-toolbar-toggle-icon[data-v-06705292]{transform:rotate(180deg);transition:transform .32s ease}.quick-toolbar-more.is-active .quick-toolbar-toggle-icon[data-v-06705292]{transform:rotate(0deg)}.info-container[data-v-06705292]:hover,.quick-toolbar-button[data-v-06705292]:hover{transform:scale(1.05);background-color:var(--upload-action-btn-hover-bg);box-shadow:var(--upload-action-btn-hover-shadow)}.quick-toolbar[data-v-06705292]:hover{border-color:var(--glass-border-hover)}.quick-toolbar-button[data-v-06705292]:hover{transform:none}.toggle-dark-button[data-v-06705292]:hover,.upload-method-button[data-v-06705292]:hover{transform:scale(1.05);border-color:var(--glass-border-hover)}.upload-folder[data-v-06705292]:hover .el-input__wrapper{background-color:color-mix(in srgb,var(--el-fill-color-blank) 85%,transparent);border-color:var(--glass-border-hover)}html.dark .upload-folder[data-v-06705292]:hover .el-input__wrapper{background-color:color-mix(in srgb,var(--el-bg-color) 88%,transparent);border-color:var(--glass-border-hover)}@media (max-width:768px){.quick-toolbar[data-v-06705292]{--quick-toolbar-size:2rem;--quick-toolbar-button-size:calc(var(--quick-toolbar-size) - 4px);right:18px;bottom:max(72px,calc(6vh + 20px + env(safe-area-inset-bottom)));padding:2px}.quick-toolbar-actions[data-v-06705292]{margin-bottom:0}.quick-toolbar.is-expanded .quick-toolbar-actions[data-v-06705292]{margin-bottom:3px}.quick-toolbar-actions-inner[data-v-06705292]{gap:2px}.quick-toolbar-more[data-v-06705292]{margin-top:3px}.quick-toolbar-icon[data-v-06705292]{font-size:14px}}[data-v-06705292] .el-dialog{border-radius:12px;border:1px solid var(--glass-border);background-color:var(--dialog-bg-color);box-shadow:var(--dialog-box-shadow)}.dialog-action[data-v-06705292]{display:flex;justify-content:center;margin-top:20px}.header[data-v-06705292]{display:flex;justify-content:center;align-items:center;padding:15px;margin-top:5vh;color:var(--upload-header-color);-webkit-user-select:none;-moz-user-select:none;user-select:none;text-decoration:none;position:relative;top:-3vh;transition:all .3s ease}.title[data-v-06705292]{font-size:2.25rem;font-weight:400;font-family:Pacifico,Noto Sans SC,sans-serif;color:var(--upload-title-text-color);text-shadow:var(--upload-title-text-shadow);position:relative;padding-bottom:8px;cursor:pointer;transition:transform .4s cubic-bezier(.4,0,.2,1),filter .25s ease;animation:float-06705292 4s ease-in-out infinite;letter-spacing:3px}.title[data-v-06705292]:hover{transform:scale(1.08);filter:drop-shadow(0 0 20px var(--upload-title-hover-glow))}.title[data-v-06705292]:after{content:"";position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:0;height:3px;background:var(--upload-title-underline-bg);border-radius:3px;transition:width .5s cubic-bezier(.4,0,.2,1);box-shadow:var(--upload-title-underline-shadow)}.title[data-v-06705292]:hover:after{width:80%}.main-title[data-v-06705292]{color:var(--upload-main-title-color);text-decoration:none;display:inline-block;position:relative;filter:drop-shadow(0 0 8px rgba(255,255,255,.3));transition:opacity .16s ease}.title:hover .main-title[data-v-06705292]{opacity:0}.title[data-v-06705292]:hover{color:transparent;text-shadow:none}.title-crayon-text[data-v-06705292]{position:absolute;left:50%;top:-1px;z-index:2;width:-moz-max-content;width:max-content;pointer-events:none;white-space:nowrap;color:var(--upload-title-crayon-deep,#1d2129);opacity:0;-webkit-text-stroke:.35px var(--upload-title-crayon-edge);text-shadow:-1.2px .4px 0 var(--upload-title-crayon-burr),.9px -.7px 0 hsla(0,0%,100%,.24),1.5px .5px 0 var(--upload-title-crayon-dust),-1.7px -.6px 0 var(--upload-title-crayon-dust);transform:translateX(-50%) rotate(-.8deg);transform-origin:left 68%;clip-path:inset(-10px 100% -10px -10px);filter:saturate(1.08) contrast(1.06)}.title:hover .title-crayon-text[data-v-06705292]{animation:crayonWrite-06705292 .82s steps(18) forwards,crayonScratch-06705292 .16s steps(2) .82s 3}@keyframes float-06705292{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes crayonWrite-06705292{0%{opacity:0;clip-path:inset(-10px 100% -10px -10px)}12%{opacity:.92}32%{clip-path:inset(-10px 68% -10px -10px)}47%{clip-path:inset(-10px 52% -10px -10px)}63%{clip-path:inset(-10px 34% -10px -10px)}78%{clip-path:inset(-10px 18% -10px -10px)}to{opacity:.92;clip-path:inset(-10px -10px -10px -10px)}}@keyframes crayonScratch-06705292{0%,to{transform:translateX(-50%) rotate(-.8deg)}50%{transform:translateX(calc(-50% + 1px)) rotate(-.45deg)}}@media (max-width:768px){.title[data-v-06705292]{font-size:1.55rem;letter-spacing:1px}.title[data-v-06705292]:hover{transform:scale(1.05)}}.upload-home[data-v-06705292]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:94vh;background-color:transparent}.upload[data-v-06705292]{margin-bottom:5px;position:relative;top:-3vh}@media (max-width:768px){.header[data-v-06705292]{padding:8px 15px 4px;top:-2.5vh}.title[data-v-06705292]{padding-bottom:5px}.upload[data-v-06705292]{top:-3.8vh}}.footer[data-v-06705292]{height:6vh} \ No newline at end of file diff --git a/frontend-dist/css/24.03ecf779.css.gz b/frontend-dist/css/24.03ecf779.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..cf97535db05f5b03b992d9a625ea4cde7f7a9345 GIT binary patch literal 11843 zcmV-JF1*nniwFP!000023hjMukMp>Z;9t>Y&_L_P5+vEO-S%w|AfIos*etM{TMQbq zMB7Tsl24NRWeo3cKk!X_rzpFhWcDx!=1E%;i^XEGSXE?Ig~zh%oAxWno4U`+8npje zWPKLA2dg4W_Uk6m5&LJ6GA)W?zBNE&L}a$`<4ZWZqPlQ@zcbs%baxS^FFWmvhx*MbLxK zK0wd?ZC;h<;GFfxO>%Bay@@Lqc7kEh&oj-jqh5v4wbC#F=*CyKbZB`TH z2N+(s?7aN4EAwCnel0=!94=%c7>C(vdG_Du_}@C#7)n?L+v zJCH2fbxn2YffLnsS^jotn@e2~Qe?%ctXa>&?m#I*2^_@RkFu(Q{Fv1TutDS9H|=RV z{Dq%YSr7itbL4Br6J~i|z5{jM6{^Q+^yEbNn00dmS)paBtSHL*ut}oxr?-gCpCX(5 z?b7w-9%Bh<+MTl;1Ut}w08nqUsyx&|*@IKJ$wA$NcDrlZ0#c~y`{uNX&!1k`RAu2| zLV_wFA0YY#6(l-nAvq9!0h|~WNdYCk(_Pkqs;t5GkexSidj1pudB;SBb;{a9S#P54 zzN!15D}M!>WO4pfC!O&BDJ$!sFZ&A6IcHyz=5PkGOW*Ks;G}Kf+SvvlVE0z`f%YX{ zaELX|SqthOqxFHgaTP_kumyS37D3)zY7J>dRxBH23JySQIY^1kH9(H#9N5SzG^;#uMOf>W$E9-Lt7TXdkH?w3;{pcqVIZeIzxFD;LW4k zwBQV~{uu%f_GMMgPGx<{KA+=tbpD*h`_}gnD9%UOOP1>v|FWn|iAdiz_ zZjNP9fZCa}IBppxeBhZGgEBm$yeJE~LzQ(Mk#oLnoP@n5G7^G!Zh?N9=svcDqI}r? zT2N(hb5W%nsL)jL^4Q-R^Yjj|AmYD=S8Q7sT$V6sF*Lkk->3F2Kq2Vnq=p)m85L_*Zan-l)&{&X0Xmqz&3Me zd*k=cG>Wz#$Fc_j(pffj1Lt3n4rsF+9)hYW&t2JVv6ev9m{j5lb)&t7^jSHAXEF+l zG1&4JR%O?ZNMwsX&o*uZM=x#1xQd?*56<28A^ALUr?*O1^A>L&ud=BRiur#$r%-#I zD34K3MtO|aI8@8&8b^PNbXjY*Ey95{f2Zt5{L>xVvVPk{;-CzYTlnPfBDsU^ zlvR~&bs6fpcscE^I?=-$^0J^`+&uu;9o36R zIt_}feM2G`vuLpEYr|Ig8?Z*lvAo9|5PAi4D>%31DQmwt9)yEGTNKp6Kp>kv@}F$x z+*XAiB#! z;W;~iVBa)7BYU*Y@?Dm_xUC2cPY=5M`-i~STweyotIFB~7*_YCgPJ_3K;C0n6`Y!1 z)u-|U3!hm>%g{j9!|fIlTzQWI``k1#__Z)HP9UOD7tl?gA=!`cSGQK9t!hJPlkI!Z z+RwD8c|v##8`)?R3*g_x+hovzOoQaGMeqlFgR%~qOFx1(Qcno-%nBSDRb~AqXx`Ii zfLAY|X>9e~$_ShLHv0P$-)kFa(mV%oQhnkyguY%ULNH~29i-kop0;sHO&|c{h zg+Q}5tC1~AS19)oGW@;-RUwQp-YPrAc%RG&KtF@-3{^0s>CPrJZZ5sp*fZ8 zmL1-A6tZx`f*)vGvU43%Q}l(lEvA*Vv4NbguLa0kbU>lLDr@}esyn82@+GlTTv?N0 zf<9=$;ZkML6uGor({9d9iMkMte5P^Cnfi-VL6c6V^_@dhj2nsa0579CTn|(sjx99A z%ilstA|FO zZyWgbm(iB!VH$bMNOBcBv_tgl_zcLSewCqN3tWQ@Pj7F6Tp4L66WlbDqW8$@t9yrF zSk{gM(XV;aIL3K02#`8_6?6m6JFwR6`J~a5c``Q{rbs$H!w4)a{iDsQsr$C6lpRm$ zPt{I{F0yhO;5ay}?5tE}N8bTb{{^xq2_t(FnHx!_{uBHnZ|Yy}AgKaFQQ^ZEz4-Vj`(tzI2l9>%9G%38 z1IK2+POme}nLB8$-fm?FC;2_vdf-(~Cm@qCw53{q%Jex&i_o|51*5^O$zwDaXR%2{ zap1P~ofylzCsDv3Q&=J|qMAHXxDm6#zaFFNG?i)$M^TMI+WUYf)2WaR;D|b%CA5$H zGE5pp--QVbAm}Xp;<7wmoK`RejU?S;$Vwn4AxlMgSCs|y2L!|4*t<_p$V|r1mT%Es z>W}P8(?&fq5*v1Xb2fH`4$8&v2W8A`q@JrR2gjyDyver}`4rlw{98horSzDd#0^Iz znwP_!1^Cf?Y5%C%?>o?M0whc|=DJ`@Q>Bs9UXW{Tfd2Z5NpCv#G)|GcY~{~|w~E0} z4)@k%8;LMPngikRSHq>;?2yv>QMQ34MRtoT|iWP>!v+r z)wa3x@TqiW#C)F0*(=n5Mmod0iNDoeaSYPv$)D^)bsC=NV>Ji@AD#DspPc%z(->y))`-IZUq*r$;Yqixts*3w>r8X{F)f35;AJt%Q(L@7ik zLMeZ)>NF_ss_nVuB?;U}Da&dPbdic13DQYD($(sxJZMj&s`DV}5v3O|2X%LR4vamZ z-C8ln=jTsPK8kz1D{~SV6|wAfGxyhLIB_lrpyl-t1dbn>SB~Si$O%E}L=ZrHI@x`vAKldpAOg7rS+~ z9Acb0(D!A1fJR4FH3u(*VxmHDvpgX$5rR+x# z5#$mV-KMw4EU|WQ`~6hoD+oix>Uv*l(?k1U} z?TekrcR!hI7_Li-J$mJ^=CDO0kNiL;=>~Aj=Kg#{!FjUj382H1w7 z5fJ#y!5J=tyK%&+R$L+5kkmm6u*t3463|9=Xqyk>B^8lJ*O)EH>x1p2Ap3|5HeYHY z%N;MF-|nUDa2RaCi+PA5(;lLea5zqxGsA@dg(b<$qQ+92#`3M+Xbt=TdBl6rp2|Aw z!8NPP6OIuPo_q7oE9-q(mwL|?&KPFuqU+o83<`c;%2Rd#8#scj4GwSuK;1tt(gGZ2 zd`^+r_mcE!#+_$)k?<>xp5z9R{9t8+paucPVUmKAhyQPMRAcW0$k`lS`Nxo~m<9uN zP5u2FTi-CLlAaBui+h8c4r(EKw)oQ<_}aJG33T3|QbkYvObzTFdC{$Jw6EYvzZczj zXd+uhPgqe1(2m|W#B&9I@QnnL8PFI&=w4!oRHIZj+k`5n!UWtl6eXl)n}PZBI-$yMATA9vmuB#l6U0bbM_?sv}l_%44vpf zyV+Hj_Bla`_`0lzhbHi>Vc`prtxgT(cwSBHm?3qd!}JV+=E~&*g{0_9LRf{QN$M+@ zs@==6nFcP=yDQ{4at(MKR(}_C2j>p!=h9X|+k8yx2pX!!SjzeO{bR67#pv^CDDaW; zBAiGMydoY7hv%X+~`vqonRy zM$qD=?x$oe1sqE^`>3{AfgZ;IW;vYdaISNtYS5z_vx*{j>cjj-2p!5#i}R6gb5+&&VL<4YdEL5ofGi`)M3!vvhhS3^YS7pP z|F4>L%RF&7qI4(f%h5u!<*9iO9~uBLvRqK*r$iX0h@WckDXFDQ!QS677MBoqAul53 z3%ZB#LqB#EnvJI!R7R2D+>#5Z0eA;>-3C1fCyi8Ry0zPqIwG$$3j5F+Xq@#V z*j4NE=S&%X3Jo&dQ@G9fTV@#10saLU0o^csFV+}I_Y!Y{cWd)gyv*i{Oj4(nbTQ1m z&T%vw)?<@BhA(E_*^h%ySWFxb&nyp)Z;GdkCKrBiMrbGha;Z8Xuo;((;X8P3bZm~) z)fnmWB7xSj_C`_ULt9zwdbc ziQ+I{Yl8^{We$@iNFSJV=p{$#0q*JlJNkWOTejs|mN(;Wjk*Gdi{nbzAokQn$p3lgpf?+oz6M`QE*&mui)&@&-{0}yu}>_D zUSH2pyQ~Xs@=RS=uZLWZOQqv(cl} zbFo;ck>YULPS4_)7&2sY*7E|(+&7=#BC-#drg(ppeb)YWcTH%|=jol;!LU<2Fg%~D zup#KSsJ*1xCeEtuqlgpYSnT0BU;RhWJ2jZw)y|jnb_-8U0oocn09gXtZ*$C2Ynh!4 zb2(=PwL(xb4H-ze473v_T%h6>YO-G2#}@jUFmRhf0-w#|=tWe^ z`7>D`Fz4%%B~{t1sJmWqx=%T_z$@W+DH(4L(UWrDwi#q<~Ls~kDIazLMF&&rr89g?Phch|IxA@{R zhH}+q+on@@Y})cym@mA-Q)>H`-s(XCT*8;Q`bnAh7npt=Ue!iO$*I1TFZ`|b^(ICo zs5A!&l@OD|MtZ^((EFZ`ed ztp#edzgZ@~!$=lCr=GY+qxaqUq%;ro;DM7%!c6xb%=d%FCxRxDP_AhY7?g_j6yDbYGi8TO(1?tu(4XI3^O~ibSoXIHgp*9~Lh~)+N3FEK5fhl>duw1hv5K z%JSr>+4w~9IcTv&$G<(cjhVu>oJl{jnduzTUH?@9l0)YCw>U^Ue!NhL{co=;Bj}VLSb~3iXyirArZR*la!9_u zqR45bmYGS^Oz$0@hj!zkic)3rn`XrH>N6-$4NCf+tNPt80 zM}fJ<(CMM@Qk!13aR_&_0n4kV1K0cO9pEd0!`+S4cy^SM)HoxjM;bS(Ek~2%09{HM za3={)FawQlFKb;Enn^0ZBIg-8qa=+@tf%-Q$Fz3e21nr0 z3y&gWZrR@nIXVRXp2FbF~f#?umuh4_V7Vhy+6bm-rQft3(u{#S_W zz-!|OvIXhLwSt^CP!DmH&TZhZy=a&6AR?K-qK`;95avSG>fro#f{!Ne*i6u{hS_s7 z;e{=JX_C(@(&Xw`{@4)gJ2HuuycTF)`8#3`xwMEQbaY>ezG*iP3Q&RGNlUS9u_knp zu8;7wcJEvciMInpkD776f)lwxWw3>UT}DWrL6yJH6=Jzr>h1}d;Dys$NInZOUgM(_ zc-n7ps6+;DoB{Mb)a2#$5#(>P2VtOGBN!AHd;KV8f+D8dMO*+*-wtqyxN$$2*r`D& z)T#x}1Tt(-kJ1Vk?XI)360%q}yT5@PhJ5xLQl8ghWjggE(A|86i&}bHF1;cVY&gNb zK4ng@q=h7r9Y*RsqL3V4u8s5v=3aRMr^y=Mf@$-8rkT78~|q;6I}tgsAuBojgauIw%lSePJ`E zC^V3R%lr{Uh_+z#DNKijr^CUD)PNqGVoGHkiD*s%*484n=m)BaOcN0Y(K7-J}@EnE=VFx!#R;kPCw;{ki+ zNxH@$0MYA6s3pxY`dd)Cd4#-@PulejYBd2q@QIf4l2T-?a*-_NTJ&iTKZ{qVYEDCn zG|dQ8Ts2HM&U6}hNQH$7b|={aK1&V=Vu4Zksb``!6q`=0a8OTA2 z{NaD0pMU(r7DmIBSrxoz)dg%|SoN07UANh1RVSoiz@YvWN$4PpUS9Hjmcw9Zu@?je zMny}H=S%crxK9q*nBF3%&|oP{N&@H*rA0c@_v2Q4v%7R(Lu%3${~GBQR0~vI;2f3Y zHFr@*Z49sFBrsEp_>%8fZO>s1+pF)m=Dzo{XY5?=7G>?n*LV2GG*Bkx-=K~LF*#(! zf~_4=@5xFtSBpTSsk>3aGEnWiLv~hPXh$Vy)Pf(WOhuBAr|%!4n_q(tzb)zU+TNGG z&|r(`3P`CF?EhABUuwM)1c{-(uoSk5Uz1Qx4o_}V#l&Y(<<`7i+Brr>1bp-Qx@(HB zt99iC^)wmIUBpKA{06!e;&%hNNsQAabEZgkkPu5B8C_&OT_DY z*_FErh=2|ii4B8URmTS?73C>;q44ydvEgh`-J~b7>%* zRKOXvlJy3Az#z){;Kb9y@VFd8n&?*~j;$SN#HT5P+&D1j^h!wH;2`K|@bzFJgbk`h z6|}JwQ7mK;XzDU&>6i9xb0Q0kSMYr?)x4CV$(y4m>gopjJ#@z6)ZjlQ>2eNszPGf0 zeJl@0e61h1!?xh5{CqBJuWJuG=Z;p<(+t|0zV9h%rMx&%AFclZm?iNf;w1|O?PR5n zq`$N^6J)2Xds8xP!T#Y@ecvNY2M?2G#;>;D0))pXfCZKylY`A?({80l;4`l-1)t(j zYoo$6Fj68-t)igw^W)PRbz$@Vg_V$e3GVBclerWx%6T2_d{Fmmb=w_dgV&?QcQ`qhRs7Ci1%` z^1CKt)rOT_%SE0p-!QZZ;_Vt+ALzqfdr zNj`z;ZckZ%v*e(YEcrxd$tSjrMx4{p{B-K9d5$z6qUWC+XGu*i<~RjQ;}ncK9UL)3 zz715AvaIhwa5aXYE3c&zAk0eU%1!oRA#p(8>Z?`Ai-MEFYWPu@m|aMOC0l@WMlKs9 z{aY9Sr&SDh3zz3l5BVW%C1t~siG( zy{E?e0UZdj7^3;tLK9GVI-@?^$X`h77Ah z{gQCWY&F>?#gasp^x8;HNr|tc1vm-9N)Yxzmc!Bc+6o@7`$ZfHOdFFKs3R1@9!1BksCA@;PrK21gmZMfV8ub?Ojfjh0Ru0w42 z|LdZnW3HJ44qty7K*bAbR+MKKc}&M=ns$~4T}XUtV~nZN|n z4$tQl9@j@Lr%n#uJQSJ<*<)af_v63-OM5!^Np3^Aqj=4AlscPi{Enkfp#(+YbaU3h z@xrAjXXVr7Y~C)LCUfm_o3vC9msGBvVkPnF09)|Og}Zi;7_mgdeUEdxIo&cFchoywhock(cmIvu>opIM+M(UUj-VbJG46!*ms#XbF@xG#Sw?yDb)`}&9C z{_;a{kJBe~JbpiPT_s<1Gy*MRCn10O z_t$I@5NaL|iMhF&j9k^%K5PGijyu?0jAdl5uRgJBsWRenr00d&^9+86YXGv(4Al$y z+O#Tk7?H_QcUa(&7s04Z-79o4(?kE>WauJJQeDDuDHbN2v$}+&_K`ugA1g`-Etr(4 z{fot@zae$;&GDA#cSN(fjn-6VO~KA|yhm=6pK~5Kzy`Z=6L7# zRmvQjFX4N6#-NX*Xg+Ff&CC16y67(A{5iv2iy>hEuI+9^2c;9S2ggAF{e(MQqAM&w z*+Hx^C33P4cvZtiyI4=sF6e27JpU4=!R|1VFU>?tc7;^8T|$ySNT4A)#!4x6%ZcRr zh9hD@2&v^Pz)7d$)dTtDG|{_i9n=;QD9%k+vewn9l-#Wo8H&eU^4l^NSdAB1y=!9T z^2C_&*Bk)~g-J=x*@>ek)o%rtE>8P#Y|Hv>6Wg;TF!*A5U2d=(u;_LRtLD%IRaw8$ zPvg}-T_i8bFSy250rCbXh{a1rUxNWc(Eu>U=}5;I1dU){eu6@UGblUgy)LkpQTU{&n(br!dUV-4C7P3=8L7#3wexWxa^Cu)rz%R zajmMXJpf~)7uM*7YlJsPP@|HVN@FE27FL$xF!nu?OAcqOBZmd(-~jKm&*n# zMctu95?GJ0osGJXZo$U0a3|f8wOTrpZj~~6r|4iwyEMe=BB&0Ulw4M>GDPZ-H2XbK z^G%D6ke8z*elmm0mmQCA@5!TC%;!5*|7J-yG5-~=`>Ad^tsrCazp?R$r$X$`vW zIehW`+bzW5E=~ItbeF>cbZFZ_Wl<^YWW8I1B3l^~y=c}k2a9S+DmeXO=5K#MUL4Az zY7$buyu7^J@5j&wJf0hv_JxabR5Vud#bD&J(|xt%fj|nlHK=4T)P&=U!NKJ=9INv8 zqk=DV5kTmLuQJaOn?Gq^ihKH8cNWXn-G)CW`5fr=Y$*wxL(;kjDyfXo;EsA)KlO0M z{abT5FeM?0lO$gz*)LZoHZ$abyvyg5glP*-gVu+C>G*#%smr7r%p*xwc%KnXq+%tU zx#FcRf@x$9e$-*Pd9Sl0L}rSgrxu)Uw-B{@?NPH=oWVO*oAdXuK2bqM&fz`Fzm!L< z{6yPRV(p36Zsedq^`IiNg5U)h9utgGKi&Jm+6TuaN|ngvdKSP^kzul$#bKI?Zcw3n z+Be+QToDk`^+q_2uF%wu`QV3>>5MW8z!a+DpJ1~8CwWQmk)6J1_ zK7tO61y}o!T#cNH7_J8mF?ba_J0Yq7F_Id9D!uF@iIskts!Mu>o1|cMGAMdO zN=bJYEmu*BG%UsA!BhqQK3){PA8#Q>Lj}T}hMmiLc;O||oTBkqo5K%SdznZ1qbt56 zcqFE*4NR;g)x5&Vr&DvQm9AAVNALQ^)Ji;BYe9Abt$?HMY%YPRVGZYY0eZ=U#r?tE z?hUvMUpvM)nlcbeSHcZ!sW0vwig6LU6I%-X2`nJ?N7sYY6|)J&PKM8KVF9|gzBva? zU45wxs9!awW(P~+*_({y`g7}7J-l(~8R}eIqgzP!6l5WZ*BM!3tL8Nte(s+2#Yvg` zZar(r}N`Uj!D@Wz6|B#ze~QYv?(wn;@&}=2GY2#GTPIOgM<+l43IWnL9~H&Eqv6 ze1cn<)~ZS5J!y>S%c2b3`b?-py1^Q1b{zaGvw2Bh4uPMY8hPbIx6@_<$rfto5DGy z7;HEyV5ct@T{?M9Y^?i?n2w}Of&aS7s3>+q$|c~WH*nc~{~m}BZc=Z(z7OH)Xu=S6 za!+{r5XGE$kKIS-x#a&|%KR*6r^i&c>wrJ*;mj{pc?>z%u=q1Bq;+8pcF$!i={3){$ zeww*>IcJVW`Hwqo4Rwrd+U#|V$t?w64Dhym$6rDF&Ar>ku$2)oIlj0n8{rY0>(BAgf{ee>gg7qGPt<) zOGU%m>~n#)T_Wu?oNbtW7;k~%Uz0SQ(f`7^?`tFdjP0Npi@77>gs>ZumQcGPd`uqmPjpTKHO9j%p$N_e0O#3H zagoHy3tz{0C?|l1+_%je*o5;`zc2|bP#l0L?t(ak(J&zj1Glu?UE0>4g)iq%F9=uY z<6~E4&(SP;nn7>LEKC+Yyy*_1r6bUaOV|6eAV!daaOv{7MFb32yu&rKBzb=eoKJ7L ze%j_$c@EB5f7~FA?m37_PMjwX{~6%;EW-JmKQCJ2dQxrH_3-D?ml)cC(U=s+pZ$9a zxq)4DUMKL%FgSP5@!I$HP5Y6xMK{AA|0Qp;K0k7w!10lQ-N>u0_ xMevd^g@G7`8Itr-E^)HP6^76Y*YC&ME!;OvuS0|eEx#Xc{|~H0#3(2y0RVCT4PXEO literal 0 HcmV?d00001 diff --git a/frontend-dist/css/36.5ae2c698.css.gz b/frontend-dist/css/36.5ae2c698.css.gz deleted file mode 100644 index 1a13754cd3bdee0248cc61db36c80805943b1452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11835 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.el-popper__arrow:before{background:none!important;border:none!important}*,body,html{scrollbar-width:none!important;-ms-overflow-style:none!important}::-webkit-scrollbar,body::-webkit-scrollbar,html::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.os-theme-dark{--os-handle-bg:hsla(0,0%,50%,.5);--os-handle-bg-hover:hsla(0,0%,50%,.7);--os-handle-bg-active:hsla(0,0%,50%,.85)}.dark .os-theme-dark,html.dark .os-theme-dark{--os-handle-bg:hsla(0,0%,71%,.6);--os-handle-bg-hover:hsla(0,0%,71%,.75);--os-handle-bg-active:hsla(0,0%,71%,.9)}.os-theme-dark .os-scrollbar,.os-theme-dark .os-scrollbar-horizontal,.os-theme-dark .os-scrollbar-vertical{--os-size:10px;--os-padding-perpendicular:2px;--os-padding-axis:2px;--os-track-bg:transparent;--os-track-bg-hover:transparent;--os-track-bg-active:transparent}.os-theme-dark .os-scrollbar .os-scrollbar-handle{border-radius:10px!important;transition:background-color .2s ease,opacity .2s ease!important}.el-card,.el-dropdown__popper.el-popper{background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)} \ No newline at end of file diff --git a/frontend-dist/css/app.0aed682c.css.gz b/frontend-dist/css/app.0aed682c.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..075e0a6261ef47f508692de83eb6fe0221eda40a GIT binary patch literal 3790 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 E0L6SR{{R30 literal 0 HcmV?d00001 diff --git a/frontend-dist/css/app.fcec83ce.css b/frontend-dist/css/app.fcec83ce.css deleted file mode 100644 index 5c0d4048..00000000 --- a/frontend-dist/css/app.fcec83ce.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:Pacifico;src:url(/fonts/Pacifico-Regular.dc63ac94.woff2) format("woff2");font-display:swap}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--el-text-color-primary)}body{margin:0;padding:0;background-color:var(--bg-color)}:focus-visible{outline:none}*{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}:root{--bg-color:#f5f5f7;--primary-color:#2563eb;--primary-color-accent:#1d4ed8;--popper-bg-color:#fff;--popper-shadow:none;--image-preview-filter:none;--text-bg-color:#f2f3f5;--background-image-filter:none;--upload-list-file-icon-color:#2563eb;--el-upload-dragger-bg-color:#fafafb;--el-upload-dragger-border:2px dashed #c9cdd4;--el-upload-dragger-hover-box-shadow:none;--el-upload-dragger-uniform-color:#2563eb;--el-icon--upload-color:#2563eb;--upload-text-color:#4e5969;--upload-header-color:#1d2129;--upload-main-title-color:#1d2129;--upload-title-text-color:#4e5969;--upload-title-text-shadow:none;--upload-title-hover-glow:transparent;--upload-title-underline-bg:#2563eb;--upload-title-underline-shadow:none;--upload-title-crayon-deep:#1d2129;--upload-title-crayon-edge:#c9cdd4;--upload-title-crayon-burr:transparent;--upload-title-crayon-dust:transparent;--modern-action-group-bg:#f7f8fa;--modern-action-group-border:#e5e6eb;--logo-glow-color:transparent;--modern-action-group-hover-bg:#f2f3f5;--upload-action-btn-bg:transparent;--upload-action-btn-color:#4e5969;--upload-action-btn-shadow:none;--upload-action-btn-hover-bg:#f2f3f5;--upload-action-btn-hover-shadow:none;--upload-action-btn-active-shadow:none;--upload-action-copy-color:var(--primary-color);--upload-action-retry-color:#16a34a;--upload-action-danger-color:#dc2626;--upload-action-danger-bg:transparent;--upload-action-danger-hover-bg:#fef2f2;--upload-action-danger-hover-shadow:none;--file-name-bg:#f7f8fa;--file-name-border:#e5e6eb;--file-name-hover-bg:#f2f3f5;--file-name-hover-border:#c9cdd4;--upload-list-item-border-color:#e5e6eb;--upload-list-item-hover-border:#c9cdd4;--dashboard-title-bg:transparent;--toolbar-button-bg-color:#fff;--toolbar-button-shadow:none;--toolbar-button-shadow-hover:none;--toolbar-button-color:#4e5969;--page-footer-text-color:#59636e;--page-footer-name-color:#1d2129;--password-input-bg-color:#fff;--login-title-color:#1d2129;--login-container-box-shadow:none;--login-container-hover-box-shadow:none;--login-title-glow-color:transparent;--login-input-underline-color:var(--primary-color);--login-input-label-focus-color:var(--primary-color);--dialog-bg-color:#fff;--dialog-surface-bg-color:hsla(0,0%,100%,.88);--dialog-backdrop-blur:12px;--dialog-box-shadow:none;--dialog-section-bg-color:#f2f3f5;--dialog-control-bg-color:#f7f8fa;--mobile-action-sheet-bg:hsla(0,0%,100%,.95);--mobile-action-sheet-border:rgba(0,0,0,.05);--mobile-action-sheet-item-bg:rgba(0,0,0,.04);--mobile-action-sheet-item-active-bg:rgba(0,0,0,.08);--tabs-dropdown-popper-bg-color:#fff;--tabs-dropdown-popper-shadow:none;--tabs-switcher-hover-bg:#f2f3f5;--tabs-switcher-border-color:#e5e6eb;--tabs-switcher-accent-color:var(--primary-color);--tabs-switcher-current-color:var(--primary-color);--tabs-switcher-current-bg:var(--el-color-primary-light-9);--tabs-switcher-current-border-color:var(--primary-color);--admin-container-bg-color:#f5f5f7;--admin-container-color:#1d2129;--admin-dashborad-stats-bg-color:#fff;--admin-dashboard-btn-color:#4e5969;--admin-dashboard-btn-bg-color:#fff;--admin-dashboard-btn-shadow:none;--admin-dashboard-btn-hover-shadow:none;--admin-dashboard-imgcard-bg-color:#fff;--admin-dashboard-imgcard-shadow:none;--admin-dashboard-tag-suggestion-bg-color:#fff;--admin-dashboard-tag-suggestion-border-color:#e5e6eb;--admin-dashboard-tag-suggestion-box-shadow:none;--admin-dashboard-tag-suggestion-item-hover-bg-color:#f7f8fa;--skeleton-bg-color:#e5e6eb;--skeleton-shimmer-color:#f7f8fa;--admin-batch-toolbar-bg:var(--glass-bg);--admin-batch-toolbar-border:var(--glass-border);--admin-batch-toolbar-shadow:var(--glass-shadow);--admin-batch-action-bg:transparent;--admin-batch-action-shadow:none;--admin-batch-action-hover-bg:color-mix(in srgb,var(--primary-color) 10%,transparent);--admin-batch-action-hover-shadow:none;--admin-batch-action-color:var(--el-text-color-regular);--admin-batch-delete-color:var(--el-color-danger);--admin-batch-clear-color:var(--el-text-color-secondary);--theme-toggle-color:#1d2129;--theme-toggle-bg-color:#1d2129;--admin-theme-toggle-color:#1d2129;--admin-theme-toggle-bg-color:#1d2129;--not-found-title-text-color:#1d2129;--floating-btn-color:#fff;--floating-btn-shadow:none;--floating-btn-shadow-hover:none;--floating-btn-right:32px;--floating-btn-bottom:32px;--glass-bg:hsla(0,0%,100%,.45);--glass-border:#d9dce2;--glass-border-hover:#bfc4cc;--glass-shadow:none;--glass-header-bg:rgba(247,248,250,.45);--glass-header-border:#d9dce2;--el-text-color-primary:#1d2129;--el-text-color-regular:#4e5969;--el-text-color-secondary:#59636e;--el-text-color-placeholder:#86909c;--el-text-color-disabled:#c0c4cc;--el-color-primary:var(--primary-color);--el-color-primary-rgb:37,99,235;--el-color-primary-light-3:#60a5fa;--el-color-primary-light-5:#93c5fd;--el-color-primary-light-7:#bfdbfe;--el-color-primary-light-8:#dbeafe;--el-color-primary-light-9:#eff6ff;--el-color-primary-dark-2:var(--primary-color-accent);--el-border-color:#c9cdd4;--el-border-color-light:#d9dce2;--el-border-color-lighter:#e5e6eb;--el-border-color-extra-light:#eceef1;--el-border-radius-base:8px;--el-border-radius-small:6px;--el-fill-color:#f2f3f5;--el-fill-color-light:#f7f8fa;--el-fill-color-lighter:#fafafb;--el-fill-color-blank:#fff;--el-bg-color-page:#f5f5f7;--text-color:#1d2129;--text-color-secondary:#59636e;--login-input-icon-color:#86909c;--icon-color:#59636e;--placeholder-color:#86909c}.dark{--bg-color:#0f0f0f;--primary-color:#4a5d9b;--primary-color-accent:#6f82c2;--popper-bg-color:#161618;--popper-shadow:none;--image-preview-filter:brightness(0.7);--text-bg-color:#1f1f22;--background-image-filter:brightness(0.7);--upload-list-file-icon-color:#60a5fa;--el-upload-dragger-bg-color:#131316;--el-upload-dragger-border:2px dashed #3a3a3f;--el-upload-dragger-hover-box-shadow:none;--el-upload-dragger-uniform-color:#60a5fa;--el-icon--upload-color:#60a5fa;--upload-text-color:#a1a1aa;--upload-header-color:#fafafa;--upload-main-title-color:#fafafa;--upload-title-text-color:#a1a1aa;--upload-title-text-shadow:none;--upload-title-hover-glow:transparent;--upload-title-underline-bg:#60a5fa;--upload-title-underline-shadow:none;--upload-title-crayon-deep:#fafafa;--upload-title-crayon-edge:#3a3a3f;--upload-title-crayon-burr:transparent;--upload-title-crayon-dust:transparent;--toolbar-button-bg-color:#161618;--toolbar-button-shadow:none;--toolbar-button-shadow-hover:none;--toolbar-button-color:#a1a1aa;--modern-action-group-bg:#131316;--modern-action-group-border:#2a2a2e;--logo-glow-color:transparent;--modern-action-group-hover-bg:#1f1f22;--upload-action-btn-bg:transparent;--upload-action-btn-color:#a1a1aa;--upload-action-btn-shadow:none;--upload-action-btn-hover-bg:#1f1f22;--upload-action-btn-hover-shadow:none;--upload-action-btn-active-shadow:none;--upload-action-copy-color:var(--primary-color-accent);--upload-action-retry-color:#4ade80;--upload-action-danger-color:#f87171;--upload-action-danger-bg:transparent;--upload-action-danger-hover-bg:hsla(0,91%,71%,.12);--upload-action-danger-hover-shadow:none;--file-name-bg:#1f1f22;--file-name-border:#2a2a2e;--file-name-hover-bg:#26262a;--file-name-hover-border:#3a3a3f;--upload-list-item-border-color:#2a2a2e;--upload-list-item-hover-border:#3a3a3f;--dashboard-title-bg:transparent;--page-footer-text-color:#71717a;--page-footer-name-color:#a1a1aa;--password-input-bg-color:#131316;--login-title-color:#fafafa;--login-container-box-shadow:none;--login-container-hover-box-shadow:none;--login-title-glow-color:transparent;--login-input-underline-color:var(--primary-color-accent);--login-input-label-focus-color:var(--primary-color-accent);--dialog-bg-color:#161618;--dialog-surface-bg-color:rgba(30,30,30,.5);--dialog-backdrop-blur:20px;--dialog-box-shadow:none;--dialog-section-bg-color:#1f1f22;--dialog-control-bg-color:#161618;--mobile-action-sheet-bg:rgba(40,44,52,.95);--mobile-action-sheet-border:hsla(0,0%,100%,.1);--mobile-action-sheet-item-bg:hsla(0,0%,100%,.08);--mobile-action-sheet-item-active-bg:hsla(0,0%,100%,.15);--tabs-dropdown-popper-bg-color:#161618;--tabs-dropdown-popper-shadow:none;--tabs-switcher-hover-bg:#1f1f22;--tabs-switcher-border-color:#2a2a2e;--tabs-switcher-accent-color:var(--primary-color-accent);--tabs-switcher-current-color:var(--primary-color-accent);--tabs-switcher-current-bg:color-mix(in srgb,var(--primary-color) 22%,transparent);--tabs-switcher-current-border-color:var(--primary-color);--admin-container-bg-color:#0f0f0f;--admin-container-color:#fafafa;--admin-dashborad-stats-bg-color:#161618;--admin-dashboard-btn-color:#a1a1aa;--admin-dashboard-btn-bg-color:#161618;--admin-dashboard-btn-shadow:none;--admin-dashboard-btn-hover-shadow:none;--admin-dashboard-imgcard-bg-color:#161618;--admin-dashboard-imgcard-shadow:none;--admin-dashboard-tag-suggestion-bg-color:#161618;--admin-dashboard-tag-suggestion-border-color:#2a2a2e;--admin-dashboard-tag-suggestion-box-shadow:none;--admin-dashboard-tag-suggestion-item-hover-bg-color:#1f1f22;--skeleton-bg-color:#1f1f22;--skeleton-shimmer-color:#26262a;--theme-toggle-color:#d4d4d8;--theme-toggle-bg-color:#e4e4e7;--admin-theme-toggle-color:#d4d4d8;--admin-theme-toggle-bg-color:#e4e4e7;--admin-batch-toolbar-bg:var(--glass-bg);--admin-batch-toolbar-border:var(--glass-border);--admin-batch-toolbar-shadow:var(--glass-shadow);--admin-batch-action-bg:transparent;--admin-batch-action-shadow:none;--admin-batch-action-hover-bg:color-mix(in srgb,var(--primary-color) 18%,transparent);--admin-batch-action-hover-shadow:none;--admin-batch-action-color:var(--el-text-color-regular);--admin-batch-delete-color:var(--el-color-danger);--admin-batch-clear-color:var(--el-text-color-secondary);--not-found-title-text-color:#fafafa;--floating-btn-color:#fff;--floating-btn-shadow:none;--floating-btn-shadow-hover:none;--glass-bg:rgba(30,30,30,.5);--glass-border:#34343a;--glass-border-hover:#4a4a52;--glass-shadow:none;--glass-header-bg:rgba(31,31,34,.5);--glass-header-border:#34343a;--text-color:#fafafa;--text-color-secondary:#a1a1aa;--login-input-icon-color:#71717a;--icon-color:#a1a1aa;--placeholder-color:#6b6b73}html.dark{--el-color-primary:var(--primary-color);--el-color-primary-rgb:74,93,155;--el-color-primary-light-3:#53649c;--el-color-primary-light-5:#3f4a72;--el-color-primary-light-7:#303852;--el-color-primary-light-8:#252b3d;--el-color-primary-light-9:#1c2030;--el-color-primary-dark-2:var(--primary-color-accent);--el-text-color-primary:#fafafa;--el-text-color-regular:#d4d4d8;--el-text-color-secondary:#a1a1aa;--el-text-color-placeholder:#71717a;--el-text-color-disabled:#52525b;--el-border-color:#3a3a3f;--el-border-color-light:#34343a;--el-border-color-lighter:#2a2a2e;--el-border-color-extra-light:#242428;--el-fill-color:#26262a;--el-fill-color-light:#1f1f22;--el-fill-color-lighter:#18181b;--el-fill-color-blank:#161618;--el-bg-color-page:#0f0f0f;--el-bg-color:#161618;--el-bg-color-overlay:#1f1f22}.el-message{border-radius:10px!important;border:1px solid var(--glass-border)!important;padding:10px 20px!important;box-shadow:var(--glass-shadow)!important;background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);min-width:unset!important;top:30px!important}.el-message .el-message__icon{font-size:18px!important;color:var(--el-text-color-primary)!important}.el-message .el-message__content{font-size:16px!important;font-weight:500!important;color:var(--el-text-color-primary)!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.5px}.el-message--success .el-message__icon{color:#67c23a!important}.el-message--warning .el-message__icon{color:#e6a23c!important}.el-message--error .el-message__icon{color:#f56c6c!important}@media (max-width:768px){.el-message{padding:8px 18px!important;border-radius:10px!important}.el-message .el-message__icon{font-size:14px!important}.el-message .el-message__content{font-size:13px!important}}.el-dialog,.el-message-box{border-radius:12px!important;overflow:hidden;box-shadow:var(--glass-shadow)!important;border:1px solid var(--glass-border);background-color:var(--dialog-surface-bg-color)!important;backdrop-filter:blur(var(--dialog-backdrop-blur)) saturate(1.2);-webkit-backdrop-filter:blur(var(--dialog-backdrop-blur)) saturate(1.2)}.el-dialog__header,.el-message-box__header{border-bottom:none;padding:16px 20px!important;margin-right:0!important;position:relative}.el-dialog__header:after,.el-message-box__header:after{content:"";position:absolute;bottom:0;left:20px;right:20px;height:1px;background:var(--el-border-color-lighter)}.el-dialog__body,.el-message-box__content{padding:20px!important}.el-dialog__footer,.el-message-box__btns{border-top:none;padding:12px 20px!important;background-color:transparent}.dark .el-dialog__header:after,.dark .el-message-box__header:after{background:var(--el-border-color-lighter)}html.dark .el-button--primary.is-plain{--el-button-text-color:var(--el-text-color-primary);--el-button-bg-color:color-mix(in srgb,var(--el-text-color-primary) 4%,transparent);--el-button-border-color:color-mix(in srgb,var(--primary-color-accent) 65%,transparent);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);color:var(--el-text-color-primary)!important;background-color:color-mix(in srgb,var(--el-text-color-primary) 4%,transparent)!important;border-color:color-mix(in srgb,var(--primary-color-accent) 65%,transparent)!important}html.dark .el-button--primary.is-plain:focus,html.dark .el-button--primary.is-plain:hover{color:var(--el-color-white)!important;background-color:var(--el-color-primary)!important;border-color:var(--el-color-primary-light-3)!important}.dark .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.dark .el-pager li{color:var(--el-text-color-secondary)}.dark .el-pagination .btn-next,.dark .el-pagination .btn-prev,.dark .el-pagination button{background-color:transparent;color:var(--el-text-color-secondary)}.dark .el-input__wrapper.is-focus,.dark .el-select__wrapper.is-focused,.dark .el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-color-primary-light-5) inset!important}html.dark .el-cascader__dropdown__item.hover,html.dark .el-select-dropdown__item.is-hovering{background-color:color-mix(in srgb,var(--el-text-color-primary) 8%,transparent)!important;color:var(--el-text-color-primary)!important}html.dark .el-cascader__dropdown__item.is-active,html.dark .el-select-dropdown__item.is-selected{background-color:color-mix(in srgb,var(--primary-color) 38%,transparent)!important;color:var(--el-color-white)!important}.dark .el-switch.is-checked .el-switch__core{background-color:var(--el-color-primary)!important;border-color:var(--el-color-primary)!important}.dark .el-tabs__item.is-active{color:var(--el-text-color-primary)}.el-checkbox__inner{box-sizing:border-box;width:var(--el-checkbox-input-width,14px);height:var(--el-checkbox-input-height,var(--el-checkbox-input-width,14px));aspect-ratio:1/1;border-radius:50%!important}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:calc(50% - .5px)!important;transform:translateY(-50%) scale(.5)}.dark .el-checkbox__input.is-checked+.el-checkbox__label,.dark .el-radio__input.is-checked+.el-radio__label{color:var(--el-text-color-primary)!important}.el-loading-mask{border-radius:12px}.el-dropdown__popper.el-popper{border-radius:8px;border:1px solid var(--glass-border);background-color:var(--popper-bg-color);box-shadow:var(--popper-shadow)}html.dark .el-dropdown__popper.el-popper{border-color:var(--glass-border)}.el-dropdown__popper.el-popper .el-dropdown-menu{padding:4px;border-radius:7px;background:transparent;border:none}.el-dropdown__popper.el-popper .el-dropdown-menu__item{min-height:34px;padding:0 12px;border-radius:6px;border:none;background:transparent;color:var(--el-text-color-regular);transition:background-color .2s ease,color .2s ease}.el-dropdown__popper.el-popper .el-dropdown-menu__item:not(.is-disabled):focus,.el-dropdown__popper.el-popper .el-dropdown-menu__item:not(.is-disabled):hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 4%,transparent);color:var(--el-text-color-primary)}html.dark .el-dropdown__popper.el-popper .el-dropdown-menu__item:not(.is-disabled):focus,html.dark .el-dropdown__popper.el-popper .el-dropdown-menu__item:not(.is-disabled):hover{background-color:color-mix(in srgb,var(--el-text-color-primary) 8%,transparent);color:var(--el-text-color-primary)}.el-popper.is-light>.el-popper__arrow:before{background:none!important;border:none!important}*,body,html{scrollbar-width:none!important;-ms-overflow-style:none!important}::-webkit-scrollbar,body::-webkit-scrollbar,html::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;background:transparent!important}.os-theme-dark{--os-handle-bg:hsla(0,0%,50%,.5);--os-handle-bg-hover:hsla(0,0%,50%,.7);--os-handle-bg-active:hsla(0,0%,50%,.85)}.dark .os-theme-dark,html.dark .os-theme-dark{--os-handle-bg:hsla(0,0%,71%,.6);--os-handle-bg-hover:hsla(0,0%,71%,.75);--os-handle-bg-active:hsla(0,0%,71%,.9)}.os-theme-dark .os-scrollbar,.os-theme-dark .os-scrollbar-horizontal,.os-theme-dark .os-scrollbar-vertical{--os-size:10px;--os-padding-perpendicular:2px;--os-padding-axis:2px;--os-track-bg:transparent;--os-track-bg-hover:transparent;--os-track-bg-active:transparent}.os-theme-dark .os-scrollbar .os-scrollbar-handle{border-radius:10px!important;transition:background-color .2s ease,opacity .2s ease!important}.el-card,.el-dropdown__popper.el-popper{background-color:var(--glass-bg)!important;backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4)} \ No newline at end of file diff --git a/frontend-dist/css/app.fcec83ce.css.gz b/frontend-dist/css/app.fcec83ce.css.gz deleted file mode 100644 index 9ad9d9dc1a29b5095e6ec31a2bbcd38cac7a8437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3673 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 diff --git a/frontend-dist/index.html b/frontend-dist/index.html index c696aef7..539755ab 100644 --- a/frontend-dist/index.html +++ b/frontend-dist/index.html @@ -1 +1 @@ -Sanyue ImgHub
\ No newline at end of file +Sanyue ImgHub
\ No newline at end of file diff --git a/frontend-dist/index.html.gz b/frontend-dist/index.html.gz index 6f389f2a3686c247dbdeeba547e53402e594d9c0..249a3526a4da8d9a32927b4c86522768e22d13da 100644 GIT binary patch delta 532 zcmV+v0_**u1fm3x8GqeXX{9()g^(yGP=(43Irb!R*YN~KzAxcWGNCi*_AlncFaSDKaw4#_?CUW z$=*{xD7Ljj0h&CcXDMz!NHi@zlDz6siqYbJpuo@K_SSGG4S$YSV>W}8^_H!2S=7p* zJYV(dr|nb!gj2*Y164beo>q^tSz}ph8Zn5fbk^@6pp(LC@&dYmjTA*>#a0(R8mkIN zE#-r6Pr}tOILw%m?y~=+_A2iFg#(%#1u5P(+j_fRpAN}j)WHsH4>C`4x>J5i2)BLv zG1ZX44fJF%cz(s&{7l+vCv)eyKF>nD8&5oV!PRF z*LD67MO79H^=}et81l_VHP@H*^$X(c*U=vxUuJ8rwSU>ZTc77TMzPo$d2$##L>8~v zheT_I=JM)7|A|v9OI4GZs?yU_2OP+^)jggCgh(MwP$z~sPwczx+b-2$2%|q^*i+cS z5NN>QCfHlr;&&m&j$qCF^bge< WJ62_}R1I6qf5b26w1fc|w8Gr3Uixfwy5EA7CLI`fiu_uYUwkO!*Ec@@#Cfm|&g@B8tXU%)_ z@jR|y7}C5S5eD|IsShVO6?!Q|QxB+2Q+s3udQdSTOOd%NuEp_oU>*znk?kbKx8lo9 z@s|9k*tQM@XbOyhrMP`3(e!vv3d*Atlf~UgksrnFtl>c#oPVswVg@T4EL-J@q?JQ? zzVhm)_1Qn*oG{KnwGL&V)xB)dS(ch6jH0QX4O@ulq_CQTfFWWhMU_~w)s;tMRpqFs zat!@RxEe=?1yj~T@t;($()M3Cpvh5`;$^pKH|zE3kPIdr?a1~Z^Dw8+D(o}Dt?%FG z77DllPX=Rv&VM?DffC!$!{`)u6#c2<7WX@fCOwl|9racxDl4#F^^c%-lno@NsGd5i zG7l7=34gMpsoAo_=A`htS}yCQMKIW5Jha?l6p*5pqPk0!9&*?g69z*um9H;0mzSG$ zTizwn)YU@$n}iz2^3|1IU$jO)A-7#khwyGo*Q9->vV5+=3xY;f!HNaSLOl z5u@9~&hkK+;e(pg=VcHW4*OtA_~=k2JYuj6OtU{WWGw6In6<8c7h>!L*33`;P_403 VQ&&s1)eQVc`~r2Q{aP~w006fd3?Kji diff --git a/frontend-dist/js/24.e38d6915.js b/frontend-dist/js/24.e38d6915.js new file mode 100644 index 00000000..82cc0851 --- /dev/null +++ b/frontend-dist/js/24.e38d6915.js @@ -0,0 +1,2 @@ +(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[24],{213:function(e,t,o){"use strict";o(85331),o(19104)},732:function(e,t,o){"use strict";o.d(t,{A:function(){return p}});var s=o(56768),a=o(24232);const i=["href","target"],l=["alt","src"];function n(e,t,o,n,r,d){return(0,s.uX)(),(0,s.CE)("a",{href:d.logoHref,target:o.target,class:(0,a.C4)(e.logo-e.link)},[(0,s.Lk)("img",{class:(0,a.C4)(d.logoClasses),alt:o.alt,src:d.logoUrl},null,10,l)],10,i)}var r=o(60782),d={name:"Logo",props:{href:{type:String,default:"https://github.com/MarSeventh/CloudFlare-ImgBed"},target:{type:String,default:"_blank",validator:e=>["_blank","_self","_parent","_top"].includes(e)},alt:{type:String,default:"Sanyue logo"},customSrc:{type:String,default:""},position:{type:String,default:"fixed",validator:e=>["fixed","relative","absolute","static"].includes(e)},size:{type:String,default:"normal",validator:e=>["small","normal","large"].includes(e)},enableHover:{type:Boolean,default:!0},useConfigLink:{type:Boolean,default:!1}},computed:{...(0,r.L8)(["userConfig"]),logoUrl(){return this.customSrc||this.userConfig?.logoUrl||o(33153)},logoHref(){return this.useConfigLink&&this.userConfig?.logoLink?this.userConfig.logoLink:this.href},logoClasses(){return{logo:!0,[`logo--${this.position}`]:!0,[`logo--${this.size}`]:!0,"logo--hover-enabled":this.enableHover}}}},c=o(71241);const u=(0,c.A)(d,[["render",n],["__scopeId","data-v-17f54292"]]);var p=u},2893:function(e,t,o){"use strict";o(85331)},4885:function(e,t,o){"use strict";o(85331)},10456:function(e,t,o){"use strict";o(85331)},11393:function(e,t,o){o(79577),o(41549),o(49797),o(49631),o(35623),o(64979),function(t,o){e.exports=o()}(0,function(){return function(e){var t={};function o(s){if(t[s])return t[s].exports;var a=t[s]={i:s,l:!1,exports:{}};return e[s].call(a.exports,a,a.exports,o),a.l=!0,a.exports}return o.m=e,o.c=t,o.d=function(e,t,s){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(o.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)o.d(s,a,function(t){return e[t]}.bind(null,a));return s},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}([function(e,t,o){"use strict";var s;function a(e){return["image/png","image/jpeg","image/gif"].some(t=>t===e)}o.r(t),o.d(t,"canvastoDataURL",function(){return l}),o.d(t,"canvastoFile",function(){return n}),o.d(t,"dataURLtoFile",function(){return d}),o.d(t,"dataURLtoImage",function(){return c}),o.d(t,"downloadFile",function(){return u}),o.d(t,"filetoDataURL",function(){return p}),o.d(t,"imagetoCanvas",function(){return m}),o.d(t,"urltoBlob",function(){return g}),o.d(t,"urltoImage",function(){return f}),o.d(t,"compress",function(){return b}),o.d(t,"compressAccurately",function(){return k}),o.d(t,"EImageType",function(){return s}),function(e){e.PNG="image/png",e.JPEG="image/jpeg",e.GIF="image/gif"}(s||(s={}));var i=function(e,t,o,s){return new(o||(o=Promise))(function(a,i){function l(e){try{r(s.next(e))}catch(e){i(e)}}function n(e){try{r(s.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?a(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(l,n)}r((s=s.apply(e,t||[])).next())})};function l(e,t=.92,o=s.JPEG){return i(this,void 0,void 0,function*(){return a(o)||(o=s.JPEG),e.toDataURL(o,t)})}function n(e,t=.92,o=s.JPEG){return new Promise(s=>e.toBlob(e=>s(e),o,t))}var r=function(e,t,o,s){return new(o||(o=Promise))(function(a,i){function l(e){try{r(s.next(e))}catch(e){i(e)}}function n(e){try{r(s.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?a(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(l,n)}r((s=s.apply(e,t||[])).next())})};function d(e,t){return r(this,void 0,void 0,function*(){const o=e.split(",");let s=o[0].match(/:(.*?);/)[1];const i=atob(o[1]);let l=i.length;const n=new Uint8Array(l);for(;l--;)n[l]=i.charCodeAt(l);return a(t)&&(s=t),new Blob([n],{type:s})})}function c(e){return new Promise((t,o)=>{const s=new Image;s.onload=()=>t(s),s.onerror=()=>o(new Error("dataURLtoImage(): dataURL is illegal")),s.src=e})}function u(e,t){const o=document.createElement("a");o.href=window.URL.createObjectURL(e),o.download=t||Date.now().toString(36),document.body.appendChild(o);const s=document.createEvent("MouseEvents");s.initEvent("click",!1,!1),o.dispatchEvent(s),document.body.removeChild(o)}function p(e){return new Promise(t=>{const o=new FileReader;o.onloadend=e=>t(e.target.result),o.readAsDataURL(e)})}var h=function(e,t,o,s){return new(o||(o=Promise))(function(a,i){function l(e){try{r(s.next(e))}catch(e){i(e)}}function n(e){try{r(s.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?a(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(l,n)}r((s=s.apply(e,t||[])).next())})};function m(e,t={}){return h(this,void 0,void 0,function*(){const o=Object.assign({},t),s=document.createElement("canvas"),a=s.getContext("2d");let i,l;for(const e in o)Object.prototype.hasOwnProperty.call(o,e)&&(o[e]=Number(o[e]));if(o.scale){const t=o.scale>0&&o.scale<10?o.scale:1;l=e.width*t,i=e.height*t}else l=o.width||o.height*e.width/e.height||e.width,i=o.height||o.width*e.height/e.width||e.height;switch([5,6,7,8].some(e=>e===o.orientation)?(s.height=l,s.width=i):(s.height=i,s.width=l),o.orientation){case 3:a.rotate(180*Math.PI/180),a.drawImage(e,-s.width,-s.height,s.width,s.height);break;case 6:a.rotate(90*Math.PI/180),a.drawImage(e,0,-s.width,s.height,s.width);break;case 8:a.rotate(270*Math.PI/180),a.drawImage(e,-s.height,0,s.height,s.width);break;case 2:a.translate(s.width,0),a.scale(-1,1),a.drawImage(e,0,0,s.width,s.height);break;case 4:a.translate(s.width,0),a.scale(-1,1),a.rotate(180*Math.PI/180),a.drawImage(e,-s.width,-s.height,s.width,s.height);break;case 5:a.translate(s.width,0),a.scale(-1,1),a.rotate(90*Math.PI/180),a.drawImage(e,0,-s.width,s.height,s.width);break;case 7:a.translate(s.width,0),a.scale(-1,1),a.rotate(270*Math.PI/180),a.drawImage(e,-s.height,0,s.height,s.width);break;default:a.drawImage(e,0,0,s.width,s.height)}return s})}function g(e){return fetch(e).then(e=>e.blob())}function f(e){return new Promise((t,o)=>{const s=new Image;s.onload=()=>t(s),s.onerror=()=>o(new Error("urltoImage(): Image failed to load, please check the image URL")),s.src=e})}var y=function(e,t,o,s){return new(o||(o=Promise))(function(a,i){function l(e){try{r(s.next(e))}catch(e){i(e)}}function n(e){try{r(s.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?a(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(l,n)}r((s=s.apply(e,t||[])).next())})};function b(e,t={}){return y(this,void 0,void 0,function*(){if(!(e instanceof Blob))throw new Error("compress(): First arg must be a Blob object or a File object.");if("object"!=typeof t&&(t=Object.assign({quality:t})),t.quality=Number(t.quality),Number.isNaN(t.quality))return e;const o=yield p(e);let i=o.split(",")[0].match(/:(.*?);/)[1],n=s.JPEG;a(t.type)&&(n=t.type,i=t.type);const r=yield c(o),u=yield m(r,Object.assign({},t)),h=yield l(u,t.quality,n),g=yield d(h,i);return g.size>e.size?e:g})}function k(e,t={}){return y(this,void 0,void 0,function*(){if(!(e instanceof Blob))throw new Error("compressAccurately(): First arg must be a Blob object or a File object.");if("object"!=typeof t&&(t=Object.assign({size:t})),t.size=Number(t.size),Number.isNaN(t.size))return e;if(1024*t.size>e.size)return e;t.accuracy=Number(t.accuracy),(!t.accuracy||t.accuracy<.8||t.accuracy>.99)&&(t.accuracy=.95);const o=t.size*(2-t.accuracy)*1024,i=1024*t.size,n=t.size*t.accuracy*1024,r=yield p(e);let u=r.split(",")[0].match(/:(.*?);/)[1],h=s.JPEG;a(t.type)&&(h=t.type,u=t.type);const g=yield c(r),f=yield m(g,Object.assign({},t));let y,b=.5;const k=[null,null];for(let e=1;e<=7;e++){y=yield l(f,b,h);const t=.75*y.length;if(7===e){(ot)&&(y=[y,...k].filter(e=>e).sort((e,t)=>Math.abs(.75*e.length-i)-Math.abs(.75*t.length-i))[0]);break}if(ot))break;k[0]=y,b+=Math.pow(.5,e+1)}}const v=yield d(y,u);return v.size>e.size?e:v})}}])})},13378:function(e,t,o){"use strict";o(85331),o(38736),o(79899)},15616:function(e,t,o){"use strict";o(85331),o(97197)},17879:function(e,t,o){"use strict";o.d(t,{A:function(){return m}});var s=o(56768),a=o(45130),i=o(24232);const l={id:"themeMask"},n=["cx","cy","r"],r=["r"],d=["opacity"];function c(e,t,o,c,u,p){const h=(0,s.g2)("font-awesome-icon");return(0,s.uX)(),(0,s.CE)("div",{id:"themeToggle",onClick:t[0]||(t[0]=(...e)=>p.handleToggleClick&&p.handleToggleClick(...e))},[(0,s.bF)(a.eB,{name:"icon-fade",mode:"out-in"},{default:(0,s.k6)(()=>[u.isAuto?((0,s.uX)(),(0,s.Wv)(h,{key:"auto-mode",icon:"circle-half-stroke",class:"auto-icon",style:{"font-size":"1.5em",color:"var(--theme-toggle-color)"}})):((0,s.uX)(),(0,s.CE)("svg",{key:"sun-moon",class:(0,i.C4)(["theme_toggle_svg",{dark:u.isDark}]),width:"1.5em",height:"1.5em",viewBox:"0 0 24 24",fill:"none","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",stroke:"currentColor"},[(0,s.Lk)("mask",l,[t[1]||(t[1]=(0,s.Lk)("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:"white"},null,-1)),(0,s.Lk)("circle",{class:"theme_toggle_circle1",fill:"black",cx:u.isDark?"50%":"100%",cy:u.isDark?"23%":"0%",r:u.isDark?"9":"5"},null,8,n)]),(0,s.Lk)("circle",{class:"theme_toggle_circle2",cx:"12",cy:"12",r:u.isDark?"9":"5",mask:"url(#themeMask)"},null,8,r),(0,s.Lk)("g",{class:"theme_toggle_g",stroke:"currentColor",opacity:u.isDark?0:1},[...t[2]||(t[2]=[(0,s.Lk)("line",{x1:"12",y1:"1",x2:"12",y2:"3"},null,-1),(0,s.Lk)("line",{x1:"12",y1:"21",x2:"12",y2:"23"},null,-1),(0,s.Lk)("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"},null,-1),(0,s.Lk)("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"},null,-1),(0,s.Lk)("line",{x1:"1",y1:"12",x2:"3",y2:"12"},null,-1),(0,s.Lk)("line",{x1:"21",y1:"12",x2:"23",y2:"12"},null,-1),(0,s.Lk)("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"},null,-1),(0,s.Lk)("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"},null,-1)])],8,d)],2))]),_:1})])}var u={name:"ToggleDark",data(){return{isDark:this.$store.getters.useDarkMode,isAuto:!this.$store.getters.cusDarkMode}},methods:{handleToggleClick(){this.isAuto?(this.isDark=!1,this.isAuto=!1,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!1)):this.isDark?(this.isAuto=!0,this.$store.commit("setCusDarkMode",!1)):(this.isDark=!0,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!0))}}},p=o(71241);const h=(0,p.A)(u,[["render",c],["__scopeId","data-v-2122c62a"]]);var m=h},18785:function(e,t,o){"use strict";o(85331)},19104:function(e,t,o){"use strict";o(85331)},23597:function(e,t,o){"use strict";o(85331)},30694:function(e,t,o){"use strict";o(85331)},33153:function(e,t,o){"use strict";e.exports=o.p+"img/logo.e8dbfa27.png"},33892:function(e,t,o){"use strict";o.d(t,{A:function(){return $}});var s=o(99114),a=(o(85331),o(30694),o(49385)),i=(o(37952),o(30650)),l=(o(19104),o(31802)),n=(o(13378),o(80047)),r=(o(99648),o(56768)),d=o(45130),c=o(24232);const u={class:"directory-tree-picker"},p={class:"tree-container"},h={key:0,class:"error-state"},m={class:"error-text"},g={class:"node-label"},f={class:"tree-container"},y={key:0,class:"error-state"},b={class:"error-text"},k={class:"node-label"};function v(e,t,o,v,C,w){const F=(0,r.g2)("font-awesome-icon"),L=n.S2,U=l.qk,$=i.Vc,S=a.pw,T=s.A;return(0,r.uX)(),(0,r.CE)("div",u,[w.isDesktop?((0,r.uX)(),(0,r.Wv)($,{key:0,visible:C.popoverVisible,"onUpdate:visible":t[1]||(t[1]=e=>C.popoverVisible=e),placement:"bottom-start",width:320,trigger:"click","popper-class":"directory-tree-popover","show-arrow":!0,"hide-after":0,"show-after":50,transition:"el-zoom-in-top"},{reference:(0,r.k6)(()=>[(0,r.Lk)("span",{class:"popover-trigger-wrapper",onClick:t[0]||(t[0]=(0,d.D$)(()=>{},["stop"]))},[(0,r.RG)(e.$slots,"trigger",{},void 0,!0)])]),default:(0,r.k6)(()=>[(0,r.bo)(((0,r.uX)(),(0,r.CE)("div",p,[C.error?((0,r.uX)(),(0,r.CE)("div",h,[(0,r.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,r.Lk)("span",m,(0,c.v_)(C.error),1),(0,r.bF)(L,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,r.k6)(()=>[(0,r.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,r.uX)(),(0,r.Wv)(U,{key:1,ref:"treeRef",data:C.treeData,props:C.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":o.currentDirectory,class:"directory-tree",onNodeClick:w.handleNodeClick},{default:(0,r.k6)(({node:e,data:t})=>[(0,r.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===o.currentDirectory}])},[(0,r.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,r.Lk)("span",g,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[T,C.loading]])]),_:3},8,["visible"])):((0,r.uX)(),(0,r.CE)(r.FK,{key:1},[(0,r.Lk)("span",{class:"drawer-trigger-wrapper",onClick:t[2]||(t[2]=(...e)=>w.openDrawer&&w.openDrawer(...e))},[(0,r.RG)(e.$slots,"trigger",{},void 0,!0)]),(0,r.bF)(S,{modelValue:C.drawerVisible,"onUpdate:modelValue":t[3]||(t[3]=e=>C.drawerVisible=e),direction:"btt",size:"60%","show-close":!0,"with-header":!0,"z-index":3e3,title:e.$t("directoryTree.selectDirectory"),class:"directory-tree-drawer"},{default:(0,r.k6)(()=>[(0,r.bo)(((0,r.uX)(),(0,r.CE)("div",f,[C.error?((0,r.uX)(),(0,r.CE)("div",y,[(0,r.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,r.Lk)("span",b,(0,c.v_)(C.error),1),(0,r.bF)(L,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,r.k6)(()=>[(0,r.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,r.uX)(),(0,r.Wv)(U,{key:1,ref:"treeRefMobile",data:C.treeData,props:C.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":o.currentDirectory,class:"directory-tree mobile-tree",onNodeClick:w.handleNodeClick},{default:(0,r.k6)(({node:e,data:t})=>[(0,r.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===o.currentDirectory}])},[(0,r.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,r.Lk)("span",k,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[T,C.loading]])]),_:1},8,["modelValue","title"])],64))])}var C=o(457),w=o(70797),F={name:"DirectoryTreePicker",props:{currentDirectory:{type:String,default:""},source:{type:String,default:"upload",validator:e=>["upload","admin"].includes(e)}},data(){return{popoverVisible:!1,drawerVisible:!1,treeData:[],loading:!1,error:"",treeProps:{children:"children",label:"name"},windowWidth:window.innerWidth}},computed:{isDesktop(){return this.windowWidth>=769}},watch:{popoverVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.popoverVisible&&this.$refs.treeRef){const e=this.$refs.treeRef.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},200)},drawerVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.drawerVisible&&this.$refs.treeRefMobile){const e=this.$refs.treeRefMobile.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},300)},currentDirectory(e){this.$nextTick(()=>{this.$refs.treeRef&&e&&this.$refs.treeRef.setCurrentKey(e),this.$refs.treeRefMobile&&e&&this.$refs.treeRefMobile.setCurrentKey(e)})}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},openDrawer(){this.drawerVisible=!0},async fetchDirectoryTree(){this.loading=!0,this.error="";try{let e;if("admin"===this.source){const t=await(0,w.A)("/api/directoryTree",{method:"GET"});if(!t.ok)return void(401===t.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.serverError"));e=await t.json()}else{const t=await C.A.get("/api/directoryTree",{withAuthCode:!0});e=t.data}e.tree?this.treeData=[e.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),401===e.response?.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.loadFailed")}finally{this.loading=!1}},handleNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.$emit("select",t),this.popoverVisible=!1,this.drawerVisible=!1}}},L=o(71241);const U=(0,L.A)(F,[["render",v],["__scopeId","data-v-62eab69a"]]);var $=U},34396:function(e,t,o){"use strict";o(85331),o(4885)},34896:function(e,t,o){"use strict";o(85331)},37952:function(e,t,o){"use strict";o(85331),o(97197)},38736:function(e,t,o){"use strict";o(85331)},40670:function(e,t,o){"use strict";o(85331),o(99648),o(19104),o(85970)},50333:function(e,t,o){"use strict";o(85331),o(29092)},62024:function(e,t,o){"use strict";o.r(t),o.d(t,{default:function(){return Ao}});var s=o(78507),a=(o(85331),o(213),o(80047)),i=(o(99648),o(56768)),l=o(24232);const n={class:"history-header"},r={class:"header-left"},d={class:"record-count"},c={class:"header-right"},u={class:"timeline-header"},p={class:"date-label"},h={key:0,class:"grid-view"},m={class:"grid-preview"},g=["src"],f=["src"],y={key:2,class:"file-icon-wrapper"},b={class:"grid-overlay"},k={class:"grid-actions"},v={class:"grid-info"},C=["title"],w={class:"upload-time"},F={key:1,class:"list-view"},L={class:"list-preview"},U=["src"],$=["src"],S={key:2,class:"file-icon-wrapper-small"},T={class:"list-info"},_=["title"],x=["title"],M={class:"list-meta"},A={class:"upload-time"},R={class:"list-actions"},D={key:0,class:"load-more-container"},E={key:0,class:"loading-indicator"},I={key:1,class:"load-more-hint"},N={key:1,class:"no-more-hint"},P={key:1,class:"empty-state"};function z(e,t,o,z,W,V){const B=(0,i.g2)("font-awesome-icon"),H=a.S2,Q=s.R7;return(0,i.uX)(),(0,i.CE)("div",{class:(0,l.C4)(["history-container",{active:o.show}])},[(0,i.Lk)("div",n,[(0,i.Lk)("div",r,[(0,i.Lk)("h2",null,(0,l.v_)(e.$t("uploadHistory.title")),1),(0,i.Lk)("span",d,(0,l.v_)(e.$t("uploadHistory.totalRecords",{count:W.totalCount})),1)]),(0,i.Lk)("div",c,[(0,i.bF)(Q,{content:e.$t("uploadHistory.switchView"),placement:"bottom","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(H,{circle:"",onClick:V.toggleViewMode},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"grid"===W.viewMode?"list":"th-large"},null,8,["icon"])]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,i.bF)(Q,{content:e.$t("uploadHistory.clearRecords"),placement:"bottom","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(H,{circle:"",type:"danger",onClick:V.clearHistory},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,i.bF)(H,{circle:"",onClick:t[0]||(t[0]=t=>e.$emit("close"))},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"times"})]),_:1})])]),W.historyList.length>0?((0,i.uX)(),(0,i.CE)("div",{key:0,class:"history-content",ref:"historyContent",onScroll:t[3]||(t[3]=(...e)=>V.handleScroll&&V.handleScroll(...e))},[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(V.groupedHistory,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.date,class:"history-group"},[(0,i.Lk)("div",u,[t[4]||(t[4]=(0,i.Lk)("div",{class:"timeline-dot"},null,-1)),(0,i.Lk)("span",p,(0,l.v_)(e.date),1)]),"grid"===W.viewMode?((0,i.uX)(),(0,i.CE)("div",h,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(e.items,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.time,class:"grid-item"},[(0,i.Lk)("div",m,[V.isImage(e.name)?((0,i.uX)(),(0,i.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[1]||(t[1]=(...e)=>V.handleImageError&&V.handleImageError(...e))},null,40,g)):V.isVideo(e.name)?((0,i.uX)(),(0,i.CE)("video",{key:1,src:e.url,muted:""},null,8,f)):((0,i.uX)(),(0,i.CE)("div",y,[(0,i.bF)(B,{icon:"file",class:"file-icon"})])),(0,i.Lk)("div",b,[(0,i.Lk)("div",k,[(0,i.bF)(H,{circle:"",size:"default",type:"primary",onClick:t=>V.copyLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"default",class:"action-btn-view",onClick:t=>V.openLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"default",type:"danger",onClick:t=>V.deleteItem(e)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])])]),(0,i.Lk)("div",v,[(0,i.Lk)("div",{class:"file-name",title:e.name},(0,l.v_)(e.name),9,C),(0,i.Lk)("div",w,(0,l.v_)(V.formatTime(e.time)),1)])]))),128))])):((0,i.uX)(),(0,i.CE)("div",F,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(e.items,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.time,class:"list-item"},[(0,i.Lk)("div",L,[V.isImage(e.name)?((0,i.uX)(),(0,i.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[2]||(t[2]=(...e)=>V.handleImageError&&V.handleImageError(...e))},null,40,U)):V.isVideo(e.name)?((0,i.uX)(),(0,i.CE)("video",{key:1,src:e.url,muted:""},null,8,$)):((0,i.uX)(),(0,i.CE)("div",S,[(0,i.bF)(B,{icon:"file"})]))]),(0,i.Lk)("div",T,[(0,i.Lk)("div",{class:"file-name",title:e.name},(0,l.v_)(e.name),9,_),(0,i.Lk)("div",{class:"file-url",title:e.url},(0,l.v_)(e.url),9,x)]),(0,i.Lk)("div",M,[(0,i.Lk)("div",A,(0,l.v_)(V.formatTime(e.time)),1)]),(0,i.Lk)("div",R,[(0,i.bF)(H,{circle:"",size:"small",type:"primary",onClick:t=>V.copyLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"small",class:"action-btn-view",onClick:t=>V.openLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"small",type:"danger",onClick:t=>V.deleteItem(e)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])]))),128))]))]))),128)),V.hasMore?((0,i.uX)(),(0,i.CE)("div",D,[W.loadingMore?((0,i.uX)(),(0,i.CE)("div",E,[(0,i.bF)(B,{icon:"spinner",spin:""}),(0,i.Lk)("span",null,(0,l.v_)(e.$t("uploadHistory.loading")),1)])):((0,i.uX)(),(0,i.CE)("div",I,(0,l.v_)(e.$t("uploadHistory.pullToLoadMore")),1))])):W.historyList.length>0?((0,i.uX)(),(0,i.CE)("div",N,(0,l.v_)(e.$t("uploadHistory.noMoreRecords")),1)):(0,i.Q3)("",!0)],544)):((0,i.uX)(),(0,i.CE)("div",P,[(0,i.bF)(B,{icon:"history",class:"empty-icon"}),(0,i.Lk)("p",null,(0,l.v_)(e.$t("uploadHistory.emptyHistory")),1)]))],2)}o(44114),o(18111),o(22489),o(7588),o(61701);var W={name:"UploadHistory",props:{show:{type:Boolean,default:!1}},data(){return{historyList:[],allHistory:[],viewMode:"grid",pageSize:30,currentPage:0,loadingMore:!1,totalCount:0}},watch:{show(e){e&&this.resetAndLoad()}},computed:{hasMore(){return this.historyList.length{const o=new Date(t.time),s=`${o.getFullYear()}-${String(o.getMonth()+1).padStart(2,"0")}-${String(o.getDate()).padStart(2,"0")}`;e[s]||(e[s]=[]),e[s].push(t)}),Object.keys(e).sort((e,t)=>new Date(t)-new Date(e)).map(t=>({date:t,items:e[t]}))}},mounted(){const e=localStorage.getItem("historyViewMode");e&&(this.viewMode=e)},methods:{resetAndLoad(){this.historyList=[],this.currentPage=0,this.loadAllHistory(),this.loadMore()},loadAllHistory(){try{const e=JSON.parse(localStorage.getItem("uploadHistory")||"[]");this.allHistory=e.sort((e,t)=>t.time-e.time),this.totalCount=this.allHistory.length}catch(e){console.error("Failed to load history",e),this.allHistory=[],this.totalCount=0}},loadMore(){!this.loadingMore&&this.hasMore&&(this.loadingMore=!0,setTimeout(()=>{const e=this.currentPage*this.pageSize,t=e+this.pageSize,o=this.allHistory.slice(e,t);this.historyList=[...this.historyList,...o],this.currentPage++,this.loadingMore=!1},50))},handleScroll(e){const t=e.target,o=t.scrollTop,s=t.scrollHeight,a=t.clientHeight;s-o-a<100&&this.loadMore()},toggleViewMode(){this.viewMode="grid"===this.viewMode?"list":"grid",localStorage.setItem("historyViewMode",this.viewMode)},clearHistory(){this.$confirm(this.$t("uploadHistory.clearConfirmMessage"),this.$t("uploadHistory.clearConfirmTitle"),{confirmButtonText:this.$t("uploadHistory.clearConfirmOk"),cancelButtonText:this.$t("uploadHistory.clearConfirmCancel"),type:"warning"}).then(()=>{this.historyList=[],this.allHistory=[],this.totalCount=0,this.currentPage=0,localStorage.removeItem("uploadHistory"),this.$message.success(this.$t("uploadHistory.recordsCleared"))}).catch(()=>{})},deleteItem(e){this.$confirm(this.$t("uploadHistory.deleteConfirmMessage"),this.$t("uploadHistory.clearConfirmTitle"),{confirmButtonText:this.$t("uploadHistory.clearConfirmOk"),cancelButtonText:this.$t("uploadHistory.clearConfirmCancel"),type:"warning"}).then(()=>{this.historyList=this.historyList.filter(t=>t.time!==e.time),this.allHistory=this.allHistory.filter(t=>t.time!==e.time),this.totalCount=this.allHistory.length;try{localStorage.setItem("uploadHistory",JSON.stringify(this.allHistory)),this.$message.success(this.$t("uploadHistory.recordDeleted"))}catch(t){console.error("Failed to update history",t)}}).catch(()=>{})},isImage(e){const t=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp"],o=e?e.split(".").pop().toLowerCase():"";return t.includes(o)},isVideo(e){const t=["mp4","webm","ogg","mkv"],o=e?e.split(".").pop().toLowerCase():"";return t.includes(o)},formatTime(e){const t=new Date(e),o=t.getFullYear(),s=String(t.getMonth()+1).padStart(2,"0"),a=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),l=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return`${o}-${s}-${a} ${i}:${l}:${n}`},copyLink(e){navigator.clipboard.writeText(e).then(()=>{this.$message.success(this.$t("uploadHistory.linkCopied"))}).catch(()=>{this.$message.error(this.$t("uploadHistory.copyFailed"))})},openLink(e){window.open(e,"_blank")},handleImageError(e){e.target.src=o(96682)}}},V=o(71241);const B=(0,V.A)(W,[["render",z],["__scopeId","data-v-7da2f8c2"]]);var H=B,Q=o(86975),X=o(9267),q=(o(15616),o(81418)),O=(o(50333),o(74757)),j=o(55558),G=(o(10456),o(39623)),K=(o(29092),o(76018)),J=(o(96808),o(67819),o(66810)),Y=(o(34396),o(4885),o(97769));const Z={class:"dialog-section"},ee={class:"section-header"},te={class:"section-title"},oe={class:"section-content"},se={class:"setting-item"},ae={class:"setting-label"},ie={key:0,class:"setting-item"},le={class:"setting-label"},ne={class:"setting-item"},re={class:"setting-label"},de={class:"setting-item"},ce={class:"setting-label"},ue={class:"dialog-section"},pe={class:"section-header"},he={class:"section-title"},me={class:"section-content"},ge={class:"dialog-section"},fe={class:"section-header"},ye={class:"section-title"},be={class:"section-content"},ke={class:"setting-item"},ve={class:"setting-label"},Ce={class:"setting-item"},we={class:"setting-label"},Fe={key:0,class:"setting-item slider-item"},Le={class:"setting-label"},Ue={class:"slider-wrapper"},$e={class:"slider-input-wrapper"},Se={key:1,class:"setting-item slider-item"},Te={class:"setting-label"},_e={class:"slider-wrapper"},xe={class:"slider-input-wrapper"},Me={key:0,class:"dialog-section"},Ae={class:"section-header"},Re={class:"section-title"},De={class:"section-content"},Ee={class:"setting-item"},Ie={class:"setting-label"},Ne={class:"dialog-action"};function Pe(e,t,o,n,r,d){const c=Y.A,u=J.ll,p=J.MQ,h=(0,i.g2)("font-awesome-icon"),m=s.R7,g=K.P9,f=K.AV,y=G.WK,b=j.qi,k=O.B8,v=q.lq,C=a.S2,w=X.kZ;return(0,i.uX)(),(0,i.Wv)(w,{title:e.$t("uploadSettings.title"),modelValue:d.visible,"onUpdate:modelValue":t[12]||(t[12]=e=>d.visible=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog settings-dialog-scope upload-settings-dialog"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Z,[(0,i.Lk)("div",ee,[(0,i.Lk)("span",te,(0,l.v_)(e.$t("uploadSettings.uploadChannel")),1)]),(0,i.Lk)("div",oe,[(0,i.Lk)("div",se,[(0,i.Lk)("span",ae,(0,l.v_)(e.$t("uploadSettings.channelType")),1),(0,i.bF)(p,{"model-value":o.uploadChannel,"onUpdate:modelValue":t[0]||(t[0]=t=>e.$emit("update:uploadChannel",t)),class:"radio-card-group compact"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{label:"telegram",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"telegram",class:"channel-icon"}),t[13]||(t[13]=(0,i.Lk)("span",null,"TG",-1))]),_:1}),(0,i.bF)(u,{label:"cfr2",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"cfr2",class:"channel-icon"}),t[14]||(t[14]=(0,i.Lk)("span",null,"R2",-1))]),_:1}),(0,i.bF)(u,{label:"s3",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"s3",class:"channel-icon"}),t[15]||(t[15]=(0,i.Lk)("span",null,"S3",-1))]),_:1}),(0,i.bF)(u,{label:"discord",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"discord",class:"channel-icon"}),t[16]||(t[16]=(0,i.Lk)("span",null,"DC",-1))]),_:1}),(0,i.bF)(u,{label:"huggingface",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"huggingface",class:"channel-icon"}),t[17]||(t[17]=(0,i.Lk)("span",null,"HF",-1))]),_:1}),(0,i.bF)(u,{label:"webdav",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"webdav",class:"channel-icon"}),t[18]||(t[18]=(0,i.Lk)("span",null,"WD",-1))]),_:1})]),_:1},8,["model-value"])]),o.currentChannelList.length>1?((0,i.uX)(),(0,i.CE)("div",ie,[(0,i.Lk)("span",le,[(0,i.eW)((0,l.v_)(e.$t("uploadSettings.channelName"))+" ",1),(0,i.bF)(m,{content:e.$t("uploadSettings.channelNameTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.bF)(f,{"model-value":o.channelName,"onUpdate:modelValue":t[1]||(t[1]=t=>e.$emit("update:channelName",t)),placeholder:e.$t("uploadSettings.autoSelect"),clearable:"",class:"setting-input"},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.currentChannelList,e=>((0,i.uX)(),(0,i.Wv)(g,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["model-value","placeholder"])])):(0,i.Q3)("",!0),(0,i.Lk)("div",ne,[(0,i.Lk)("span",re,(0,l.v_)(e.$t("uploadSettings.uploadDirectory")),1),(0,i.bF)(y,{"model-value":o.uploadFolder,"onUpdate:modelValue":d.handleUploadFolderInput,placeholder:e.$t("uploadSettings.uploadDirectoryPlaceholder"),class:"setting-input"},null,8,["model-value","onUpdate:modelValue","placeholder"])]),(0,i.Lk)("div",de,[(0,i.Lk)("span",ce,[(0,i.eW)((0,l.v_)(e.$t("uploadSettings.autoSwitch"))+" ",1),(0,i.bF)(m,{content:e.$t("uploadSettings.autoSwitchTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.bF)(b,{"model-value":o.autoRetry,"onUpdate:modelValue":t[2]||(t[2]=t=>e.$emit("update:autoRetry",t))},null,8,["model-value"])])])]),(0,i.Lk)("div",ue,[(0,i.Lk)("div",pe,[(0,i.Lk)("span",he,(0,l.v_)(e.$t("uploadSettings.fileNaming")),1)]),(0,i.Lk)("div",me,[(0,i.bF)(p,{"model-value":o.uploadNameType,"onUpdate:modelValue":t[3]||(t[3]=t=>e.$emit("update:uploadNameType",t)),class:"radio-card-group grid-2x2"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{label:"default",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"cog",class:"radio-icon"}),(0,i.Lk)("span",null,(0,l.v_)(e.$t("uploadSettings.namingDefault")),1)]),_:1}),(0,i.bF)(u,{label:"index",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"hashtag",class:"radio-icon"}),(0,i.Lk)("span",null,(0,l.v_)(e.$t("uploadSettings.namingIndex")),1)]),_:1}),(0,i.bF)(u,{label:"origin",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"file-signature",class:"radio-icon"}),(0,i.Lk)("span",null,(0,l.v_)(e.$t("uploadSettings.namingOrigin")),1)]),_:1}),(0,i.bF)(u,{label:"short",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"compress-alt",class:"radio-icon"}),(0,i.Lk)("span",null,(0,l.v_)(e.$t("uploadSettings.namingShort")),1)]),_:1})]),_:1},8,["model-value"])])]),(0,i.Lk)("div",ge,[(0,i.Lk)("div",fe,[(0,i.Lk)("span",ye,(0,l.v_)(e.$t("uploadSettings.filePreprocess")),1),(0,i.bF)(m,{content:e.$t("uploadSettings.filePreprocessTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",be,[(0,i.Lk)("div",ke,[(0,i.Lk)("span",ve,[(0,i.eW)((0,l.v_)(e.$t("uploadSettings.convertToWebp"))+" ",1),(0,i.bF)(m,{content:e.$t("uploadSettings.convertToWebpTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.bF)(b,{"model-value":o.convertToWebp,"onUpdate:modelValue":t[4]||(t[4]=t=>e.$emit("update:convertToWebp",t))},null,8,["model-value"])]),(0,i.Lk)("div",Ce,[(0,i.Lk)("span",we,(0,l.v_)(e.$t("uploadSettings.fileCompress")),1),(0,i.bF)(b,{"model-value":o.customerCompress,"onUpdate:modelValue":t[5]||(t[5]=t=>e.$emit("update:customerCompress",t))},null,8,["model-value"])]),o.customerCompress?((0,i.uX)(),(0,i.CE)("div",Fe,[(0,i.Lk)("span",Le,[(0,i.eW)((0,l.v_)(e.$t("uploadSettings.compressThreshold"))+" ",1),(0,i.bF)(m,{content:e.$t("uploadSettings.compressThresholdTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",Ue,[(0,i.bF)(k,{"model-value":o.compressBar,"onUpdate:modelValue":t[6]||(t[6]=t=>e.$emit("update:compressBar",t)),min:1,max:20,"format-tooltip":e=>`${e} MB`},null,8,["model-value","format-tooltip"]),(0,i.Lk)("div",$e,[(0,i.bF)(v,{"model-value":o.compressBar,"onUpdate:modelValue":t[7]||(t[7]=t=>e.$emit("update:compressBar",t)),min:1,max:20,step:1,"value-on-clear":1,class:"slider-input","controls-position":"right"},null,8,["model-value"]),t[19]||(t[19]=(0,i.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,i.Q3)("",!0),o.customerCompress?((0,i.uX)(),(0,i.CE)("div",Se,[(0,i.Lk)("span",Te,[(0,i.eW)((0,l.v_)(e.$t("uploadSettings.expectedSize"))+" ",1),(0,i.bF)(m,{content:e.$t("uploadSettings.expectedSizeTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",_e,[(0,i.bF)(k,{"model-value":o.compressQuality,"onUpdate:modelValue":t[8]||(t[8]=t=>e.$emit("update:compressQuality",t)),min:.5,max:o.compressBar,step:.1,"format-tooltip":e=>`${e} MB`},null,8,["model-value","max","format-tooltip"]),(0,i.Lk)("div",xe,[(0,i.bF)(v,{"model-value":o.compressQuality,"onUpdate:modelValue":t[9]||(t[9]=t=>e.$emit("update:compressQuality",t)),min:.5,max:o.compressBar,step:.1,precision:1,"value-on-clear":.5,class:"slider-input","controls-position":"right"},null,8,["model-value","max"]),t[20]||(t[20]=(0,i.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,i.Q3)("",!0)])]),"telegram"===o.uploadChannel?((0,i.uX)(),(0,i.CE)("div",Me,[(0,i.Lk)("div",Ae,[(0,i.Lk)("span",Re,(0,l.v_)(e.$t("uploadSettings.serverCompress")),1),(0,i.bF)(m,{content:e.$t("uploadSettings.serverCompressTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",De,[(0,i.Lk)("div",Ee,[(0,i.Lk)("span",Ie,(0,l.v_)(e.$t("uploadSettings.enableCompress")),1),(0,i.bF)(b,{"model-value":o.serverCompress,"onUpdate:modelValue":t[10]||(t[10]=t=>e.$emit("update:serverCompress",t))},null,8,["model-value"])])])])):(0,i.Q3)("",!0),(0,i.Lk)("div",Ne,[(0,i.bF)(C,{type:"primary",onClick:t[11]||(t[11]=e=>d.visible=!1),class:"confirm-btn"},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(e.$t("uploadSettings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"])}var ze={name:"UploadSettingsDialog",components:{ChannelIcon:Y.A},methods:{handleUploadFolderInput(e){e&&!e.startsWith("/")&&(e="/"+e),this.$emit("update:uploadFolder",e)}},props:{modelValue:{type:Boolean,default:!1},uploadChannel:{type:String,default:"telegram"},channelName:{type:String,default:""},currentChannelList:{type:Array,default:()=>[]},uploadFolder:{type:String,default:""},autoRetry:{type:Boolean,default:!0},uploadNameType:{type:String,default:"default"},convertToWebp:{type:Boolean,default:!1},customerCompress:{type:Boolean,default:!0},compressBar:{type:Number,default:5},compressQuality:{type:Number,default:4},serverCompress:{type:Boolean,default:!0}},emits:["update:modelValue","update:uploadChannel","update:channelName","update:uploadFolder","update:autoRetry","update:uploadNameType","update:convertToWebp","update:customerCompress","update:compressBar","update:compressQuality","update:serverCompress"],computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth>768?"50%":"90%"}}};const We=(0,V.A)(ze,[["render",Pe]]);var Ve=We,Be=o(88559),He=(o(85970),o(813)),Qe=(o(34896),o(69655)),Xe=(o(2893),o(74253));o(79899);const qe={class:"upload-list-item"},Oe=["href"],je={key:0,style:{width:"10vw","border-radius":"12px"},autoplay:"",muted:"",playsinline:"",loop:""},Ge=["src"],Ke=["src"],Je={key:2,style:{width:"10vw","border-radius":"12px"}},Ye={class:"upload-list-item-content"},Ze={class:"upload-list-item-name-wrapper"},et={key:0,class:"upload-list-item-url"},tt={class:"upload-list-item-url-row"},ot={class:"upload-list-item-url-row"},st={key:1,class:"upload-list-item-progress"},at={class:"upload-list-item-action"};function it(e,t,o,s,a,n){const r=(0,i.g2)("font-awesome-icon"),d=Xe.$g,c=G.WK,u=Qe.ve,p=(0,i.g2)("Link"),h=He.tk,m=(0,i.g2)("Delete");return(0,i.uX)(),(0,i.CE)("div",qe,[(0,i.Lk)("a",{href:o.file.url,target:"_blank",class:"upload-list-item-preview"},[n.isVideo(o.file.name)?((0,i.uX)(),(0,i.CE)("video",je,[(0,i.Lk)("source",{src:o.file.url,type:"video/mp4"},null,8,Ge),t[7]||(t[7]=(0,i.eW)(" Your browser does not support the video tag. ",-1))])):n.isImage(o.file.name)?((0,i.uX)(),(0,i.CE)("img",{key:1,style:{width:"10vw","border-radius":"12px"},src:o.file.url,onError:t[0]||(t[0]=t=>e.$emit("preview-error",o.file))},null,40,Ke)):((0,i.uX)(),(0,i.CE)("div",Je,[(0,i.bF)(r,{icon:"file",class:"file-icon"})]))],8,Oe),(0,i.Lk)("div",Ye,[(0,i.Lk)("div",Ze,[(0,i.bF)(d,{class:"upload-list-item-name",truncated:""},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(n.truncateFilename(o.file.name)),1)]),_:1})]),"done"===o.file.status?((0,i.uX)(),(0,i.CE)("div",et,[(0,i.Lk)("div",tt,[(0,i.bF)(c,{modelValue:o.file.finalURL,"onUpdate:modelValue":t[1]||(t[1]=e=>o.file.finalURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[8]||(t[8]=[(0,i.eW)("URL",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,i.bF)(c,{modelValue:o.file.mdURL,"onUpdate:modelValue":t[2]||(t[2]=e=>o.file.mdURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[9]||(t[9]=[(0,i.eW)("MarkDown",-1)])]),_:1},8,["modelValue","onClick","size"])]),(0,i.Lk)("div",ot,[(0,i.bF)(c,{modelValue:o.file.htmlURL,"onUpdate:modelValue":t[3]||(t[3]=e=>o.file.htmlURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[10]||(t[10]=[(0,i.eW)("HTML",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,i.bF)(c,{modelValue:o.file.ubbURL,"onUpdate:modelValue":t[4]||(t[4]=e=>o.file.ubbURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[11]||(t[11]=[(0,i.eW)("BBCode",-1)])]),_:1},8,["modelValue","onClick","size"])])])):((0,i.uX)(),(0,i.CE)("div",st,[(0,i.bF)(u,{percentage:o.file.progreess,status:o.file.status,"show-text":!1},null,8,["percentage","status"])]))]),(0,i.Lk)("div",at,[(0,i.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-primary",onClick:t[5]||(t[5]=t=>e.$emit("copy",o.file))},[(0,i.bF)(h,null,{default:(0,i.k6)(()=>[(0,i.bF)(p)]),_:1})]),(0,i.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-danger",onClick:t[6]||(t[6]=t=>e.$emit("remove",o.file))},[(0,i.bF)(h,null,{default:(0,i.k6)(()=>[(0,i.bF)(m)]),_:1})])])])}var lt=o(57477);const nt=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp","raw","cr2","nef","dng","eps","ai","emf","wmf"],rt=["mp4","webm","ogg","mkv"];var dt={name:"UploadFileItem",components:{Link:lt.Link,Delete:lt.Delete},props:{file:{type:Object,required:!0}},emits:["copy","remove","preview-error"],computed:{urlSize(){return window.innerWidth<768?"small":"default"}},methods:{isImage(e){const t=e.split(".").pop().toLowerCase();return nt.includes(t)},isVideo(e){const t=e.split(".").pop().toLowerCase();return rt.includes(t)},truncateFilename(e,t=20){if(!e||e.length<=t)return e;const o=e.lastIndexOf(".");let s,a;o>0?(s=e.substring(0,o),a=e.substring(o)):(s=e,a="");const i=a.length+4,l=t-i-3;return l<=0?e.substring(0,t-3)+"...":s.substring(0,l)+"..."+s.slice(-4)+a},selectAllText(e){navigator.clipboard.writeText(e.target.value).then(()=>{this.$message({type:"success",message:this.$t("uploadForm.copySuccess")})}).catch(()=>{this.$message({type:"error",message:this.$t("uploadForm.copyFailed")})})}}};const ct=(0,V.A)(dt,[["render",it],["__scopeId","data-v-645a7810"]]);var ut=ct,pt=o(62086),ht=(o(40670),o(88830),o(23597),o(70683)),mt=(o(95385),o(47358));const gt={class:"upload-form"},ft={class:"upload-card-glow",ref:"uploadCardGlow"},yt=["innerHTML"],bt={key:0,class:"upload-card"},kt={class:"paste-card-actions"},vt=["aria-label"],Ct=["aria-pressed"],wt=["aria-pressed"],Ft={class:"upload-list-container"},Lt={class:"upload-list-dashboard-action"},Ut={class:"modern-action-group"},$t={class:"modern-dropdown-item-content"},St={class:"modern-action-btn modern-action-btn-danger"};function Tt(e,t,n,r,d,c){const u=He.tk,p=mt.j5,h=G.WK,m=a.S2,g=ht.Ik,f=(0,i.g2)("List"),y=(0,i.g2)("Checked"),b=(0,i.g2)("Failed"),k=Xe.$g,v=(0,i.g2)("font-awesome-icon"),C=s.R7,w=j.qi,F=pt.c6,L=pt.Iy,U=pt.dW,$=ut,S=Be.kA;return(0,i.uX)(),(0,i.CE)("div",gt,[(0,i.Lk)("div",{class:"upload-card-wrapper",onMousemove:t[0]||(t[0]=(...e)=>c.handleUploadCardMouseMove&&c.handleUploadCardMouseMove(...e)),onMouseleave:t[1]||(t[1]=(...e)=>c.handleUploadCardMouseLeave&&c.handleUploadCardMouseLeave(...e))},[(0,i.Lk)("div",ft,null,512),"default"===n.uploadMethod?((0,i.uX)(),(0,i.Wv)(p,{key:0,class:(0,l.C4)(["upload-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}]),drag:"",multiple:"","http-request":c.uploadFile,onSuccess:c.handleSuccess,"on-error":c.handleError,"before-upload":c.beforeUpload,"on-progress":c.handleProgress,"file-list":d.fileList,"show-file-list":!1},{default:(0,i.k6)(()=>[(0,i.bF)(u,{class:(0,l.C4)(["el-icon--upload",{"upload-list-busy":d.fileList.length}])},{default:(0,i.k6)(()=>[...t[9]||(t[9]=[(0,i.Lk)("svg",{class:"upload-plus-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.25","stroke-linecap":"round","aria-hidden":"true"},[(0,i.Lk)("path",{d:"M12 7v10"}),(0,i.Lk)("path",{d:"M7 12h10"})],-1)])]),_:1},8,["class"]),(0,i.Lk)("div",{class:(0,l.C4)(["el-upload__text",{"upload-list-busy":d.fileList.length}]),innerHTML:e.$t("upload.dragUploadText")},null,10,yt)]),_:1},8,["class","http-request","onSuccess","on-error","before-upload","on-progress","file-list"])):(0,i.Q3)("",!0)],32),"paste"===n.uploadMethod?((0,i.uX)(),(0,i.CE)("div",bt,[(0,i.bF)(g,{class:(0,l.C4)(["paste-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}])},{default:(0,i.k6)(()=>[(0,i.bF)(h,{modelValue:d.pastedUrls,"onUpdate:modelValue":t[2]||(t[2]=e=>d.pastedUrls=e),class:"upload-card-textarea",placeholder:e.$t("upload.pasteUrlPlaceholder"),type:"textarea",rows:d.fileList.length?4:14},null,8,["modelValue","placeholder","rows"]),(0,i.Lk)("div",kt,[(0,i.bF)(m,{class:"paste-card-upload-button",type:"primary",size:c.pasteCardMethodButtonSize,onClick:c.handleUploadPasteUrls},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(e.$t("upload.pasteUploadBtn")),1)]),_:1},8,["size","onClick"]),(0,i.Lk)("div",{class:(0,l.C4)(["paste-card-method-group",{"is-external":"external"===d.pasteUploadMethod}]),role:"group","aria-label":e.$t("upload.switchUploadMethod")},[(0,i.Lk)("button",{class:(0,l.C4)(["paste-card-method-button",{"is-active":"save"===d.pasteUploadMethod}]),type:"button","aria-pressed":"save"===d.pasteUploadMethod,onClick:t[3]||(t[3]=e=>d.pasteUploadMethod="save")},(0,l.v_)(e.$t("upload.pasteSave")),11,Ct),(0,i.Lk)("button",{class:(0,l.C4)(["paste-card-method-button",{"is-active":"external"===d.pasteUploadMethod}]),type:"button","aria-pressed":"external"===d.pasteUploadMethod,onClick:t[4]||(t[4]=e=>d.pasteUploadMethod="external")},(0,l.v_)(e.$t("upload.pasteExternal")),11,wt)],10,vt)])]),_:1},8,["class"])])):(0,i.Q3)("",!0),(0,i.bF)(g,{class:(0,l.C4)(["upload-list-card",{"upload-list-busy":d.fileList.length}])},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Ft,[(0,i.bF)(S,{onScroll:c.handleScroll,ref:"scrollContainer"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",{class:(0,l.C4)(["upload-list-dashboard",{"list-scrolled":d.listScrolled}])},[(0,i.bF)(k,{class:"upload-list-dashboard-title"},{default:(0,i.k6)(()=>[(0,i.bF)(u,null,{default:(0,i.k6)(()=>[(0,i.bF)(f)]),_:1}),(0,i.eW)((0,l.v_)(c.uploadingCount+c.waitingCount)+" ",1),(0,i.bF)(u,null,{default:(0,i.k6)(()=>[(0,i.bF)(y)]),_:1}),(0,i.eW)((0,l.v_)(c.uploadSuccessCount)+" ",1),(0,i.bF)(u,null,{default:(0,i.k6)(()=>[(0,i.bF)(b)]),_:1}),(0,i.eW)((0,l.v_)(c.uploadErrorCount),1)]),_:1}),(0,i.Lk)("div",Lt,[(0,i.Lk)("div",Ut,[(0,i.bF)(C,{disabled:c.disableTooltip,content:e.$t("upload.copyAll"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.Lk)("button",{class:"modern-action-btn modern-action-btn-copy",onClick:t[5]||(t[5]=(...e)=>c.copyAll&&c.copyAll(...e))},[(0,i.bF)(v,{icon:"copy"})])]),_:1},8,["disabled","content"]),(0,i.bF)(C,{disabled:c.disableTooltip,content:e.$t("upload.retryFailed"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(U,null,{dropdown:(0,i.k6)(()=>[(0,i.bF)(L,{class:"modern-dropdown-menu"},{default:(0,i.k6)(()=>[(0,i.bF)(F,null,{default:(0,i.k6)(()=>[(0,i.Lk)("div",$t,[(0,i.Lk)("span",null,(0,l.v_)(e.$t("uploadForm.autoRetry")),1),(0,i.bF)(w,{modelValue:d.autoReUpload,"onUpdate:modelValue":t[7]||(t[7]=e=>d.autoReUpload=e),onChange:c.handleAutoRetryChange,size:"small"},null,8,["modelValue","onChange"])])]),_:1})]),_:1})]),default:(0,i.k6)(()=>[(0,i.Lk)("button",{class:"modern-action-btn modern-action-btn-retry",onClick:t[6]||(t[6]=(...e)=>c.retryError&&c.retryError(...e))},[(0,i.bF)(v,{icon:"redo"})])]),_:1})]),_:1},8,["disabled","content"]),(0,i.bF)(C,{disabled:c.disableTooltip,content:e.$t("upload.clearList"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(U,null,{dropdown:(0,i.k6)(()=>[(0,i.bF)(L,{class:"modern-dropdown-menu"},{default:(0,i.k6)(()=>[(0,i.bF)(F,{onClick:c.clearFileList},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(e.$t("upload.clearAll")),1)]),_:1},8,["onClick"]),(0,i.bF)(F,{onClick:c.clearSuccessList},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(e.$t("upload.clearUploaded")),1)]),_:1},8,["onClick"])]),_:1})]),default:(0,i.k6)(()=>[(0,i.Lk)("button",St,[(0,i.bF)(v,{icon:"trash-alt"})])]),_:1})]),_:1},8,["disabled","content"])])])],2),((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(d.fileList.slice().reverse(),e=>((0,i.uX)(),(0,i.Wv)($,{key:e.name,file:e,onCopy:c.handleCopy,onRemove:c.handleRemove,onPreviewError:t[8]||(t[8]=e=>e.url=o(96682))},null,8,["file","onCopy","onRemove"]))),128))]),_:1},8,["onScroll"])])]),_:1},8,["class"])])}o(20116),o(18237),o(79577),o(41549),o(49797),o(49631),o(35623),o(64979);var _t=o(457),xt=o(76334),Mt=o(60782);function At(e,t,o){const s=o+e;return{finalURL:s,mdURL:`![${t}](${s})`,htmlURL:`${t}`,ubbURL:`[img]${s}[/img]`}}function Rt(e,t){const o={url:e.finalURL,md:e.mdURL,html:e.htmlURL,ubb:e.ubbURL};return o[t]||e.finalURL}function Dt(e,t){e.forEach(e=>{if("external"===e.uploadChannel)return;const o=At(e.srcID,e.name,t);Object.assign(e,o)})}const Et=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),It=(e,t)=>e>>>t|e<<32-t;function Nt(e,t){const o=new Uint32Array(64);for(let u=0;u<16;u++)o[u]=e[4*u]<<24|e[4*u+1]<<16|e[4*u+2]<<8|e[4*u+3];for(let u=16;u<64;u++){const e=It(o[u-15],7)^It(o[u-15],18)^o[u-15]>>>3,t=It(o[u-2],17)^It(o[u-2],19)^o[u-2]>>>10;o[u]=o[u-16]+e+o[u-7]+t>>>0}let[s,a,i,l,n,r,d,c]=t;for(let u=0;u<64;u++){const e=It(n,6)^It(n,11)^It(n,25),t=n&r^~n&d,p=c+e+t+Et[u]+o[u]>>>0,h=It(s,2)^It(s,13)^It(s,22),m=s&a^s&i^a&i,g=h+m>>>0;c=d,d=r,r=n,n=l+p>>>0,l=i,i=a,a=s,s=p+g>>>0}t[0]=t[0]+s>>>0,t[1]=t[1]+a>>>0,t[2]=t[2]+i>>>0,t[3]=t[3]+l>>>0,t[4]=t[4]+n>>>0,t[5]=t[5]+r>>>0,t[6]=t[6]+d>>>0,t[7]=t[7]+c>>>0}function Pt(){let e=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),t=new Uint8Array(64),o=0,s=0;return{update(a){s+=a.length;let i=0;if(o>0){const s=64-o,l=Math.min(s,a.length);t.set(a.subarray(0,l),o),o+=l,i=l,64===o&&(Nt(t,e),o=0)}while(i+64<=a.length)Nt(a.subarray(i,i+64),e),i+=64;i56&&(t.fill(0,o,64),Nt(t,e),o=0),t.fill(0,o,56);const i=new DataView(t.buffer);i.setUint32(56,Math.floor(a/4294967296),!1),i.setUint32(60,a>>>0,!1),Nt(t,e);let l="";for(let t=0;t<8;t++)l+=e[t].toString(16).padStart(8,"0");return l}}}async function zt(e){const t=Pt(),o=4194304;let s=0;while(sthis.fileListLength&&this.$nextTick(()=>{setTimeout(()=>{this.$refs.scrollContainer&&this.$refs.scrollContainer.setScrollTop(0)},100)}),this.fileListLength=this.fileList.length},deep:!0},useCustomUrl:{handler(){Dt(this.fileList,this.rootUrl)},immediate:!0},customUrlPrefix:{handler(){"true"===this.useCustomUrl&&Dt(this.fileList,this.rootUrl)},immediate:!0},autoReUpload(e){this.$store.commit("setStoreAutoReUpload",e)}},computed:{...(0,Mt.L8)(["storeAutoReUpload"]),uploadSuccessCount(){return this.fileList.filter(e=>"done"===e.status||"success"===e.status).length},uploadErrorCount(){return this.fileList.filter(e=>"exception"===e.status).length},uploadingCount(){return this.fileList.filter(e=>"uploading"===e.status).length},waitingCount(){return this.uploadQueue.length},urlSize(){return window.innerWidth<768?"small":"default"},disableTooltip(){return window.innerWidth<768},rootUrl(){return"true"===this.useCustomUrl?this.customUrlPrefix:this.urlPrefix||`${window.location.protocol}//${window.location.host}/file/`},pasteCardMethodButtonSize(){return this.fileList.length||window.innerWidth<768?"small":"medium"}},mounted(){document.addEventListener("paste",this.handlePaste),this.autoReUpload=this.storeAutoReUpload},beforeUnmount(){document.removeEventListener("paste",this.handlePaste),this.uploadQueue=[],this.fileList=[],this.activeUploads=0},methods:{truncateFilename(e,t=20){if(!e||e.length<=t)return e;const o=e.lastIndexOf(".");let s,a;o>0?(s=e.substring(0,o),a=e.substring(o)):(s=e,a="");const i=a.length+4,l=t-i-3;return l<=0?e.substring(0,t-3)+"...":s.substring(0,l)+"..."+s.slice(-4)+a},uploadFile(e){if(!this.fileList.find(t=>t.uid===e.file.uid))return;if(this.activeUploads>=this.maxConcurrentUploads){this.uploadQueue.push(e);const t=this.fileList.find(t=>t.uid===e.file.uid);return void(t&&(t.status="waiting"))}this.activeUploads++;const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.status="uploading");const o=this.fileList.find(t=>t.uid===e.file.uid),s=o?.uploadChannel||this.uploadChannel;if("external"===s)return void this.uploadSingleFile(e);if("huggingface"===s){const t=20971520;return void(e.file.size>=t?this.uploadToHuggingFaceDirect(e):this.uploadSingleFile(e))}if("discord"===s){const t=9437184;return void(e.file.size>t?this.uploadFileInChunks(e):this.uploadSingleFile(e))}const a=20971520;e.file.size>a?this.uploadFileInChunks(e):this.uploadSingleFile(e)},processUploadQueue(){if(0===this.uploadQueue.length||this.activeUploads>=this.maxConcurrentUploads)return;const e=this.uploadQueue.shift();e&&this.fileList.find(t=>t.uid===e.file.uid)?this.uploadFile(e):this.processUploadQueue()},onUploadComplete(){this.activeUploads=Math.max(0,this.activeUploads-1),this.processUploadQueue(),0===this.activeUploads&&0===this.uploadQueue.length&&(this.uploading=!1)},async uploadSingleFile(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=t.serverCompress,s=t.uploadChannel||this.uploadChannel,a=this.autoRetry&&"external"!==s,i="external"===s?"default":this.uploadNameType,l=new AbortController;this.abortControllers.set(e.file.uid,l);const n=new FormData;if(n.append("file",e.file),"external"===s&&n.append("url",e.file.url),"huggingface"===s)try{console.log("Computing SHA256 for HuggingFace upload...");const t=await zt(e.file);n.append("sha256",t),console.log("SHA256 computed:",t)}catch(r){console.error("Failed to compute SHA256:",r)}(0,_t.A)({url:"/upload?serverCompress="+o+"&uploadChannel="+s+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+i+"&autoRetry="+a+"&uploadFolder="+encodeURIComponent(this.uploadFolder),method:"post",data:n,withAuthCode:!0,signal:l.signal,onUploadProgress:t=>{const o=Math.round(t.loaded/t.total*100);e.onProgress({percent:o,file:e.file})}}).then(t=>{e.onSuccess(t,e.file)}).catch(t=>{"CanceledError"!==t.name&&"ERR_CANCELED"!==t.code?t.response&&401!==t.response.status?(this.exceptionList.push(e),e.onError(t,e.file)):t.response||(this.exceptionList.push(e),e.onError(t,e.file)):console.log("上传已取消:",e.file.name)}).finally(()=>{this.abortControllers.delete(e.file.uid),this.onUploadComplete()})},async uploadFileInChunks(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=t.uploadChannel||this.uploadChannel,s=new AbortController;this.abortControllers.set(e.file.uid,s);const a="discord"===o?9437184:16777216,i=e.file.size,l=e.file.type||"application/octet-stream",n=Math.ceil(i/a),r=t.serverCompress,d=this.autoRetry&&"external"!==o,c="external"===o?"default":this.uploadNameType;let u=null;if("huggingface"===o)try{console.log("Computing SHA256 for HuggingFace chunked upload..."),u=await zt(e.file),console.log("SHA256 computed:",u)}catch(p){console.error("Failed to compute SHA256:",p)}try{const t=new FormData;t.append("originalFileName",e.file.name),t.append("originalFileType",l),t.append("totalChunks",n.toString());const h=await(0,_t.A)({url:"/upload?serverCompress="+r+"&uploadChannel="+o+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+c+"&autoRetry="+d+"&uploadFolder="+encodeURIComponent(this.uploadFolder)+"&initChunked=true",method:"post",data:t,withAuthCode:!0});if(!h.data.success)throw new Error(this.$t("uploadForm.chunkInitFailed")+": "+h.data.message);const m=h.data.uploadId;console.log("分块上传初始化成功,uploadId:",m);const g=this.fileList.find(t=>t.uid===e.file.uid);g&&(g.totalChunks=n,g.uploadId=m);const f=3,y=new Array(n).fill(0);let b=0,k=!1,v="",C=!1;const w=async t=>{if(k||C)return;const u=t*a,h=Math.min(u+a,i),g=e.file.slice(u,h),f=new FormData;f.append("file",g,`${e.file.name}.part${t.toString().padStart(3,"0")}`),f.append("chunkIndex",t.toString()),f.append("totalChunks",n.toString()),f.append("uploadId",m),f.append("originalFileName",e.file.name),f.append("originalFileType",l);let b=0;const w=3;while(b{if(k||C)return;const s=Math.round(o.loaded/o.total*100);y[t]=s;const a=Math.round(y.reduce((e,t)=>e+t,0)/n);e.onProgress({percent:a,file:e.file})}})}catch(p){if("CanceledError"===p.name||"ERR_CANCELED"===p.code)return C=!0,void console.log("分块上传已取消:",e.file.name);if(b++,console.warn(`分块 ${t+1}/${n} 上传失败 (重试 ${b}/${w}):`,p),b>=w)throw k=!0,v=`分块 ${t+1}/${n} 上传失败: ${p.message}`,new Error(v);await new Promise(e=>setTimeout(e,2e3*b))}}},F=[];for(let e=0;e{while(bt.uid===e.file.uid);t&&t.uploadId&&this.cleanupUploadResources(t.uploadId,t.totalChunks).then(()=>{console.log(`已清理分块上传失败的资源: ${t.uploadId}`)}).catch(e=>{console.warn("清理分块上传失败资源时出错:",e)}),p.response&&401!==p.response.status?(this.exceptionList.push(e),e.onError(p,e.file)):p.response||(this.exceptionList.push(e),e.onError(p,e.file))}finally{this.abortControllers.delete(e.file.uid),this.onUploadComplete()}},handleRemove(e){this.abortControllers.has(e.uid)&&(this.abortControllers.get(e.uid).abort(),this.abortControllers.delete(e.uid)),this.uploadQueue=this.uploadQueue.filter(t=>t.file.uid!==e.uid),this.fileList=this.fileList.filter(t=>t.uid!==e.uid),this.$message({type:"info",message:this.$t("uploadForm.deleted",{name:this.truncateFilename(e.name)})})},async cleanupUploadResources(e,t=0){try{await(0,_t.A)({url:`/upload?cleanup=true&uploadId=${e}&totalChunks=${t}`,method:"get",withAuthCode:!0,timeout:5e3}),console.log(`清理上传资源成功: ${e}`)}catch(o){console.warn("清理上传资源失败:",o)}},handleSuccess(e,t){const o=this.fileList.find(e=>e.uid===t.uid);if(o)try{const s=o.uploadChannel||this.uploadChannel;if("external"!==s){const s=e.data[0].src.replace("/file/","");o.url=`${window.location.protocol}//${window.location.host}/file/`+s;const a=At(s,t.name,this.rootUrl);Object.assign(o,a),o.srcID=s}o.progreess=100,o.status="success",this.saveToHistory(o),this.$message({type:"success",message:this.$t("uploadForm.uploadSuccess",{name:this.truncateFilename(t.name)})}),setTimeout(()=>{const e=this.fileList.find(e=>e.uid===t.uid);e&&(e.status="done")},1e3)}catch(s){this.$message.error(this.$t("uploadForm.uploadFailed",{name:this.truncateFilename(t.name)})),o.status="exception"}},saveToHistory(e){try{const t=JSON.parse(localStorage.getItem("uploadHistory")||"[]"),o={name:e.name,url:e.finalURL,time:Date.now(),type:e.name.split(".").pop().toLowerCase()};t.push(o),localStorage.setItem("uploadHistory",JSON.stringify(t))}catch(t){console.error("Failed to save history",t)}},handleError(e,t){const o=this.fileList.find(e=>e.uid===t.uid);o&&(this.$message.error(this.$t("uploadForm.uploadFailed",{name:this.truncateFilename(t.name)})),o.status="exception",this.autoReUpload&&this.scheduleAutoRetry())},handleCopy(e){const t=this.fileList.find(t=>t.uid===e.uid).status;"done"===t||"success"===t?(navigator.clipboard.writeText(Rt(e,this.selectedUrlForm)),this.$message({type:"success",message:this.$t("uploadForm.copySuccess")})):this.$message({type:"warning",message:this.$t("uploadForm.fileNotUploaded")})},beforeUpload(e){return new Promise(async(t,o)=>{let s=e;const a=this.convertToWebp&&e.type.includes("image")&&!e.type.includes("webp")&&!e.type.includes("gif")&&!e.type.includes("svg");if(a)try{const t=await this.convertImageToWebp(e);t&&(s=t,console.log(`WebP转换成功: ${e.name} -> ${t.name}, 大小: ${(e.size/1024).toFixed(1)}KB -> ${(t.size/1024).toFixed(1)}KB`))}catch(r){console.warn("WebP转换失败,使用原文件:",r)}const i=s.type.includes("image")&&this.customerCompress&&s.size/1024/1024>this.compressBar,l=s.size/1024/1024<=1024||"telegram"!==this.uploadChannel,n=(e,o)=>{const s=URL.createObjectURL(e);this.fileList.push({uid:e.uid,name:e.name,url:s,finalURL:"",mdURL:"",htmlURL:"",ubbURL:"",srcID:"",status:"uploading",progreess:0,serverCompress:o,retryCount:0}),t(e)};if(i)xt.compressAccurately(s,1024*this.compressQuality).then(t=>{t.size/1024/1024>1024&&"telegram"===this.uploadChannel&&(this.$message.error(this.$t("uploadForm.compressedFileTooLarge",{name:s.name})),o(this.$t("uploadForm.fileSizeTooLarge"))),this.uploading=!0;const a=new File([t],s.name,{type:t.type});a.uid=e.uid;const i=this.uploadCount++,l=this.serverCompress&&a.size/1024/1024<10&&"telegram"===this.uploadChannel;0===i?n(a,l):setTimeout(()=>{n(a,l),this.uploadCount--},300*i)}).catch(e=>{this.$message.error(this.$t("uploadForm.compressFailedCannotUpload",{name:s.name})),o(e)});else if(l){this.uploading=!0;const e=this.uploadCount++,t="telegram"===this.uploadChannel&&this.serverCompress&&(!s.type.includes("image")||s.size/1024/1024<10);0===e?n(s,t):setTimeout(()=>{n(s,t),this.uploadCount--},300*e)}else this.$message.error(this.$t("uploadForm.fileTooLarge",{name:s.name})),o(this.$t("uploadForm.fileSizeTooLarge"))})},handleProgress(e){const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.progreess=e.percent)},copyAll(){const e=this.fileList.filter(e=>"done"===e.status||"success"===e.status).map(e=>Rt(e,this.selectedUrlForm)).join("\n");navigator.clipboard.writeText(e),this.$message({type:"success",message:this.$t("uploadForm.copyAllSuccess")})},clearFileList(){this.fileList.length>0?(this.abortControllers.forEach((e,t)=>{e.abort()}),this.abortControllers.clear(),this.uploadQueue=[],this.fileList=[],this.$message({type:"success",message:this.$t("uploadForm.fileListCleared")})):this.$message({type:"info",message:this.$t("uploadForm.fileListEmpty")})},clearSuccessList(){this.uploadSuccessCount>0?(this.fileList=this.fileList.filter(e=>"done"!==e.status&&"success"!==e.status),this.$message({type:"success",message:this.$t("uploadForm.successFilesCleared")})):this.$message({type:"info",message:this.$t("uploadForm.successFilesEmpty")})},handlePaste(e){if("INPUT"===e.target.tagName||"TEXTAREA"===e.target.tagName)return;const t=e.clipboardData.items;t.length>0&&this.uploadFromUrl(t)},handleUploadPasteUrls(){const e=this.pastedUrls.split("\n"),t=e.map(e=>e.trim()).filter(e=>""!==e).filter(e=>/^(https?:\/\/[^\s$.?#].[^\s]*)$/.test(e));if("save"===this.pasteUploadMethod)this.uploadFromUrl(t.map(e=>({kind:"string",getAsString:t=>{t(e)}})));else if("external"===this.pasteUploadMethod)for(let o=0;o`,l=`[img]${e}[/img]`,n=new File([],e.split("/").pop(),{type:"text/plain"});n.uid=Date.now()+o,n.url=e,this.fileList.push({uid:n.uid,name:n.name,url:e,finalURL:e,mdURL:a,htmlURL:i,ubbURL:l,srcID:e,status:"uploading",progreess:0,serverCompress:!1,uploadChannel:"external",retryCount:0}),this.uploadFile({file:n,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}},uploadFromUrl(e){for(let t=0;t{e instanceof File&&this.uploadFile({file:e,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}).catch(e=>{console.log(e)})}else"string"===e[t].kind&&e[t].getAsString(e=>{const o=/^(https?:\/\/[^\s$.?#].[^\s]*)$/;let s="";o.test(e)&&_t.A.post("/api/fetchRes",{url:e},{responseType:"blob",withAuthCode:!0}).then(o=>{o.headers["content-type"];if(200!=o.status)throw new Error("URL地址请求失败");{const i=o.headers["content-disposition"];if(i){const e=/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/,t=/filename\*\s*=\s*UTF-8''([^;\n]*)/;let o=e.exec(i);if(null!=o&&o[1]){s=o[1].replace(/['"]/g,"");try{s=decodeURIComponent(s)}catch(a){s=""}}""===s&&(o=t.exec(i),null!=o&&o[1]&&(s=decodeURIComponent(o[1])))}if(""===s){const t=new URL(e);s=t.pathname.split("/").pop()}if(""===s){const o=new URL(e);let a=o.pathname.split(".").pop();(!a||""===a||a.length>10)&&(a="bin"),s="PastedFile"+Date.now()+t+"."+a}const l=o.data,n=new File([l],s,{type:l.type});n.uid=Date.now()+t;const r=this.beforeUpload(n);r instanceof Promise&&r.then(e=>{e instanceof File&&this.uploadFile({file:e,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}).catch(e=>{console.log(e)})}}).catch(e=>{this.$message({type:"warning",message:this.$t("uploadForm.urlRequestFailed")})})})},handleScroll(e){this.listScrolled=e.scrollTop>0&&this.fileList.length>0},retryError(){this.exceptionList.length>0?(this.retryFailedFiles(this.exceptionList),this.exceptionList=[]):this.$message({type:"info",message:this.$t("uploadForm.noFailedFiles")})},handleAutoRetryChange(e){this.$message({type:e?"success":"info",message:e?this.$t("uploadForm.autoRetryOn"):this.$t("uploadForm.autoRetryOff")}),e&&this.exceptionList.length>0&&this.scheduleAutoRetry()},retryFailedFiles(e){e.forEach(e=>{const t=e.retryCount||0;tthis.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})):this.$message({type:"warning",message:this.$t("uploadForm.maxRetryReached",{name:e.name,max:this.maxRetryCount})})})},scheduleAutoRetry(){this.retryTimer&&clearTimeout(this.retryTimer),this.retryTimer=setTimeout(()=>{if(this.autoReUpload&&this.exceptionList.length>0){const e=[...this.exceptionList];this.exceptionList=[],this.retryFailedFiles(e)}},this.retryDelay)},async uploadToHuggingFaceDirect(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=new AbortController;this.abortControllers.set(e.file.uid,o);try{console.log("=== HuggingFace Direct Upload ==="),console.log("File:",e.file.name,"Size:",e.file.size),e.onProgress({percent:5,file:e.file}),console.log("Computing SHA256...");const t=await zt(e.file);if(console.log("SHA256:",t),o.signal.aborted)return void console.log("HuggingFace 上传已取消:",e.file.name);const s=new Uint8Array(await e.file.slice(0,512).arrayBuffer()),a=btoa(String.fromCharCode(...s));e.onProgress({percent:10,file:e.file}),console.log("Getting LFS upload URL...");const i=await(0,_t.A)({url:"/upload/huggingface/getUploadUrl",method:"post",data:{fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,sha256:t,fileSample:a,channelName:this.channelName,uploadNameType:this.uploadNameType,uploadFolder:this.uploadFolder},withAuthCode:!0,signal:o.signal});if(!i.data.success)throw new Error(i.data.error||"Failed to get upload URL");const l=i.data;if(console.log("Upload info:",l),l.alreadyExists)console.log("File already exists in LFS, skipping upload"),e.onProgress({percent:90,file:e.file});else if(l.needsLfs&&l.uploadAction){const{href:t,header:s}=l.uploadAction;if(s?.chunk_size)await this.uploadToHuggingFaceMultipart(e,l,o);else{console.log("Uploading to S3 (basic)...");const a=await fetch(t,{method:"PUT",headers:s||{},body:e.file,signal:o.signal});if(!a.ok){const e=await a.text();throw new Error(`S3 upload failed: ${a.status} - ${e}`)}console.log("S3 upload complete")}}if(o.signal.aborted)return void console.log("HuggingFace 上传已取消:",e.file.name);e.onProgress({percent:95,file:e.file}),console.log("Committing file...");const n=await(0,_t.A)({url:"/upload/huggingface/commitUpload",method:"post",data:{fullId:l.fullId,filePath:l.filePath,sha256:t,fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,channelName:l.channelName},withAuthCode:!0,signal:o.signal});if(!n.data.success)throw new Error(n.data.error||"Failed to commit file");console.log("Upload complete:",n.data);const r={data:[{src:n.data.src}]};e.onSuccess(r,e.file)}catch(s){if("CanceledError"===s.name||"ERR_CANCELED"===s.code||"AbortError"===s.name)return void console.log("HuggingFace 上传已取消:",e.file.name);console.error("HuggingFace direct upload error:",s),this.exceptionList.push(e),e.onError(s,e.file)}finally{this.abortControllers.delete(e.file.uid),this.onUploadComplete()}},async uploadToHuggingFaceMultipart(e,t,o){const{uploadAction:s}=t,{href:a,header:i}=s,l=parseInt(i.chunk_size),n=Object.keys(i).filter(e=>/^[0-9]+$/.test(e));console.log(`Multipart upload: ${n.length} parts, chunk size: ${l}`);const r=[],d=n.length;for(const u of n){if(o&&o.signal.aborted)throw console.log("HuggingFace 分片上传已取消"),new DOMException("Upload cancelled","AbortError");const t=parseInt(u)-1,s=t*l,a=Math.min(s+l,e.file.size),n=e.file.slice(s,a);console.log(`Uploading part ${u}/${d}`);const c=await fetch(i[u],{method:"PUT",body:n,signal:o?o.signal:void 0});if(!c.ok)throw new Error(`Failed to upload part ${u}: ${c.status}`);const p=c.headers.get("ETag");if(!p)throw new Error(`No ETag for part ${u}`);r.push({partNumber:parseInt(u),etag:p});const h=10+Math.round(parseInt(u)/d*80);e.onProgress({percent:h,file:e.file})}if(o&&o.signal.aborted)throw console.log("HuggingFace 分片上传已取消"),new DOMException("Upload cancelled","AbortError");console.log("Completing multipart upload...");const c=await fetch(a,{method:"POST",headers:{Accept:"application/vnd.git-lfs+json","Content-Type":"application/vnd.git-lfs+json"},body:JSON.stringify({oid:t.oid,parts:r}),signal:o?o.signal:void 0});if(!c.ok){const e=await c.text();throw new Error(`Multipart complete failed: ${c.status} - ${e}`)}console.log("Multipart upload complete")},async convertImageToWebp(e){return new Promise((t,o)=>{if(e.type.includes("gif")||e.type.includes("svg")||e.type.includes("webp"))return void t(null);const s=new Image,a=document.createElement("canvas"),i=a.getContext("2d");s.onload=()=>{a.width=s.width,a.height=s.height,i.drawImage(s,0,0),a.toBlob(a=>{if(a){const o=e.name,s=o.lastIndexOf("."),i=s>0?o.substring(0,s)+".webp":o+".webp",l=new File([a],i,{type:"image/webp"});l.uid=e.uid,t(l)}else o(new Error("WebP 转换失败"));URL.revokeObjectURL(s.src)},"image/webp",.92)},s.onerror=()=>{URL.revokeObjectURL(s.src),o(new Error(this.$t("uploadForm.imageLoadFailed")))},s.src=URL.createObjectURL(e)})},handleUploadCardMouseMove(e){const t=this.$refs.uploadCardGlow;if(!t)return;const o=e.currentTarget.getBoundingClientRect(),s=e.clientX-o.left,a=e.clientY-o.top;t.style.opacity="1",t.style.left=s+"px",t.style.top=a+"px"},handleUploadCardMouseLeave(){const e=this.$refs.uploadCardGlow;e&&(e.style.opacity="0")}},beforeDestroy(){this.retryTimer&&clearTimeout(this.retryTimer)}};const Vt=(0,V.A)(Wt,[["render",Tt],["__scopeId","data-v-a099cfac"]]);var Bt=Vt,Ht=o(732),Qt=o(33892),Xt=o(45130);const qt={class:"directory-suggestion-input",ref:"wrapperRef"},Ot={class:"suggestion-dropdown"},jt={class:"suggestion-list"},Gt=["title","onMousedown"];function Kt(e,t,o,s,a,n){const r=G.WK;return(0,i.uX)(),(0,i.CE)("div",qt,[(0,i.bF)(r,{ref:"inputRef",modelValue:n.inputValue,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputValue=e),placeholder:o.placeholder,onFocus:n.handleFocus,onBlur:n.handleBlur,onInput:n.handleInput},null,8,["modelValue","placeholder","onFocus","onBlur","onInput"]),(0,i.bo)((0,i.Lk)("div",Ot,[(0,i.Lk)("ul",jt,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(a.suggestions,(e,t)=>((0,i.uX)(),(0,i.CE)("li",{key:t,class:"suggestion-item",title:e.value,onMousedown:(0,Xt.D$)(t=>n.selectItem(e),["prevent"])},(0,l.v_)(e.value),41,Gt))),128))])],512),[[Xt.aG,a.dropdownVisible&&a.suggestions.length>0]])],512)}var Jt={name:"DirectorySuggestionInput",props:{modelValue:{type:String,default:""},placeholder:{type:String,default:""}},emits:["update:modelValue","focus","blur","select"],data(){return{directoryTreeRoot:null,directoryTreeLoaded:!1,directoryTreeLoading:!1,directoryChildrenMap:{},focusTime:null,dropdownVisible:!1,isFocused:!1,suggestions:[]}},computed:{inputValue:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}},watch:{modelValue(){this.isFocused&&this.refreshSuggestions()}},methods:{handleFocus(){this.isFocused=!0,this.focusTime=Date.now(),this.ensureDirectoryTreeLoaded(),this.$emit("focus"),setTimeout(()=>{this.isFocused&&(this.refreshSuggestions(),this.dropdownVisible=!0)},500)},handleBlur(){this.isFocused=!1,this.dropdownVisible=!1,this.$emit("blur")},handleInput(e){this.$nextTick(()=>{this.refreshSuggestions(),this.isFocused&&(this.dropdownVisible=!0)})},selectItem(e){const t=e.value;this.inputValue=t,this.$emit("select",t);const o=this.normalizeDirectoryPath(t),s=this.directoryChildrenMap[o];s&&s.length>0?this.$nextTick(()=>{this.refreshSuggestions(),this.dropdownVisible=!0,this.$refs.inputRef?.focus()}):this.dropdownVisible=!1},refreshSuggestions(){this.suggestions=this.getDirectorySuggestions(this.modelValue||"")},normalizeDirectoryPath(e){if(!e)return"/";let t=e;return t.startsWith("/")||(t="/"+t),"/"===t||t.endsWith("/")||(t+="/"),t},buildDirectoryChildrenMap(e){const t={},o=e=>{const s=this.normalizeDirectoryPath(e.path),a=Array.isArray(e.children)?e.children:[];t[s]=a.map(e=>({name:e.name,path:this.normalizeDirectoryPath(e.path)})),a.forEach(o)};o(e),this.directoryChildrenMap=t},async ensureDirectoryTreeLoaded(){if(!this.directoryTreeLoaded&&!this.directoryTreeLoading){this.directoryTreeLoading=!0;try{const e=await _t.A.get("/api/directoryTree",{withAuthCode:!0}),t=e?.data?.tree;t&&(this.directoryTreeRoot=t,this.buildDirectoryChildrenMap(t),this.directoryTreeLoaded=!0)}catch(e){console.error("Failed to load directory tree for autocomplete:",e)}finally{this.directoryTreeLoading=!1}}},parseDirectoryQuery(e){const t=e&&e.startsWith("/")?e:`/${e||""}`,o=t.slice(1),s=o.split("/"),a=s[s.length-1]||"",i=s.slice(0,-1).filter(Boolean),l=i.length>0?`/${i.join("/")}/`:"/";return{segmentInput:a,parentPath:l}},getDirectorySuggestions(e){const{segmentInput:t,parentPath:o}=this.parseDirectoryQuery(e),s=this.directoryChildrenMap[o]||[];if(!t)return s.slice(0,10).map(e=>({value:e.path}));const a=t.toLowerCase();return s.filter(e=>e.name.toLowerCase().startsWith(a)).slice(0,10).map(e=>({value:e.path}))}}};const Yt=(0,V.A)(Jt,[["render",Kt],["__scopeId","data-v-28b8eda7"]]);var Zt=Yt,eo=o(17879);const to={class:"container"},oo={class:"upload-home"},so={class:"quick-toolbar-actions"},ao={class:"quick-toolbar-actions-inner"},io={class:"header"},lo={class:"title"},no={class:"title-crayon-text","aria-hidden":"true"},ro={class:"main-title",href:"https://github.com/MarSeventh/CloudFlare-ImgBed",target:"_blank"},co={class:"dialog-section"},uo={class:"section-header"},po={class:"section-title"},ho={class:"section-content"},mo={class:"dialog-section"},go={class:"section-header"},fo={class:"section-title"},yo={class:"section-content"},bo={class:"setting-item"},ko={class:"setting-label"},vo={key:0,class:"setting-item"},Co={class:"setting-label"},wo={class:"dialog-action"},Fo=["innerHTML"],Lo={class:"dialog-footer"};function Uo(e,t,o,n,r,d){const c=eo.A,u=(0,i.g2)("font-awesome-icon"),p=a.S2,h=pt.c6,m=pt.Iy,g=pt.dW,f=Zt,y=G.WK,b=Qt.A,k=s.R7,v=Ht.A,C=Bt,w=J.ll,F=J.MQ,L=j.qi,U=X.kZ,$=Ve,S=Q.A,T=H;return(0,i.uX)(),(0,i.CE)("div",to,[(0,i.Lk)("div",oo,[(0,i.bF)(c,{class:"toggle-dark-button desktop-only"}),(0,i.bF)(g,{class:"more-dropdown desktop-only",trigger:"click",onCommand:d.handleDesktopMenuCommand},{dropdown:(0,i.k6)(()=>[(0,i.bF)(m,null,{default:(0,i.k6)(()=>[(0,i.bF)(h,{command:"showHistory"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)(e.$t("upload.history")),1)]),_:1}),(0,i.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,i.bF)(h,{command:"toggleLanguage"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,i.bF)(h,{command:"viewDocs"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"more-button"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,i.Lk)("div",{class:(0,l.C4)(["upload-folder-container",{"no-announcement":!d.announcementAvailable}])},[(0,i.Lk)("div",{class:(0,l.C4)(["upload-folder",{active:r.isFolderInputActive}])},[d.showDirectorySuggestions?((0,i.uX)(),(0,i.Wv)(f,{key:0,modelValue:r.uploadFolder,"onUpdate:modelValue":t[0]||(t[0]=e=>r.uploadFolder=e),class:"inner-folder-input",placeholder:e.$t("upload.folderPlaceholder"),onFocus:d.handleFolderInputFocus,onBlur:d.handleFolderInputBlur,onSelect:d.handleDirectorySelect},null,8,["modelValue","placeholder","onFocus","onBlur","onSelect"])):((0,i.uX)(),(0,i.Wv)(y,{key:1,class:"inner-folder-input",modelValue:r.uploadFolder,"onUpdate:modelValue":t[1]||(t[1]=e=>r.uploadFolder=e),placeholder:e.$t("upload.folderPlaceholder"),onFocus:d.handleFolderInputFocus,onBlur:d.handleFolderInputBlur},null,8,["modelValue","placeholder","onFocus","onBlur"]))],2),d.showDirectorySuggestions?((0,i.uX)(),(0,i.Wv)(b,{key:0,"current-directory":r.uploadFolder,source:"upload",onSelect:d.handleDirectorySelect},{trigger:(0,i.k6)(()=>[(0,i.bF)(p,{class:"directory-tree-trigger"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"folder-tree"})]),_:1})]),_:1},8,["current-directory","onSelect"])):(0,i.Q3)("",!0)],2),(0,i.bF)(k,{content:e.$t("upload.switchUploadMethod"),placement:"bottom",disabled:d.disableTooltip,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"upload-method-button desktop-only",onClick:d.handleChangeUploadMethod},{default:(0,i.k6)(()=>["default"===r.uploadMethod?((0,i.uX)(),(0,i.Wv)(u,{key:0,icon:"folder-open",class:"upload-method-icon",size:"lg"})):"paste"===r.uploadMethod?((0,i.uX)(),(0,i.Wv)(u,{key:1,icon:"paste",class:"upload-method-icon",size:"lg"})):(0,i.Q3)("",!0)]),_:1},8,["onClick"])]),_:1},8,["content","disabled"]),(0,i.bF)(g,{class:"mobile-more-dropdown mobile-only",trigger:"click",onCommand:d.handleMobileMenuCommand},{dropdown:(0,i.k6)(()=>[(0,i.bF)(m,null,{default:(0,i.k6)(()=>[(0,i.bF)(h,{command:"toggleTheme"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:d.getThemeIcon(),style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,i.eW)(" "+(0,l.v_)(d.getThemeText()),1)]),_:1}),(0,i.bF)(h,{command:"toggleUploadMethod"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"default"===r.uploadMethod?"paste":"folder-open",style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,i.eW)(" "+(0,l.v_)("default"===r.uploadMethod?e.$t("upload.pasteUpload"):e.$t("upload.fileUpload")),1)]),_:1}),(0,i.bF)(h,{command:"showHistory"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)(e.$t("upload.history")),1)]),_:1}),(0,i.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,i.bF)(h,{command:"toggleLanguage"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,i.bF)(h,{command:"viewDocs"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"mobile-more-button"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,i.Lk)("div",{class:(0,l.C4)(["quick-toolbar",{"is-expanded":r.isQuickToolbarOpen}]),onMouseleave:t[5]||(t[5]=(...e)=>d.handleQuickToolbarLeave&&d.handleQuickToolbarLeave(...e))},[(0,i.Lk)("div",so,[(0,i.Lk)("div",ao,[(0,i.bF)(k,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.logout"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:t[2]||(t[2]=e=>d.handleQuickToolbarCommand("logout"))},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"sign-out-alt",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,i.bF)(k,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.manage"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:t[3]||(t[3]=e=>d.handleQuickToolbarCommand("manage"))},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"cog",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,i.bF)(k,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.linkFormat"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:t[4]||(t[4]=e=>d.handleQuickToolbarCommand("linkFormat"))},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"link",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"])])]),(0,i.bF)(k,{disabled:d.disableTooltip,content:e.$t("upload.settings"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:d.openCompressDialog},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"cloud-upload",class:"quick-toolbar-icon"})]),_:1},8,["onClick"])]),_:1},8,["disabled","content"]),(0,i.bF)(p,{class:(0,l.C4)(["quick-toolbar-button quick-toolbar-more",{"is-active":r.isQuickToolbarOpen}]),"aria-expanded":r.isQuickToolbarOpen,onMouseenter:d.handleQuickToolbarMoreEnter,onClick:d.toggleQuickToolbar},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"chevron-down",class:"quick-toolbar-icon quick-toolbar-toggle-icon"})]),_:1},8,["class","aria-expanded","onMouseenter","onClick"])],34),(0,i.bF)(v,{useConfigLink:!0}),(0,i.Lk)("div",io,[(0,i.Lk)("h1",lo,[(0,i.Lk)("span",no,(0,l.v_)(d.ownerName)+" ImgHub",1),(0,i.Lk)("a",ro,(0,l.v_)(d.ownerName),1),t[24]||(t[24]=(0,i.eW)(" ImgHub ",-1))])]),(0,i.bF)(C,{selectedUrlForm:r.selectedUrlForm,customerCompress:r.customerCompress,compressQuality:r.compressQuality,compressBar:r.compressBar,serverCompress:r.serverCompress,uploadChannel:r.uploadChannel,channelName:r.channelName,uploadNameType:r.uploadNameType,useCustomUrl:r.useCustomUrl,customUrlPrefix:r.customUrlPrefix,autoRetry:r.autoRetry,urlPrefix:d.urlPrefix,uploadMethod:r.uploadMethod,uploadFolder:r.uploadFolder,convertToWebp:r.convertToWebp,class:"upload"},null,8,["selectedUrlForm","customerCompress","compressQuality","compressBar","serverCompress","uploadChannel","channelName","uploadNameType","useCustomUrl","customUrlPrefix","autoRetry","urlPrefix","uploadMethod","uploadFolder","convertToWebp"]),(0,i.bF)(U,{title:e.$t("settings.linkFormatTitle"),modelValue:r.showUrlDialog,"onUpdate:modelValue":t[10]||(t[10]=e=>r.showUrlDialog=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog settings-dialog-scope"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",co,[(0,i.Lk)("div",uo,[(0,i.Lk)("span",po,(0,l.v_)(e.$t("settings.defaultCopyLink")),1)]),(0,i.Lk)("div",ho,[(0,i.bF)(F,{modelValue:r.selectedUrlForm,"onUpdate:modelValue":t[6]||(t[6]=e=>r.selectedUrlForm=e),onChange:d.changeUrlForm,class:"radio-card-group grid-2x2"},{default:(0,i.k6)(()=>[(0,i.bF)(w,{value:"url",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"link",class:"radio-icon"}),(0,i.Lk)("span",null,(0,l.v_)(e.$t("settings.rawLink")),1)]),_:1}),(0,i.bF)(w,{value:"md",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"code",class:"radio-icon"}),t[25]||(t[25]=(0,i.Lk)("span",null,"MarkDown",-1))]),_:1}),(0,i.bF)(w,{value:"html",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[26]||(t[26]=(0,i.Lk)("span",null,"HTML",-1))]),_:1}),(0,i.bF)(w,{value:"ubb",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[27]||(t[27]=(0,i.Lk)("span",null,"BBCode",-1))]),_:1})]),_:1},8,["modelValue","onChange"])])]),(0,i.Lk)("div",mo,[(0,i.Lk)("div",go,[(0,i.Lk)("span",fo,(0,l.v_)(e.$t("settings.customLink")),1),(0,i.bF)(k,{content:e.$t("settings.customLinkTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",yo,[(0,i.Lk)("div",bo,[(0,i.Lk)("span",ko,(0,l.v_)(e.$t("settings.enableCustom")),1),(0,i.bF)(L,{modelValue:r.useCustomUrl,"onUpdate:modelValue":t[7]||(t[7]=e=>r.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===r.useCustomUrl?((0,i.uX)(),(0,i.CE)("div",vo,[(0,i.Lk)("span",Co,(0,l.v_)(e.$t("settings.customPrefix")),1),(0,i.bF)(y,{modelValue:r.customUrlPrefix,"onUpdate:modelValue":t[8]||(t[8]=e=>r.customUrlPrefix=e),placeholder:e.$t("settings.customPrefixPlaceholder"),class:"setting-input"},null,8,["modelValue","placeholder"])])):(0,i.Q3)("",!0)])]),(0,i.Lk)("div",wo,[(0,i.bF)(p,{type:"primary",onClick:t[9]||(t[9]=e=>r.showUrlDialog=!1),class:"confirm-btn"},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(e.$t("settings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"]),(0,i.bF)($,{modelValue:r.showCompressDialog,"onUpdate:modelValue":t[11]||(t[11]=e=>r.showCompressDialog=e),uploadChannel:r.uploadChannel,"onUpdate:uploadChannel":t[12]||(t[12]=e=>r.uploadChannel=e),channelName:r.channelName,"onUpdate:channelName":t[13]||(t[13]=e=>r.channelName=e),currentChannelList:d.currentChannelList,uploadFolder:r.uploadFolder,"onUpdate:uploadFolder":t[14]||(t[14]=e=>r.uploadFolder=e),autoRetry:r.autoRetry,"onUpdate:autoRetry":t[15]||(t[15]=e=>r.autoRetry=e),uploadNameType:r.uploadNameType,"onUpdate:uploadNameType":t[16]||(t[16]=e=>r.uploadNameType=e),convertToWebp:r.convertToWebp,"onUpdate:convertToWebp":t[17]||(t[17]=e=>r.convertToWebp=e),customerCompress:r.customerCompress,"onUpdate:customerCompress":t[18]||(t[18]=e=>r.customerCompress=e),compressBar:r.compressBar,"onUpdate:compressBar":t[19]||(t[19]=e=>r.compressBar=e),compressQuality:r.compressQuality,"onUpdate:compressQuality":t[20]||(t[20]=e=>r.compressQuality=e),serverCompress:r.serverCompress,"onUpdate:serverCompress":t[21]||(t[21]=e=>r.serverCompress=e)},null,8,["modelValue","uploadChannel","channelName","currentChannelList","uploadFolder","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","compressQuality","serverCompress"])]),(0,i.bF)(S,{class:"footer"}),(0,i.bF)(U,{title:e.$t("upload.announcementTitle"),modelValue:r.showAnnouncementDialog,"onUpdate:modelValue":t[22]||(t[22]=e=>r.showAnnouncementDialog=e),width:d.dialogWidth,"show-close":!1,"close-on-click-modal":!1,"close-on-press-escape":!1,center:""},{footer:(0,i.k6)(()=>[(0,i.Lk)("span",Lo,[(0,i.bF)(p,{type:"primary",onClick:d.acknowledgeAnnouncement},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(e.$t("upload.announcementAck")),1)]),_:1},8,["onClick"])])]),default:(0,i.k6)(()=>[(0,i.Lk)("div",{innerHTML:r.announcementContent},null,8,Fo)]),_:1},8,["title","modelValue","width"]),(0,i.bF)(T,{show:r.showHistory,onClose:t[23]||(t[23]=e=>r.showHistory=!1)},null,8,["show"])])}o(13579);var $o=o(46638),So=o(48903),To=o(90144),_o=o(62388),xo={name:"UploadHome",mixins:[So.A],data(){return{selectedUrlForm:(0,To.KR)(""),showUrlDialog:!1,showCompressDialog:!1,customerCompress:!0,compressQuality:4,compressBar:5,convertToWebp:!1,serverCompress:!0,uploadChannel:"",channelName:"",availableChannels:{},uploadNameType:"",customUrlPrefix:"",useCustomUrl:"false",autoRetry:!0,useDefaultWallPaper:!1,uploadMethod:"default",uploadFolder:"",isFolderInputActive:!1,isQuickToolbarOpen:!1,isQuickToolbarPinned:!1,showAnnouncementDialog:!1,announcementContent:"",displayedAnnouncementRefreshAt:null,showHistory:!1,themeMode:"auto"}},watch:{customerCompress(e){this.updateCompressConfig("customerCompress",e)},compressQuality(e){this.updateCompressConfig("compressQuality",e)},compressBar(e){null===e||void 0===e||e<1?this.compressBar=1:(this.compressQuality>e&&(this.compressQuality=e),this.updateCompressConfig("compressBar",e))},serverCompress(e){this.updateCompressConfig("serverCompress",e)},convertToWebp(e){this.updateCompressConfig("convertToWebp",e)},uploadChannel(e){this.updateStoreUploadChannel(e);const t=this.availableChannels[e]||[],o=this.storeChannelName;o&&t.some(e=>e.name===o)?this.channelName=o:this.channelName=""},channelName(e){this.$store.commit("setStoreChannelName",e||"")},uploadNameType(e){this.updateStoreUploadNameType(e)},customUrlPrefix(e){this.$store.commit("setCustomUrlSettings",{key:"customUrlPrefix",value:e})},useCustomUrl(e){this.$store.commit("setCustomUrlSettings",{key:"useCustomUrl",value:e})},autoRetry(e){this.$store.commit("setStoreAutoRetry",e)},uploadFolder(e){if(this.validateUploadFolder(e,!1)){const t=(0,_o.G)(e,{strict:!0});t.valid&&this.$store.commit("setStoreUploadFolder",e)}else this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})}},computed:{...(0,Mt.L8)(["userConfig","uploadCopyUrlForm","compressConfig","storeUploadChannel","storeChannelName","storeUploadNameType","customUrlSettings","storeAutoRetry","storeUploadMethod","storeUploadFolder"]),ownerName(){return this.userConfig?.ownerName||"Sanyue"},dialogWidth(){return window.innerWidth>768?"50%":"90%"},disableTooltip(){return window.innerWidth<768},urlPrefix(){return this.userConfig?.urlPrefix||`${window.location.protocol}//${window.location.host}/file/`},announcementAvailable(){return!!this.userConfig?.announcement},showDirectorySuggestions(){return this.userConfig?.showDirectorySuggestions??!1},currentChannelList(){return this.availableChannels[this.uploadChannel]||[]}},mounted(){this.initializeBackground("uploadBkImg",".container",!0,!0),this.selectedUrlForm=this.uploadCopyUrlForm||"url",this.customerCompress=this.compressConfig.customerCompress??this.parseBoolean(this.userConfig?.defaultCustomerCompress,!0),this.compressQuality=this.compressConfig.compressQuality??this.parseNumber(this.userConfig?.defaultCompressQuality,4),this.compressBar=this.compressConfig.compressBar??this.parseNumber(this.userConfig?.defaultCompressBar,5),this.serverCompress=this.compressConfig.serverCompress??!0,this.convertToWebp=this.compressConfig.convertToWebp??this.parseBoolean(this.userConfig?.defaultConvertToWebp,!1),this.uploadChannel=this.storeUploadChannel||this.userConfig?.defaultUploadChannel||"telegram",this.autoRetry=this.storeAutoRetry,this.uploadNameType=this.storeUploadNameType||this.userConfig?.defaultUploadNameType||"default",this.customUrlPrefix=this.customUrlSettings.customUrlPrefix,this.useCustomUrl=this.customUrlSettings.useCustomUrl,this.uploadMethod=this.storeUploadMethod,this.fetchAvailableChannels(),this.uploadFolder=this.storeUploadFolder||this.userConfig?.defaultUploadFolder||"";const e=this.$store.getters.cusDarkMode,t=this.$store.getters.useDarkMode;this.themeMode=e?t?"dark":"light":"auto",this.showAnnouncementIfNeeded()},components:{UploadForm:Bt,Footer:Q.A,ToggleDark:eo.A,Logo:Ht.A,UploadHistory:H,UploadSettingsDialog:Ve,DirectoryTreePicker:Qt.A,DirectorySuggestionInput:Zt},methods:{async fetchAvailableChannels(){try{const e=await _t.A.get("/api/channels",{withAuthCode:!0});if(e.data){this.availableChannels=e.data;const t=this.storeChannelName,o=this.userConfig?.defaultChannelName,s=this.availableChannels[this.uploadChannel]||[];t&&s.some(e=>e.name===t)?this.channelName=t:""!==t&&null!==t&&void 0!==t||""!==t&&o&&s.some(e=>e.name===o)&&(this.channelName=o)}}catch(e){console.error("Failed to fetch available channels:",e)}},validateUploadFolder(e,t=!0){e&&!e.startsWith("/")&&(e="/"+e,this.uploadFolder=e);const o=(0,_o.G)(e,{strict:t});return!!o.valid||(this.$message.error(o.error),!1)},handleFolderInputFocus(){this.isFolderInputActive=!0},handleFolderInputBlur(){this.isFolderInputActive=!1,this.uploadFolder&&!this.uploadFolder.startsWith("/")&&(this.uploadFolder="/"+this.uploadFolder),this.validateUploadFolder(this.uploadFolder,!0)||this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})},handleManage(){this.$router.push("/dashboard")},parseBoolean(e,t){return void 0===e||null===e?t:"boolean"===typeof e?e:"string"===typeof e?"true"===e:t},parseNumber(e,t){if(void 0===e||null===e)return t;const o=parseFloat(e);return isNaN(o)?t:o},openUrlDialog(){this.showUrlDialog=!0},handleLogout(){_t.A.post("/api/auth/logout",{authType:"user"},{withCredentials:!0}).finally(()=>{this.$store.commit("setUserLoggedIn",!1),this.$router.push("/login"),this.$message.success(this.$t("upload.logoutSuccess"))})},changeUrlForm(){this.$store.commit("setUploadCopyUrlForm",this.selectedUrlForm)},openCompressDialog(){this.showCompressDialog=!0},updateCompressConfig(e,t){this.$store.commit("setCompressConfig",{key:e,value:t})},updateStoreUploadChannel(e){this.$store.commit("setStoreUploadChannel",e)},updateStoreUploadNameType(e){this.$store.commit("setStoreUploadNameType",e)},handleQuickToolbarMoreEnter(){this.isQuickToolbarOpen=!0},handleQuickToolbarLeave(){this.isQuickToolbarPinned||(this.isQuickToolbarOpen=!1)},toggleQuickToolbar(){this.isQuickToolbarPinned=!this.isQuickToolbarPinned,this.isQuickToolbarOpen=this.isQuickToolbarPinned},closeQuickToolbar(){this.isQuickToolbarPinned=!1,this.isQuickToolbarOpen=!1},handleQuickToolbarCommand(e){this.closeQuickToolbar(),"linkFormat"===e?this.openUrlDialog():"manage"===e?this.handleManage():"logout"===e&&this.handleLogout()},handleChangeUploadMethod(){this.uploadMethod="default"===this.uploadMethod?"paste":"default",this.$store.commit("setUploadMethod",this.uploadMethod)},handleMobileMenuCommand(e){if("toggleTheme"===e)"auto"===this.themeMode?(this.themeMode="light",this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!1)):"light"===this.themeMode?(this.themeMode="dark",this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!0)):(this.themeMode="auto",this.$store.commit("setCusDarkMode",!1));else if("toggleUploadMethod"===e)this.handleChangeUploadMethod();else if("viewDocs"===e)window.open("https://cfbed.sanyue.de/qa/","_blank");else if("showHistory"===e)this.showHistory=!0;else if("showAnnouncement"===e)this.handleShowAnnouncement();else if("toggleLanguage"===e){const e="zh-CN"===this.$i18n.locale?"en":"zh-CN";(0,$o.xS)(e)}},handleDesktopMenuCommand(e){if("viewDocs"===e)window.open("https://cfbed.sanyue.de/qa/","_blank");else if("showHistory"===e)this.showHistory=!0;else if("showAnnouncement"===e)this.handleShowAnnouncement();else if("toggleLanguage"===e){const e="zh-CN"===this.$i18n.locale?"en":"zh-CN";(0,$o.xS)(e)}},getThemeIcon(){return"auto"===this.themeMode?"sun":"light"===this.themeMode?"moon":"adjust"},getThemeText(){return"auto"===this.themeMode?this.$t("theme.lightMode"):"light"===this.themeMode?this.$t("theme.darkMode"):this.$t("theme.autoMode")},handleShowAnnouncement(){const e=this.userConfig?.announcement;e?this.openAnnouncement(e):this.$message.info(this.$t("upload.noAnnouncement"))},getAnnouncementRefreshAt(){const e=Number(this.userConfig?.announcementRefreshAt);return Number.isFinite(e)&&e>0?e:null},openAnnouncement(e){this.announcementContent=e,this.displayedAnnouncementRefreshAt=this.getAnnouncementRefreshAt(),this.showAnnouncementDialog=!0},showAnnouncementIfNeeded(){const e=this.userConfig?.announcement;if(!e)return;const t=this.getAnnouncementRefreshAt();if(t){const o=Number(localStorage.getItem("announcementAcknowledgedRefreshAt"));return void((!Number.isFinite(o)||t>o)&&this.openAnnouncement(e))}localStorage.getItem("announcementAcknowledgedAt")||this.openAnnouncement(e)},acknowledgeAnnouncement(){localStorage.setItem("announcementAcknowledgedAt",String(Date.now())),this.displayedAnnouncementRefreshAt&&localStorage.setItem("announcementAcknowledgedRefreshAt",String(this.displayedAnnouncementRefreshAt)),this.showAnnouncementDialog=!1},handleDirectorySelect(e){this.uploadFolder=e,this.validateUploadFolder(e,!0)&&this.$store.commit("setStoreUploadFolder",e)}}};const Mo=(0,V.A)(xo,[["render",Uo],["__scopeId","data-v-06705292"]]);var Ao=Mo},62388:function(e,t,o){"use strict";o.d(t,{G:function(){return a}});var s=o(46638);function a(e,{strict:t=!0}={}){if(!e||""===e.trim())return{valid:!0};if("/"===e)return{valid:!0};if(!e.startsWith("/"))return{valid:!1,error:s.Ay.global.t("validation.pathMustStartWithSlash")};if(/(?:^|\/)\.\.(\/|$)/.test(e)||e.includes(".."))return{valid:!1,error:s.Ay.global.t("validation.pathTraversalNotAllowed")};const o=t?/\/\.(\/|$)/:/\/\.\//;if(o.test(e))return{valid:!1,error:s.Ay.global.t("validation.singleDotNotAllowed")};if(e.includes("//"))return{valid:!1,error:s.Ay.global.t("validation.consecutiveSlashNotAllowed")};const a=/[\\:\*\?"'<>\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;return a.test(e)?{valid:!1,error:s.Ay.global.t("validation.invalidCharacters")}:{valid:!0}}},67819:function(e,t,o){"use strict";o(85331)},70797:function(e,t,o){"use strict";o.d(t,{A:function(){return l}});o(44114);var s=o(25507),a=o(16915);let i=!1;async function l(e,t={}){t.credentials="include",t.headers={...t.headers};const o=await fetch(e,t);return 401!==o.status||i||(i=!0,s.A.commit("setAdminLoggedIn",!1),a.A.push("/adminLogin").finally(()=>{i=!1})),o}},76334:function(e,t,o){e.exports=o(11393)},79899:function(e,t,o){"use strict";o(85331)},85970:function(e,t,o){"use strict";o(85331)},86975:function(e,t,o){"use strict";o.d(t,{A:function(){return p}});var s=o(56768),a=o(24232);const i={key:0,class:"page-footer"},l=["href"];function n(e,t,o,n,r,d){const c=(0,s.g2)("font-awesome-icon");return d.disableFooter?(0,s.Q3)("",!0):((0,s.uX)(),(0,s.CE)("div",i,[(0,s.Lk)("p",null,[(0,s.eW)("© 2024-"+(0,a.v_)(d.thisYear)+" Designed by ",1),t[0]||(t[0]=(0,s.Lk)("a",{class:"footer-name",href:"https://github.com/MarSeventh",target:"_blank"},"SanyueQi",-1)),t[1]||(t[1]=(0,s.eW)(" for You! ",-1)),(0,s.Lk)("a",{href:d.footerLink,target:"_blank"},[(0,s.bF)(c,{icon:"paper-plane",class:"footer-link-icon"})],8,l)])]))}var r=o(60782),d={name:"Footer",computed:{...(0,r.L8)(["userConfig"]),footerLink(){return this.userConfig?.footerLink||"https://github.com/MarSeventh"},thisYear(){return(new Date).getFullYear()},disableFooter(){return this.userConfig?.disableFooter||!1}}},c=o(71241);const u=(0,c.A)(d,[["render",n],["__scopeId","data-v-08acbaa9"]]);var p=u},88830:function(e,t,o){"use strict";o(85331)},95385:function(e,t,o){"use strict";o(85331)},96682:function(e,t,o){"use strict";e.exports=o.p+"img/404.8ed11fb3.png"},96808:function(e,t,o){"use strict";o(85331),o(18785),o(67819),o(85970),o(19104)},97769:function(e,t,o){"use strict";o.d(t,{A:function(){return u}});var s=o(56768);const a={key:0,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},i={key:1,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},l={key:2,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"};function n(e,t,o,n,r,d){const c=(0,s.g2)("font-awesome-icon");return(0,s.uX)(),(0,s.CE)("span",(0,s.v6)(e.$attrs,{class:["channel-icon-wrapper",`channel-brand-${o.type}`]}),["telegram"===o.type?((0,s.uX)(),(0,s.CE)("svg",a,[...t[0]||(t[0]=[(0,s.Lk)("path",{d:"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z"},null,-1)])])):"huggingface"===o.type?((0,s.uX)(),(0,s.CE)("svg",i,[...t[1]||(t[1]=[(0,s.Fv)('',9)])])):"webdav"===o.type?((0,s.uX)(),(0,s.CE)("svg",l,[...t[2]||(t[2]=[(0,s.Lk)("path",{d:"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z"},null,-1)])])):((0,s.uX)(),(0,s.Wv)(c,{key:3,icon:d.fontAwesomeIcon},null,8,["icon"]))],16)}var r={name:"ChannelIcon",inheritAttrs:!1,props:{type:{type:String,required:!0}},computed:{fontAwesomeIcon(){const e={cfr2:["fab","cloudflare"],s3:["fab","aws"],discord:["fab","discord"]};return e[this.type]||"server"}}},d=o(71241);const c=(0,d.A)(r,[["render",n],["__scopeId","data-v-ce6ff2ce"]]);var u=c}}]); +//# sourceMappingURL=24.e38d6915.js.map \ No newline at end of file diff --git a/frontend-dist/js/24.e38d6915.js.gz b/frontend-dist/js/24.e38d6915.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..9b8dd7a076cc2d06df4f8205a42b2c0a86137038 GIT binary patch literal 31672 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 T=-*fLzB&JIN~&&8QM&;EVGbaP literal 0 HcmV?d00001 diff --git a/frontend-dist/js/24.e38d6915.js.map b/frontend-dist/js/24.e38d6915.js.map new file mode 100644 index 00000000..dc0fb9f4 --- /dev/null +++ b/frontend-dist/js/24.e38d6915.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/24.e38d6915.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/components/Logo.vue?a6d2","webpack://sanyue_imghub/./src/components/Logo.vue","webpack://sanyue_imghub/./src/components/Logo.vue?4125","webpack://sanyue_imghub/./node_modules/image-conversion/build/conversion.js","webpack://sanyue_imghub/./src/components/ToggleDark.vue?4a88","webpack://sanyue_imghub/./src/components/ToggleDark.vue","webpack://sanyue_imghub/./src/components/ToggleDark.vue?0bce","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?9e0f","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue","webpack://sanyue_imghub/./src/components/DirectoryTreePicker.vue?6984","webpack://sanyue_imghub/./src/components/upload/UploadHistory.vue?942e","webpack://sanyue_imghub/./src/components/upload/UploadHistory.vue","webpack://sanyue_imghub/./src/components/upload/UploadHistory.vue?d5f5","webpack://sanyue_imghub/./src/components/upload/UploadSettingsDialog.vue?de1f","webpack://sanyue_imghub/./src/components/upload/UploadSettingsDialog.vue","webpack://sanyue_imghub/./src/components/upload/UploadSettingsDialog.vue?adb2","webpack://sanyue_imghub/./src/components/upload/UploadFileItem.vue?6ec5","webpack://sanyue_imghub/./src/components/upload/UploadFileItem.vue","webpack://sanyue_imghub/./src/components/upload/UploadFileItem.vue?420c","webpack://sanyue_imghub/./src/components/upload/UploadForm.vue?adcb","webpack://sanyue_imghub/./src/utils/upload/urlBuilder.js","webpack://sanyue_imghub/./src/utils/upload/sha256.js","webpack://sanyue_imghub/./src/components/upload/UploadForm.vue","webpack://sanyue_imghub/./src/components/upload/UploadForm.vue?bdbd","webpack://sanyue_imghub/./src/components/DirectorySuggestionInput.vue?6707","webpack://sanyue_imghub/./src/components/DirectorySuggestionInput.vue","webpack://sanyue_imghub/./src/components/DirectorySuggestionInput.vue?69c3","webpack://sanyue_imghub/./src/views/UploadHome.vue?fcf5","webpack://sanyue_imghub/./src/views/UploadHome.vue","webpack://sanyue_imghub/./src/views/UploadHome.vue?af00","webpack://sanyue_imghub/./src/utils/pathValidator.js","webpack://sanyue_imghub/./src/utils/fetchWithAuth.js","webpack://sanyue_imghub/./node_modules/image-conversion/index.js","webpack://sanyue_imghub/./src/components/Footer.vue?4f81","webpack://sanyue_imghub/./src/components/Footer.vue","webpack://sanyue_imghub/./src/components/Footer.vue?d468","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?3436","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue","webpack://sanyue_imghub/./src/components/icons/ChannelIcon.vue?8c05"],"sourcesContent":["import { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = [\"href\", \"target\"];\nconst _hoisted_2 = [\"alt\", \"src\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return _openBlock(), _createElementBlock(\"a\", {\n href: $options.logoHref,\n target: $props.target,\n class: _normalizeClass(_ctx.logo - _ctx.link)\n }, [_createElementVNode(\"img\", {\n class: _normalizeClass($options.logoClasses),\n alt: $props.alt,\n src: $options.logoUrl\n }, null, 10, _hoisted_2)], 10, _hoisted_1);\n}","import { mapGetters } from 'vuex';\nexport default {\n name: 'Logo',\n props: {\n // Logo链接地址(可被用户配置覆盖)\n href: {\n type: String,\n default: 'https://github.com/MarSeventh/CloudFlare-ImgBed'\n },\n // 链接打开方式\n target: {\n type: String,\n default: '_blank',\n // _blank, _self, _parent, _top\n validator: value => ['_blank', '_self', '_parent', '_top'].includes(value)\n },\n // 图片alt文本\n alt: {\n type: String,\n default: 'Sanyue logo'\n },\n // 自定义logo图片URL(可选)\n customSrc: {\n type: String,\n default: ''\n },\n // Logo位置样式\n position: {\n type: String,\n default: 'fixed',\n // fixed, relative, absolute\n validator: value => ['fixed', 'relative', 'absolute', 'static'].includes(value)\n },\n // Logo大小\n size: {\n type: String,\n default: 'normal',\n // small, normal, large\n validator: value => ['small', 'normal', 'large'].includes(value)\n },\n // 是否启用悬停动画\n enableHover: {\n type: Boolean,\n default: true\n },\n // 是否允许使用用户配置的链接(仅上传页面启用)\n useConfigLink: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n ...mapGetters(['userConfig']),\n logoUrl() {\n // 优先级:customSrc > 用户配置 > 默认图片\n return this.customSrc || this.userConfig?.logoUrl || require('../assets/logo.png');\n },\n logoHref() {\n // 只有启用 useConfigLink 时才使用用户配置的链接\n if (this.useConfigLink && this.userConfig?.logoLink) {\n return this.userConfig.logoLink;\n }\n return this.href;\n },\n logoClasses() {\n return {\n 'logo': true,\n [`logo--${this.position}`]: true,\n [`logo--${this.size}`]: true,\n 'logo--hover-enabled': this.enableHover\n };\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./Logo.vue?vue&type=template&id=17f54292&scoped=true\"\nimport script from \"./Logo.vue?vue&type=script&lang=js\"\nexport * from \"./Logo.vue?vue&type=script&lang=js\"\n\nimport \"./Logo.vue?vue&type=style&index=0&id=17f54292&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-17f54292\"]])\n\nexport default __exports__","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.imageConversion=e():t.imageConversion=e()}(this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=0)}([function(t,e,n){\"use strict\";var r;function o(t){return[\"image/png\",\"image/jpeg\",\"image/gif\"].some(e=>e===t)}n.r(e),n.d(e,\"canvastoDataURL\",(function(){return a})),n.d(e,\"canvastoFile\",(function(){return c})),n.d(e,\"dataURLtoFile\",(function(){return s})),n.d(e,\"dataURLtoImage\",(function(){return l})),n.d(e,\"downloadFile\",(function(){return d})),n.d(e,\"filetoDataURL\",(function(){return f})),n.d(e,\"imagetoCanvas\",(function(){return g})),n.d(e,\"urltoBlob\",(function(){return w})),n.d(e,\"urltoImage\",(function(){return m})),n.d(e,\"compress\",(function(){return p})),n.d(e,\"compressAccurately\",(function(){return b})),n.d(e,\"EImageType\",(function(){return r})),function(t){t.PNG=\"image/png\",t.JPEG=\"image/jpeg\",t.GIF=\"image/gif\"}(r||(r={}));var i=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function a(t,e=.92,n=r.JPEG){return i(this,void 0,void 0,(function*(){return o(n)||(n=r.JPEG),t.toDataURL(n,e)}))}function c(t,e=.92,n=r.JPEG){return new Promise(r=>t.toBlob(t=>r(t),n,e))}var u=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function s(t,e){return u(this,void 0,void 0,(function*(){const n=t.split(\",\");let r=n[0].match(/:(.*?);/)[1];const i=atob(n[1]);let a=i.length;const c=new Uint8Array(a);for(;a--;)c[a]=i.charCodeAt(a);return o(e)&&(r=e),new Blob([c],{type:r})}))}function l(t){return new Promise((e,n)=>{const r=new Image;r.onload=()=>e(r),r.onerror=()=>n(new Error(\"dataURLtoImage(): dataURL is illegal\")),r.src=t})}function d(t,e){const n=document.createElement(\"a\");n.href=window.URL.createObjectURL(t),n.download=e||Date.now().toString(36),document.body.appendChild(n);const r=document.createEvent(\"MouseEvents\");r.initEvent(\"click\",!1,!1),n.dispatchEvent(r),document.body.removeChild(n)}function f(t){return new Promise(e=>{const n=new FileReader;n.onloadend=t=>e(t.target.result),n.readAsDataURL(t)})}var h=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function g(t,e={}){return h(this,void 0,void 0,(function*(){const n=Object.assign({},e),r=document.createElement(\"canvas\"),o=r.getContext(\"2d\");let i,a;for(const t in n)Object.prototype.hasOwnProperty.call(n,t)&&(n[t]=Number(n[t]));if(n.scale){const e=n.scale>0&&n.scale<10?n.scale:1;a=t.width*e,i=t.height*e}else a=n.width||n.height*t.width/t.height||t.width,i=n.height||n.width*t.height/t.width||t.height;switch([5,6,7,8].some(t=>t===n.orientation)?(r.height=a,r.width=i):(r.height=i,r.width=a),n.orientation){case 3:o.rotate(180*Math.PI/180),o.drawImage(t,-r.width,-r.height,r.width,r.height);break;case 6:o.rotate(90*Math.PI/180),o.drawImage(t,0,-r.width,r.height,r.width);break;case 8:o.rotate(270*Math.PI/180),o.drawImage(t,-r.height,0,r.height,r.width);break;case 2:o.translate(r.width,0),o.scale(-1,1),o.drawImage(t,0,0,r.width,r.height);break;case 4:o.translate(r.width,0),o.scale(-1,1),o.rotate(180*Math.PI/180),o.drawImage(t,-r.width,-r.height,r.width,r.height);break;case 5:o.translate(r.width,0),o.scale(-1,1),o.rotate(90*Math.PI/180),o.drawImage(t,0,-r.width,r.height,r.width);break;case 7:o.translate(r.width,0),o.scale(-1,1),o.rotate(270*Math.PI/180),o.drawImage(t,-r.height,0,r.height,r.width);break;default:o.drawImage(t,0,0,r.width,r.height)}return r}))}function w(t){return fetch(t).then(t=>t.blob())}function m(t){return new Promise((e,n)=>{const r=new Image;r.onload=()=>e(r),r.onerror=()=>n(new Error(\"urltoImage(): Image failed to load, please check the image URL\")),r.src=t})}var y=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function p(t,e={}){return y(this,void 0,void 0,(function*(){if(!(t instanceof Blob))throw new Error(\"compress(): First arg must be a Blob object or a File object.\");if(\"object\"!=typeof e&&(e=Object.assign({quality:e})),e.quality=Number(e.quality),Number.isNaN(e.quality))return t;const n=yield f(t);let i=n.split(\",\")[0].match(/:(.*?);/)[1],c=r.JPEG;o(e.type)&&(c=e.type,i=e.type);const u=yield l(n),d=yield g(u,Object.assign({},e)),h=yield a(d,e.quality,c),w=yield s(h,i);return w.size>t.size?t:w}))}function b(t,e={}){return y(this,void 0,void 0,(function*(){if(!(t instanceof Blob))throw new Error(\"compressAccurately(): First arg must be a Blob object or a File object.\");if(\"object\"!=typeof e&&(e=Object.assign({size:e})),e.size=Number(e.size),Number.isNaN(e.size))return t;if(1024*e.size>t.size)return t;e.accuracy=Number(e.accuracy),(!e.accuracy||e.accuracy<.8||e.accuracy>.99)&&(e.accuracy=.95);const n=e.size*(2-e.accuracy)*1024,i=1024*e.size,c=e.size*e.accuracy*1024,u=yield f(t);let d=u.split(\",\")[0].match(/:(.*?);/)[1],h=r.JPEG;o(e.type)&&(h=e.type,d=e.type);const w=yield l(u),m=yield g(w,Object.assign({},e));let y,p=.5;const b=[null,null];for(let t=1;t<=7;t++){y=yield a(m,p,h);const e=.75*y.length;if(7===t){(ne)&&(y=[y,...b].filter(t=>t).sort((t,e)=>Math.abs(.75*t.length-i)-Math.abs(.75*e.length-i))[0]);break}if(ne))break;b[0]=y,p+=Math.pow(.5,t+1)}}const v=yield s(y,d);return v.size>t.size?t:v}))}}])}));","import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode } from \"vue\";\nconst _hoisted_1 = {\n id: \"themeMask\"\n};\nconst _hoisted_2 = [\"cx\", \"cy\", \"r\"];\nconst _hoisted_3 = [\"r\"];\nconst _hoisted_4 = [\"opacity\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", {\n id: \"themeToggle\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.handleToggleClick && $options.handleToggleClick(...args))\n }, [_createVNode(_Transition, {\n name: \"icon-fade\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [!$data.isAuto ? (_openBlock(), _createElementBlock(\"svg\", {\n key: \"sun-moon\",\n class: _normalizeClass([\"theme_toggle_svg\", {\n 'dark': $data.isDark\n }]),\n width: \"1.5em\",\n height: \"1.5em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n stroke: \"currentColor\"\n }, [_createElementVNode(\"mask\", _hoisted_1, [_cache[1] || (_cache[1] = _createElementVNode(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"100%\",\n height: \"100%\",\n fill: \"white\"\n }, null, -1)), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle1\",\n fill: \"black\",\n cx: $data.isDark ? '50%' : '100%',\n cy: $data.isDark ? '23%' : '0%',\n r: $data.isDark ? '9' : '5'\n }, null, 8, _hoisted_2)]), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle2\",\n cx: \"12\",\n cy: \"12\",\n r: $data.isDark ? '9' : '5',\n mask: \"url(#themeMask)\"\n }, null, 8, _hoisted_3), _createElementVNode(\"g\", {\n class: \"theme_toggle_g\",\n stroke: \"currentColor\",\n opacity: $data.isDark ? 0 : 1\n }, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"1\",\n x2: \"12\",\n y2: \"3\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"21\",\n x2: \"12\",\n y2: \"23\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"4.22\",\n x2: \"5.64\",\n y2: \"5.64\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"18.36\",\n x2: \"19.78\",\n y2: \"19.78\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"1\",\n y1: \"12\",\n x2: \"3\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"21\",\n y1: \"12\",\n x2: \"23\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"19.78\",\n x2: \"5.64\",\n y2: \"18.36\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"5.64\",\n x2: \"19.78\",\n y2: \"4.22\"\n }, null, -1)]))], 8, _hoisted_4)], 2)) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: \"auto-mode\",\n icon: \"circle-half-stroke\",\n class: \"auto-icon\",\n style: {\n \"font-size\": \"1.5em\",\n \"color\": \"var(--theme-toggle-color)\"\n }\n }))]),\n _: 1\n })]);\n}","export default {\n name: 'ToggleDark',\n data() {\n return {\n isDark: this.$store.getters.useDarkMode,\n isAuto: !this.$store.getters.cusDarkMode\n };\n },\n methods: {\n handleToggleClick() {\n // 三种状态循环:亮色 -> 暗色 -> 跟随系统 -> 亮色\n if (this.isAuto) {\n // 当前是自动模式,切换到亮色\n this.isDark = false;\n this.isAuto = false;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (!this.isDark) {\n // 当前是亮色,切换到暗色\n this.isDark = true;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 当前是暗色,切换到跟随系统\n this.isAuto = true;\n this.$store.commit('setCusDarkMode', false);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./ToggleDark.vue?vue&type=template&id=2122c62a&scoped=true\"\nimport script from \"./ToggleDark.vue?vue&type=script&lang=js\"\nexport * from \"./ToggleDark.vue?vue&type=script&lang=js\"\n\nimport \"./ToggleDark.vue?vue&type=style&index=0&id=2122c62a&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2122c62a\"]])\n\nexport default __exports__","import { renderSlot as _renderSlot, withModifiers as _withModifiers, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-tree-picker\"\n};\nconst _hoisted_2 = {\n class: \"tree-container\"\n};\nconst _hoisted_3 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_4 = {\n class: \"error-text\"\n};\nconst _hoisted_5 = {\n class: \"node-label\"\n};\nconst _hoisted_6 = {\n class: \"tree-container\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_8 = {\n class: \"error-text\"\n};\nconst _hoisted_9 = {\n class: \"node-label\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tree = _resolveComponent(\"el-tree\");\n const _component_el_popover = _resolveComponent(\"el-popover\");\n const _component_el_drawer = _resolveComponent(\"el-drawer\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [$options.isDesktop ? (_openBlock(), _createBlock(_component_el_popover, {\n key: 0,\n visible: $data.popoverVisible,\n \"onUpdate:visible\": _cache[1] || (_cache[1] = $event => $data.popoverVisible = $event),\n placement: \"bottom-start\",\n width: 320,\n trigger: \"click\",\n \"popper-class\": \"directory-tree-popover\",\n \"show-arrow\": true,\n \"hide-after\": 0,\n \"show-after\": 50,\n transition: \"el-zoom-in-top\"\n }, {\n reference: _withCtx(() => [_createElementVNode(\"span\", {\n class: \"popover-trigger-wrapper\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)])]),\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_2, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_4, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 3\n }, 8, [\"visible\"])) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createElementVNode(\"span\", {\n class: \"drawer-trigger-wrapper\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.openDrawer && $options.openDrawer(...args))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)]), _createVNode(_component_el_drawer, {\n modelValue: $data.drawerVisible,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.drawerVisible = $event),\n direction: \"btt\",\n size: \"60%\",\n \"show-close\": true,\n \"with-header\": true,\n \"z-index\": 3000,\n title: _ctx.$t('directoryTree.selectDirectory'),\n class: \"directory-tree-drawer\"\n }, {\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_6, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_8, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRefMobile\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree mobile-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_9, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 1\n }, 8, [\"modelValue\", \"title\"])], 64))]);\n}","import axios from '@/utils/axios';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'DirectoryTreePicker',\n props: {\n currentDirectory: {\n type: String,\n default: ''\n },\n source: {\n type: String,\n default: 'upload',\n validator: value => ['upload', 'admin'].includes(value)\n }\n },\n data() {\n return {\n popoverVisible: false,\n drawerVisible: false,\n treeData: [],\n loading: false,\n error: '',\n treeProps: {\n children: 'children',\n label: 'name'\n },\n windowWidth: window.innerWidth\n };\n },\n computed: {\n isDesktop() {\n return this.windowWidth >= 769;\n }\n },\n watch: {\n popoverVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 弹窗关闭后延迟折叠所有节点,避免下次打开时出现折叠动画\n setTimeout(() => {\n if (!this.popoverVisible && this.$refs.treeRef) {\n const store = this.$refs.treeRef.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 200);\n }\n },\n drawerVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 抽屉关闭后延迟折叠所有节点\n setTimeout(() => {\n if (!this.drawerVisible && this.$refs.treeRefMobile) {\n const store = this.$refs.treeRefMobile.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 300);\n }\n },\n currentDirectory(newVal) {\n this.$nextTick(() => {\n if (this.$refs.treeRef && newVal) {\n this.$refs.treeRef.setCurrentKey(newVal);\n }\n if (this.$refs.treeRefMobile && newVal) {\n this.$refs.treeRefMobile.setCurrentKey(newVal);\n }\n });\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n openDrawer() {\n this.drawerVisible = true;\n },\n async fetchDirectoryTree() {\n this.loading = true;\n this.error = '';\n try {\n let data;\n if (this.source === 'admin') {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.serverError');\n }\n return;\n }\n data = await response.json();\n } else {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n data = response.data;\n }\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n if (err.response?.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.loadFailed');\n }\n } finally {\n this.loading = false;\n }\n },\n handleNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.$emit('select', path);\n this.popoverVisible = false;\n this.drawerVisible = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectoryTreePicker.vue?vue&type=template&id=62eab69a&scoped=true\"\nimport script from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\nexport * from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\n\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=0&id=62eab69a&scoped=true&lang=css\"\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=1&id=62eab69a&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-62eab69a\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\";\nconst _hoisted_1 = {\n class: \"history-header\"\n};\nconst _hoisted_2 = {\n class: \"header-left\"\n};\nconst _hoisted_3 = {\n class: \"record-count\"\n};\nconst _hoisted_4 = {\n class: \"header-right\"\n};\nconst _hoisted_5 = {\n class: \"timeline-header\"\n};\nconst _hoisted_6 = {\n class: \"date-label\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"grid-view\"\n};\nconst _hoisted_8 = {\n class: \"grid-preview\"\n};\nconst _hoisted_9 = [\"src\"];\nconst _hoisted_10 = [\"src\"];\nconst _hoisted_11 = {\n key: 2,\n class: \"file-icon-wrapper\"\n};\nconst _hoisted_12 = {\n class: \"grid-overlay\"\n};\nconst _hoisted_13 = {\n class: \"grid-actions\"\n};\nconst _hoisted_14 = {\n class: \"grid-info\"\n};\nconst _hoisted_15 = [\"title\"];\nconst _hoisted_16 = {\n class: \"upload-time\"\n};\nconst _hoisted_17 = {\n key: 1,\n class: \"list-view\"\n};\nconst _hoisted_18 = {\n class: \"list-preview\"\n};\nconst _hoisted_19 = [\"src\"];\nconst _hoisted_20 = [\"src\"];\nconst _hoisted_21 = {\n key: 2,\n class: \"file-icon-wrapper-small\"\n};\nconst _hoisted_22 = {\n class: \"list-info\"\n};\nconst _hoisted_23 = [\"title\"];\nconst _hoisted_24 = [\"title\"];\nconst _hoisted_25 = {\n class: \"list-meta\"\n};\nconst _hoisted_26 = {\n class: \"upload-time\"\n};\nconst _hoisted_27 = {\n class: \"list-actions\"\n};\nconst _hoisted_28 = {\n key: 0,\n class: \"load-more-container\"\n};\nconst _hoisted_29 = {\n key: 0,\n class: \"loading-indicator\"\n};\nconst _hoisted_30 = {\n key: 1,\n class: \"load-more-hint\"\n};\nconst _hoisted_31 = {\n key: 1,\n class: \"no-more-hint\"\n};\nconst _hoisted_32 = {\n key: 1,\n class: \"empty-state\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"history-container\", {\n 'active': $props.show\n }])\n }, [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h2\", null, _toDisplayString(_ctx.$t('uploadHistory.title')), 1), _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('uploadHistory.totalRecords', {\n count: $data.totalCount\n })), 1)]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadHistory.switchView'),\n placement: \"bottom\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n circle: \"\",\n onClick: $options.toggleViewMode\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.viewMode === 'grid' ? 'list' : 'th-large'\n }, null, 8, [\"icon\"])]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadHistory.clearRecords'),\n placement: \"bottom\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n circle: \"\",\n type: \"danger\",\n onClick: $options.clearHistory\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_button, {\n circle: \"\",\n onClick: _cache[0] || (_cache[0] = $event => _ctx.$emit('close'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n })]),\n _: 1\n })])]), $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"history-content\",\n ref: \"historyContent\",\n onScroll: _cache[3] || (_cache[3] = (...args) => $options.handleScroll && $options.handleScroll(...args))\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedHistory, group => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: group.date,\n class: \"history-group\"\n }, [_createElementVNode(\"div\", _hoisted_5, [_cache[4] || (_cache[4] = _createElementVNode(\"div\", {\n class: \"timeline-dot\"\n }, null, -1)), _createElementVNode(\"span\", _hoisted_6, _toDisplayString(group.date), 1)]), $data.viewMode === 'grid' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.items, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.time,\n class: \"grid-item\"\n }, [_createElementVNode(\"div\", _hoisted_8, [$options.isImage(item.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: item.url,\n loading: \"lazy\",\n onError: _cache[1] || (_cache[1] = (...args) => $options.handleImageError && $options.handleImageError(...args))\n }, null, 40, _hoisted_9)) : $options.isVideo(item.name) ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: item.url,\n muted: \"\"\n }, null, 8, _hoisted_10)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })])), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"div\", _hoisted_13, [_createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n type: \"primary\",\n onClick: $event => $options.copyLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n class: \"action-btn-view\",\n onClick: $event => $options.openLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"external-link-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n type: \"danger\",\n onClick: $event => $options.deleteItem(item)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])])])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", {\n class: \"file-name\",\n title: item.name\n }, _toDisplayString(item.name), 9, _hoisted_15), _createElementVNode(\"div\", _hoisted_16, _toDisplayString($options.formatTime(item.time)), 1)])]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.items, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.time,\n class: \"list-item\"\n }, [_createElementVNode(\"div\", _hoisted_18, [$options.isImage(item.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: item.url,\n loading: \"lazy\",\n onError: _cache[2] || (_cache[2] = (...args) => $options.handleImageError && $options.handleImageError(...args))\n }, null, 40, _hoisted_19)) : $options.isVideo(item.name) ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: item.url,\n muted: \"\"\n }, null, 8, _hoisted_20)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_21, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\"\n })]))]), _createElementVNode(\"div\", _hoisted_22, [_createElementVNode(\"div\", {\n class: \"file-name\",\n title: item.name\n }, _toDisplayString(item.name), 9, _hoisted_23), _createElementVNode(\"div\", {\n class: \"file-url\",\n title: item.url\n }, _toDisplayString(item.url), 9, _hoisted_24)]), _createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"div\", _hoisted_26, _toDisplayString($options.formatTime(item.time)), 1)]), _createElementVNode(\"div\", _hoisted_27, [_createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n type: \"primary\",\n onClick: $event => $options.copyLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n class: \"action-btn-view\",\n onClick: $event => $options.openLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"external-link-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n type: \"danger\",\n onClick: $event => $options.deleteItem(item)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])])]);\n }), 128))]))]);\n }), 128)), $options.hasMore ? (_openBlock(), _createElementBlock(\"div\", _hoisted_28, [$data.loadingMore ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [_createVNode(_component_font_awesome_icon, {\n icon: \"spinner\",\n spin: \"\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadHistory.loading')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_30, _toDisplayString(_ctx.$t('uploadHistory.pullToLoadMore')), 1))])) : $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, _toDisplayString(_ctx.$t('uploadHistory.noMoreRecords')), 1)) : _createCommentVNode(\"\", true)], 544)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t('uploadHistory.emptyHistory')), 1)]))], 2);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nexport default {\n name: 'UploadHistory',\n props: {\n show: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n historyList: [],\n allHistory: [],\n // 完整历史记录\n viewMode: 'grid',\n // 'grid' or 'list'\n pageSize: 30,\n // 每次加载数量\n currentPage: 0,\n loadingMore: false,\n totalCount: 0\n };\n },\n watch: {\n show(val) {\n if (val) {\n this.resetAndLoad();\n }\n }\n },\n computed: {\n hasMore() {\n return this.historyList.length < this.totalCount;\n },\n groupedHistory() {\n const groups = {};\n this.historyList.forEach(item => {\n const date = new Date(item.time);\n const dateStr = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n if (!groups[dateStr]) {\n groups[dateStr] = [];\n }\n groups[dateStr].push(item);\n });\n\n // Sort dates descending\n return Object.keys(groups).sort((a, b) => new Date(b) - new Date(a)).map(date => ({\n date,\n items: groups[date]\n }));\n }\n },\n mounted() {\n // Load view mode preference\n const savedMode = localStorage.getItem('historyViewMode');\n if (savedMode) {\n this.viewMode = savedMode;\n }\n },\n methods: {\n resetAndLoad() {\n this.historyList = [];\n this.currentPage = 0;\n this.loadAllHistory();\n this.loadMore();\n },\n loadAllHistory() {\n try {\n const history = JSON.parse(localStorage.getItem('uploadHistory') || '[]');\n // Sort by time desc\n this.allHistory = history.sort((a, b) => b.time - a.time);\n this.totalCount = this.allHistory.length;\n } catch (e) {\n console.error('Failed to load history', e);\n this.allHistory = [];\n this.totalCount = 0;\n }\n },\n loadMore() {\n if (this.loadingMore || !this.hasMore) return;\n this.loadingMore = true;\n\n // 模拟异步加载,避免阻塞UI\n setTimeout(() => {\n const start = this.currentPage * this.pageSize;\n const end = start + this.pageSize;\n const newItems = this.allHistory.slice(start, end);\n this.historyList = [...this.historyList, ...newItems];\n this.currentPage++;\n this.loadingMore = false;\n }, 50);\n },\n handleScroll(e) {\n const container = e.target;\n const scrollTop = container.scrollTop;\n const scrollHeight = container.scrollHeight;\n const clientHeight = container.clientHeight;\n\n // 距离底部 100px 时加载更多\n if (scrollHeight - scrollTop - clientHeight < 100) {\n this.loadMore();\n }\n },\n toggleViewMode() {\n this.viewMode = this.viewMode === 'grid' ? 'list' : 'grid';\n localStorage.setItem('historyViewMode', this.viewMode);\n },\n clearHistory() {\n this.$confirm(this.$t('uploadHistory.clearConfirmMessage'), this.$t('uploadHistory.clearConfirmTitle'), {\n confirmButtonText: this.$t('uploadHistory.clearConfirmOk'),\n cancelButtonText: this.$t('uploadHistory.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n this.historyList = [];\n this.allHistory = [];\n this.totalCount = 0;\n this.currentPage = 0;\n localStorage.removeItem('uploadHistory');\n this.$message.success(this.$t('uploadHistory.recordsCleared'));\n }).catch(() => {});\n },\n deleteItem(item) {\n this.$confirm(this.$t('uploadHistory.deleteConfirmMessage'), this.$t('uploadHistory.clearConfirmTitle'), {\n confirmButtonText: this.$t('uploadHistory.clearConfirmOk'),\n cancelButtonText: this.$t('uploadHistory.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // Remove from lists\n this.historyList = this.historyList.filter(i => i.time !== item.time);\n this.allHistory = this.allHistory.filter(i => i.time !== item.time);\n this.totalCount = this.allHistory.length;\n\n // Update localStorage\n try {\n localStorage.setItem('uploadHistory', JSON.stringify(this.allHistory));\n this.$message.success(this.$t('uploadHistory.recordDeleted'));\n } catch (e) {\n console.error('Failed to update history', e);\n }\n }).catch(() => {});\n },\n isImage(fileName) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp'];\n const extension = fileName ? fileName.split('.').pop().toLowerCase() : '';\n return imageExtensions.includes(extension);\n },\n isVideo(fileName) {\n const videoExtensions = ['mp4', 'webm', 'ogg', 'mkv'];\n const extension = fileName ? fileName.split('.').pop().toLowerCase() : '';\n return videoExtensions.includes(extension);\n },\n formatTime(timestamp) {\n const date = new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n },\n copyLink(url) {\n navigator.clipboard.writeText(url).then(() => {\n this.$message.success(this.$t('uploadHistory.linkCopied'));\n }).catch(() => {\n this.$message.error(this.$t('uploadHistory.copyFailed'));\n });\n },\n openLink(url) {\n window.open(url, '_blank');\n },\n handleImageError(e) {\n e.target.src = require('@/assets/404.png');\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHistory.vue?vue&type=template&id=7da2f8c2&scoped=true\"\nimport script from \"./UploadHistory.vue?vue&type=script&lang=js\"\nexport * from \"./UploadHistory.vue?vue&type=script&lang=js\"\n\nimport \"./UploadHistory.vue?vue&type=style&index=0&id=7da2f8c2&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7da2f8c2\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n class: \"dialog-section\"\n};\nconst _hoisted_2 = {\n class: \"section-header\"\n};\nconst _hoisted_3 = {\n class: \"section-title\"\n};\nconst _hoisted_4 = {\n class: \"section-content\"\n};\nconst _hoisted_5 = {\n class: \"setting-item\"\n};\nconst _hoisted_6 = {\n class: \"setting-label\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_8 = {\n class: \"setting-label\"\n};\nconst _hoisted_9 = {\n class: \"setting-item\"\n};\nconst _hoisted_10 = {\n class: \"setting-label\"\n};\nconst _hoisted_11 = {\n class: \"setting-item\"\n};\nconst _hoisted_12 = {\n class: \"setting-label\"\n};\nconst _hoisted_13 = {\n class: \"dialog-section\"\n};\nconst _hoisted_14 = {\n class: \"section-header\"\n};\nconst _hoisted_15 = {\n class: \"section-title\"\n};\nconst _hoisted_16 = {\n class: \"section-content\"\n};\nconst _hoisted_17 = {\n class: \"dialog-section\"\n};\nconst _hoisted_18 = {\n class: \"section-header\"\n};\nconst _hoisted_19 = {\n class: \"section-title\"\n};\nconst _hoisted_20 = {\n class: \"section-content\"\n};\nconst _hoisted_21 = {\n class: \"setting-item\"\n};\nconst _hoisted_22 = {\n class: \"setting-label\"\n};\nconst _hoisted_23 = {\n class: \"setting-item\"\n};\nconst _hoisted_24 = {\n class: \"setting-label\"\n};\nconst _hoisted_25 = {\n key: 0,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_26 = {\n class: \"setting-label\"\n};\nconst _hoisted_27 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_28 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_29 = {\n key: 1,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_30 = {\n class: \"setting-label\"\n};\nconst _hoisted_31 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_32 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_33 = {\n key: 0,\n class: \"dialog-section\"\n};\nconst _hoisted_34 = {\n class: \"section-header\"\n};\nconst _hoisted_35 = {\n class: \"section-title\"\n};\nconst _hoisted_36 = {\n class: \"section-content\"\n};\nconst _hoisted_37 = {\n class: \"setting-item\"\n};\nconst _hoisted_38 = {\n class: \"setting-label\"\n};\nconst _hoisted_39 = {\n class: \"dialog-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_slider = _resolveComponent(\"el-slider\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('uploadSettings.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog settings-dialog-scope upload-settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('uploadSettings.uploadChannel')), 1)]), _createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"span\", _hoisted_6, _toDisplayString(_ctx.$t('uploadSettings.channelType')), 1), _createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadChannel,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => _ctx.$emit('update:uploadChannel', $event)),\n class: \"radio-card-group compact\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"telegram\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"telegram\",\n class: \"channel-icon\"\n }), _cache[13] || (_cache[13] = _createElementVNode(\"span\", null, \"TG\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"cfr2\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"cfr2\",\n class: \"channel-icon\"\n }), _cache[14] || (_cache[14] = _createElementVNode(\"span\", null, \"R2\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"s3\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"s3\",\n class: \"channel-icon\"\n }), _cache[15] || (_cache[15] = _createElementVNode(\"span\", null, \"S3\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"discord\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"discord\",\n class: \"channel-icon\"\n }), _cache[16] || (_cache[16] = _createElementVNode(\"span\", null, \"DC\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"huggingface\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"huggingface\",\n class: \"channel-icon\"\n }), _cache[17] || (_cache[17] = _createElementVNode(\"span\", null, \"HF\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"webdav\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"webdav\",\n class: \"channel-icon\"\n }), _cache[18] || (_cache[18] = _createElementVNode(\"span\", null, \"WD\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model-value\"])]), $props.currentChannelList.length > 1 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createElementVNode(\"span\", _hoisted_8, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.channelName')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.channelNameTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_select, {\n \"model-value\": $props.channelName,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => _ctx.$emit('update:channelName', $event)),\n placeholder: _ctx.$t('uploadSettings.autoSelect'),\n clearable: \"\",\n class: \"setting-input\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.currentChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"model-value\", \"placeholder\"])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('uploadSettings.uploadDirectory')), 1), _createVNode(_component_el_input, {\n \"model-value\": $props.uploadFolder,\n \"onUpdate:modelValue\": $options.handleUploadFolderInput,\n placeholder: _ctx.$t('uploadSettings.uploadDirectoryPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"model-value\", \"onUpdate:modelValue\", \"placeholder\"])]), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"span\", _hoisted_12, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.autoSwitch')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.autoSwitchTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_switch, {\n \"model-value\": $props.autoRetry,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => _ctx.$emit('update:autoRetry', $event))\n }, null, 8, [\"model-value\"])])])]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('uploadSettings.fileNaming')), 1)]), _createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadNameType,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => _ctx.$emit('update:uploadNameType', $event)),\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"default\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingDefault')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"index\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"hashtag\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingIndex')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"origin\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"file-signature\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingOrigin')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"short\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"compress-alt\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingShort')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model-value\"])])]), _createElementVNode(\"div\", _hoisted_17, [_createElementVNode(\"div\", _hoisted_18, [_createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('uploadSettings.filePreprocess')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.filePreprocessTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_20, [_createElementVNode(\"div\", _hoisted_21, [_createElementVNode(\"span\", _hoisted_22, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.convertToWebp')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.convertToWebpTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_switch, {\n \"model-value\": $props.convertToWebp,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => _ctx.$emit('update:convertToWebp', $event))\n }, null, 8, [\"model-value\"])]), _createElementVNode(\"div\", _hoisted_23, [_createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('uploadSettings.fileCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.customerCompress,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => _ctx.$emit('update:customerCompress', $event))\n }, null, 8, [\"model-value\"])]), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_25, [_createElementVNode(\"span\", _hoisted_26, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.compressThreshold')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.compressThresholdTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_27, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => _ctx.$emit('update:compressBar', $event)),\n min: 1,\n max: 20,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"model-value\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_28, [_createVNode(_component_el_input_number, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => _ctx.$emit('update:compressBar', $event)),\n min: 1,\n max: 20,\n step: 1,\n \"value-on-clear\": 1,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\"]), _cache[19] || (_cache[19] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [_createElementVNode(\"span\", _hoisted_30, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.expectedSize')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.expectedSizeTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_31, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => _ctx.$emit('update:compressQuality', $event)),\n min: 0.5,\n max: $props.compressBar,\n step: 0.1,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"model-value\", \"max\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_32, [_createVNode(_component_el_input_number, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => _ctx.$emit('update:compressQuality', $event)),\n min: 0.5,\n max: $props.compressBar,\n step: 0.1,\n precision: 1,\n \"value-on-clear\": 0.5,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\", \"max\"]), _cache[20] || (_cache[20] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true)])]), $props.uploadChannel === 'telegram' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [_createElementVNode(\"div\", _hoisted_34, [_createElementVNode(\"span\", _hoisted_35, _toDisplayString(_ctx.$t('uploadSettings.serverCompress')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.serverCompressTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_36, [_createElementVNode(\"div\", _hoisted_37, [_createElementVNode(\"span\", _hoisted_38, _toDisplayString(_ctx.$t('uploadSettings.enableCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.serverCompress,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => _ctx.$emit('update:serverCompress', $event))\n }, null, 8, [\"model-value\"])])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_39, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[11] || (_cache[11] = $event => $options.visible = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]);\n}","import ChannelIcon from '@/components/icons/ChannelIcon.vue';\nexport default {\n name: 'UploadSettingsDialog',\n components: {\n ChannelIcon\n },\n methods: {\n handleUploadFolderInput(val) {\n // 自动补全前导 /\n if (val && !val.startsWith('/')) {\n val = '/' + val;\n }\n this.$emit('update:uploadFolder', val);\n }\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n uploadChannel: {\n type: String,\n default: 'telegram'\n },\n channelName: {\n type: String,\n default: ''\n },\n currentChannelList: {\n type: Array,\n default: () => []\n },\n uploadFolder: {\n type: String,\n default: ''\n },\n autoRetry: {\n type: Boolean,\n default: true\n },\n uploadNameType: {\n type: String,\n default: 'default'\n },\n convertToWebp: {\n type: Boolean,\n default: false\n },\n customerCompress: {\n type: Boolean,\n default: true\n },\n compressBar: {\n type: Number,\n default: 5\n },\n compressQuality: {\n type: Number,\n default: 4\n },\n serverCompress: {\n type: Boolean,\n default: true\n }\n },\n emits: ['update:modelValue', 'update:uploadChannel', 'update:channelName', 'update:uploadFolder', 'update:autoRetry', 'update:uploadNameType', 'update:convertToWebp', 'update:customerCompress', 'update:compressBar', 'update:compressQuality', 'update:serverCompress'],\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadSettingsDialog.vue?vue&type=template&id=1c6b8366\"\nimport script from \"./UploadSettingsDialog.vue?vue&type=script&lang=js\"\nexport * from \"./UploadSettingsDialog.vue?vue&type=script&lang=js\"\n\nimport \"@/styles/settings-dialog.css?vue&type=style&index=0&lang=css&external\"\nimport \"./UploadSettingsDialog.css?vue&type=style&index=1&lang=css&external\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-list-item\"\n};\nconst _hoisted_2 = [\"href\"];\nconst _hoisted_3 = {\n key: 0,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n autoplay: \"\",\n muted: \"\",\n playsinline: \"\",\n loop: \"\"\n};\nconst _hoisted_4 = [\"src\"];\nconst _hoisted_5 = [\"src\"];\nconst _hoisted_6 = {\n key: 2,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n }\n};\nconst _hoisted_7 = {\n class: \"upload-list-item-content\"\n};\nconst _hoisted_8 = {\n class: \"upload-list-item-name-wrapper\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"upload-list-item-url\"\n};\nconst _hoisted_10 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_11 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_12 = {\n key: 1,\n class: \"upload-list-item-progress\"\n};\nconst _hoisted_13 = {\n class: \"upload-list-item-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_text = _resolveComponent(\"el-text\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_Link = _resolveComponent(\"Link\");\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_Delete = _resolveComponent(\"Delete\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"a\", {\n href: $props.file.url,\n target: \"_blank\",\n class: \"upload-list-item-preview\"\n }, [$options.isVideo($props.file.name) ? (_openBlock(), _createElementBlock(\"video\", _hoisted_3, [_createElementVNode(\"source\", {\n src: $props.file.url,\n type: \"video/mp4\"\n }, null, 8, _hoisted_4), _cache[7] || (_cache[7] = _createTextVNode(\" Your browser does not support the video tag. \", -1))])) : $options.isImage($props.file.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 1,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n src: $props.file.url,\n onError: _cache[0] || (_cache[0] = $event => _ctx.$emit('preview-error', $props.file))\n }, null, 40, _hoisted_5)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })]))], 8, _hoisted_2), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"div\", _hoisted_8, [_createVNode(_component_el_text, {\n class: \"upload-list-item-name\",\n truncated: \"\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.truncateFilename($props.file.name)), 1)]),\n _: 1\n })]), $props.file.status === 'done' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [_createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_input, {\n modelValue: $props.file.finalURL,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $props.file.finalURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[8] || (_cache[8] = [_createTextVNode(\"URL\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: $props.file.mdURL,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $props.file.mdURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[9] || (_cache[9] = [_createTextVNode(\"MarkDown\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"])]), _createElementVNode(\"div\", _hoisted_11, [_createVNode(_component_el_input, {\n modelValue: $props.file.htmlURL,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $props.file.htmlURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[10] || (_cache[10] = [_createTextVNode(\"HTML\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: $props.file.ubbURL,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $props.file.ubbURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[11] || (_cache[11] = [_createTextVNode(\"BBCode\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"])])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [_createVNode(_component_el_progress, {\n percentage: $props.file.progreess,\n status: $props.file.status,\n \"show-text\": false\n }, null, 8, [\"percentage\", \"status\"])]))]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-primary\",\n onClick: _cache[5] || (_cache[5] = $event => _ctx.$emit('copy', $props.file))\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Link)]),\n _: 1\n })]), _createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-danger\",\n onClick: _cache[6] || (_cache[6] = $event => _ctx.$emit('remove', $props.file))\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Delete)]),\n _: 1\n })])])]);\n}","import { Link, Delete } from '@element-plus/icons-vue';\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp', 'raw', 'cr2', 'nef', 'dng', 'eps', 'ai', 'emf', 'wmf'];\nconst VIDEO_EXTENSIONS = ['mp4', 'webm', 'ogg', 'mkv'];\nexport default {\n name: 'UploadFileItem',\n components: {\n Link,\n Delete\n },\n props: {\n file: {\n type: Object,\n required: true\n }\n },\n emits: ['copy', 'remove', 'preview-error'],\n computed: {\n urlSize() {\n return window.innerWidth < 768 ? 'small' : 'default';\n }\n },\n methods: {\n isImage(fileName) {\n const ext = fileName.split('.').pop().toLowerCase();\n return IMAGE_EXTENSIONS.includes(ext);\n },\n isVideo(fileName) {\n const ext = fileName.split('.').pop().toLowerCase();\n return VIDEO_EXTENSIONS.includes(ext);\n },\n truncateFilename(filename, maxLength = 20) {\n if (!filename || filename.length <= maxLength) return filename;\n const lastDotIndex = filename.lastIndexOf('.');\n let name, ext;\n if (lastDotIndex > 0) {\n name = filename.substring(0, lastDotIndex);\n ext = filename.substring(lastDotIndex);\n } else {\n name = filename;\n ext = '';\n }\n const keepEnd = ext.length + 4;\n const keepStart = maxLength - keepEnd - 3;\n if (keepStart <= 0) return filename.substring(0, maxLength - 3) + '...';\n return name.substring(0, keepStart) + '...' + name.slice(-4) + ext;\n },\n selectAllText(event) {\n navigator.clipboard.writeText(event.target.value).then(() => {\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copySuccess')\n });\n }).catch(() => {\n this.$message({\n type: 'error',\n message: this.$t('uploadForm.copyFailed')\n });\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadFileItem.vue?vue&type=template&id=645a7810&scoped=true\"\nimport script from \"./UploadFileItem.vue?vue&type=script&lang=js\"\nexport * from \"./UploadFileItem.vue?vue&type=script&lang=js\"\n\nimport \"./UploadFileItem.vue?vue&type=style&index=0&id=645a7810&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-645a7810\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-form\"\n};\nconst _hoisted_2 = {\n class: \"upload-card-glow\",\n ref: \"uploadCardGlow\"\n};\nconst _hoisted_3 = [\"innerHTML\"];\nconst _hoisted_4 = {\n key: 0,\n class: \"upload-card\"\n};\nconst _hoisted_5 = {\n class: \"paste-card-actions\"\n};\nconst _hoisted_6 = [\"aria-label\"];\nconst _hoisted_7 = [\"aria-pressed\"];\nconst _hoisted_8 = [\"aria-pressed\"];\nconst _hoisted_9 = {\n class: \"upload-list-container\"\n};\nconst _hoisted_10 = {\n class: \"upload-list-dashboard-action\"\n};\nconst _hoisted_11 = {\n class: \"modern-action-group\"\n};\nconst _hoisted_12 = {\n class: \"modern-dropdown-item-content\"\n};\nconst _hoisted_13 = {\n class: \"modern-action-btn modern-action-btn-danger\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_el_upload = _resolveComponent(\"el-upload\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_card = _resolveComponent(\"el-card\");\n const _component_List = _resolveComponent(\"List\");\n const _component_Checked = _resolveComponent(\"Checked\");\n const _component_Failed = _resolveComponent(\"Failed\");\n const _component_el_text = _resolveComponent(\"el-text\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_UploadFileItem = _resolveComponent(\"UploadFileItem\");\n const _component_el_scrollbar = _resolveComponent(\"el-scrollbar\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", {\n class: \"upload-card-wrapper\",\n onMousemove: _cache[0] || (_cache[0] = (...args) => $options.handleUploadCardMouseMove && $options.handleUploadCardMouseMove(...args)),\n onMouseleave: _cache[1] || (_cache[1] = (...args) => $options.handleUploadCardMouseLeave && $options.handleUploadCardMouseLeave(...args))\n }, [_createElementVNode(\"div\", _hoisted_2, null, 512), $props.uploadMethod === 'default' ? (_openBlock(), _createBlock(_component_el_upload, {\n key: 0,\n class: _normalizeClass([\"upload-card\", {\n 'is-uploading': $data.uploading,\n 'upload-card-busy': $data.fileList.length\n }]),\n drag: \"\",\n multiple: \"\",\n \"http-request\": $options.uploadFile,\n onSuccess: $options.handleSuccess,\n \"on-error\": $options.handleError,\n \"before-upload\": $options.beforeUpload,\n \"on-progress\": $options.handleProgress,\n \"file-list\": $data.fileList,\n \"show-file-list\": false\n }, {\n default: _withCtx(() => [_createVNode(_component_el_icon, {\n class: _normalizeClass([\"el-icon--upload\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [...(_cache[9] || (_cache[9] = [_createElementVNode(\"svg\", {\n class: \"upload-plus-icon\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": \"1.25\",\n \"stroke-linecap\": \"round\",\n \"aria-hidden\": \"true\"\n }, [_createElementVNode(\"path\", {\n d: \"M12 7v10\"\n }), _createElementVNode(\"path\", {\n d: \"M7 12h10\"\n })], -1)]))]),\n _: 1\n }, 8, [\"class\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"el-upload__text\", {\n 'upload-list-busy': $data.fileList.length\n }]),\n innerHTML: _ctx.$t('upload.dragUploadText')\n }, null, 10, _hoisted_3)]),\n _: 1\n }, 8, [\"class\", \"http-request\", \"onSuccess\", \"on-error\", \"before-upload\", \"on-progress\", \"file-list\"])) : _createCommentVNode(\"\", true)], 32), $props.uploadMethod === 'paste' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [_createVNode(_component_el_card, {\n class: _normalizeClass([\"paste-card\", {\n 'is-uploading': $data.uploading,\n 'upload-card-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.pastedUrls,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.pastedUrls = $event),\n class: \"upload-card-textarea\",\n placeholder: _ctx.$t('upload.pasteUrlPlaceholder'),\n type: \"textarea\",\n rows: $data.fileList.length ? 4 : 14\n }, null, 8, [\"modelValue\", \"placeholder\", \"rows\"]), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_button, {\n class: \"paste-card-upload-button\",\n type: \"primary\",\n size: $options.pasteCardMethodButtonSize,\n onClick: $options.handleUploadPasteUrls\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.pasteUploadBtn')), 1)]),\n _: 1\n }, 8, [\"size\", \"onClick\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"paste-card-method-group\", {\n 'is-external': $data.pasteUploadMethod === 'external'\n }]),\n role: \"group\",\n \"aria-label\": _ctx.$t('upload.switchUploadMethod')\n }, [_createElementVNode(\"button\", {\n class: _normalizeClass([\"paste-card-method-button\", {\n 'is-active': $data.pasteUploadMethod === 'save'\n }]),\n type: \"button\",\n \"aria-pressed\": $data.pasteUploadMethod === 'save',\n onClick: _cache[3] || (_cache[3] = $event => $data.pasteUploadMethod = 'save')\n }, _toDisplayString(_ctx.$t('upload.pasteSave')), 11, _hoisted_7), _createElementVNode(\"button\", {\n class: _normalizeClass([\"paste-card-method-button\", {\n 'is-active': $data.pasteUploadMethod === 'external'\n }]),\n type: \"button\",\n \"aria-pressed\": $data.pasteUploadMethod === 'external',\n onClick: _cache[4] || (_cache[4] = $event => $data.pasteUploadMethod = 'external')\n }, _toDisplayString(_ctx.$t('upload.pasteExternal')), 11, _hoisted_8)], 10, _hoisted_6)])]),\n _: 1\n }, 8, [\"class\"])])) : _createCommentVNode(\"\", true), _createVNode(_component_el_card, {\n class: _normalizeClass([\"upload-list-card\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_9, [_createVNode(_component_el_scrollbar, {\n onScroll: $options.handleScroll,\n ref: \"scrollContainer\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-list-dashboard\", {\n 'list-scrolled': $data.listScrolled\n }])\n }, [_createVNode(_component_el_text, {\n class: \"upload-list-dashboard-title\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_List)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadingCount + $options.waitingCount) + \" \", 1), _createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Checked)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadSuccessCount) + \" \", 1), _createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Failed)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadErrorCount), 1)]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_10, [_createElementVNode(\"div\", _hoisted_11, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.copyAll'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn modern-action-btn-copy\",\n onClick: _cache[5] || (_cache[5] = (...args) => $options.copyAll && $options.copyAll(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.retryFailed'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown, null, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"modern-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadForm.autoRetry')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.autoReUpload,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.autoReUpload = $event),\n onChange: $options.handleAutoRetryChange,\n size: \"small\"\n }, null, 8, [\"modelValue\", \"onChange\"])])]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn modern-action-btn-retry\",\n onClick: _cache[6] || (_cache[6] = (...args) => $options.retryError && $options.retryError(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.clearList'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown, null, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"modern-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n onClick: $options.clearFileList\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.clearAll')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_dropdown_item, {\n onClick: $options.clearSuccessList\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.clearUploaded')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", _hoisted_13, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])], 2), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.fileList.slice().reverse(), file => {\n return _openBlock(), _createBlock(_component_UploadFileItem, {\n key: file.name,\n file: file,\n onCopy: $options.handleCopy,\n onRemove: $options.handleRemove,\n onPreviewError: _cache[8] || (_cache[8] = f => f.url = require('@/assets/404.png'))\n }, null, 8, [\"file\", \"onCopy\", \"onRemove\"]);\n }), 128))]),\n _: 1\n }, 8, [\"onScroll\"])])]),\n _: 1\n }, 8, [\"class\"])]);\n}","/**\r\n * URL 构建工具函数\r\n * 用于生成各种格式的文件链接(原始链接、Markdown、HTML、BBCode)\r\n */\r\n\r\n/**\r\n * 根据 srcID 和文件名生成所有格式的 URL\r\n * @param {string} srcID - 文件资源 ID\r\n * @param {string} name - 文件名\r\n * @param {string} rootUrl - 链接前缀\r\n * @returns {{ finalURL: string, mdURL: string, htmlURL: string, ubbURL: string }}\r\n */\r\nexport function buildFileUrls(srcID, name, rootUrl) {\r\n const url = rootUrl + srcID\r\n return {\r\n finalURL: url,\r\n mdURL: `![${name}](${url})`,\r\n htmlURL: `\"${name}\"`,\r\n ubbURL: `[img]${url}[/img]`\r\n }\r\n}\r\n\r\n/**\r\n * 根据 selectedUrlForm 获取对应格式的 URL 值\r\n * @param {object} file - 文件对象,包含 finalURL/mdURL/htmlURL/ubbURL\r\n * @param {string} format - 格式类型:'url' | 'md' | 'html' | 'ubb'\r\n * @returns {string}\r\n */\r\nexport function getUrlByFormat(file, format) {\r\n const map = {\r\n url: file.finalURL,\r\n md: file.mdURL,\r\n html: file.htmlURL,\r\n ubb: file.ubbURL\r\n }\r\n return map[format] || file.finalURL\r\n}\r\n\r\n/**\r\n * 批量更新文件列表中的 URL(当自定义链接前缀变化时)\r\n * @param {Array} fileList - 文件列表\r\n * @param {string} rootUrl - 新的链接前缀\r\n */\r\nexport function updateFileListUrls(fileList, rootUrl) {\r\n fileList.forEach(item => {\r\n if (item.uploadChannel === 'external') {\r\n return\r\n }\r\n const urls = buildFileUrls(item.srcID, item.name, rootUrl)\r\n Object.assign(item, urls)\r\n })\r\n}\r\n","/**\r\n * SHA256 计算工具\r\n * 纯 JavaScript 实现的增量 SHA256 哈希算法,支持任意大小文件\r\n */\r\n\r\n// SHA256 常量\r\nconst K = new Uint32Array([\r\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\r\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\r\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\r\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\r\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\r\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\r\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\r\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\r\n])\r\n\r\nconst rotr = (x, n) => (x >>> n) | (x << (32 - n))\r\n\r\nfunction processBlock(block, H) {\r\n const W = new Uint32Array(64)\r\n\r\n for (let i = 0; i < 16; i++) {\r\n W[i] = (block[i * 4] << 24) | (block[i * 4 + 1] << 16) | (block[i * 4 + 2] << 8) | block[i * 4 + 3]\r\n }\r\n\r\n for (let i = 16; i < 64; i++) {\r\n const s0 = rotr(W[i - 15], 7) ^ rotr(W[i - 15], 18) ^ (W[i - 15] >>> 3)\r\n const s1 = rotr(W[i - 2], 17) ^ rotr(W[i - 2], 19) ^ (W[i - 2] >>> 10)\r\n W[i] = (W[i - 16] + s0 + W[i - 7] + s1) >>> 0\r\n }\r\n\r\n let [a, b, c, d, e, f, g, h] = H\r\n\r\n for (let i = 0; i < 64; i++) {\r\n const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25)\r\n const ch = (e & f) ^ (~e & g)\r\n const temp1 = (h + S1 + ch + K[i] + W[i]) >>> 0\r\n const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)\r\n const maj = (a & b) ^ (a & c) ^ (b & c)\r\n const temp2 = (S0 + maj) >>> 0\r\n\r\n h = g; g = f; f = e\r\n e = (d + temp1) >>> 0\r\n d = c; c = b; b = a\r\n a = (temp1 + temp2) >>> 0\r\n }\r\n\r\n H[0] = (H[0] + a) >>> 0\r\n H[1] = (H[1] + b) >>> 0\r\n H[2] = (H[2] + c) >>> 0\r\n H[3] = (H[3] + d) >>> 0\r\n H[4] = (H[4] + e) >>> 0\r\n H[5] = (H[5] + f) >>> 0\r\n H[6] = (H[6] + g) >>> 0\r\n H[7] = (H[7] + h) >>> 0\r\n}\r\n\r\n/**\r\n * 创建增量 SHA256 哈希器\r\n * @returns {{ update: (data: Uint8Array) => void, digest: () => string }}\r\n */\r\nexport function createSha256() {\r\n let H = new Uint32Array([\r\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\r\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\r\n ])\r\n\r\n let buffer = new Uint8Array(64)\r\n let bufferLength = 0\r\n let totalLength = 0\r\n\r\n return {\r\n update(data) {\r\n totalLength += data.length\r\n let offset = 0\r\n\r\n if (bufferLength > 0) {\r\n const needed = 64 - bufferLength\r\n const toCopy = Math.min(needed, data.length)\r\n buffer.set(data.subarray(0, toCopy), bufferLength)\r\n bufferLength += toCopy\r\n offset = toCopy\r\n\r\n if (bufferLength === 64) {\r\n processBlock(buffer, H)\r\n bufferLength = 0\r\n }\r\n }\r\n\r\n while (offset + 64 <= data.length) {\r\n processBlock(data.subarray(offset, offset + 64), H)\r\n offset += 64\r\n }\r\n\r\n if (offset < data.length) {\r\n buffer.set(data.subarray(offset), 0)\r\n bufferLength = data.length - offset\r\n }\r\n },\r\n digest() {\r\n const bitLength = totalLength * 8\r\n\r\n // Padding\r\n buffer[bufferLength++] = 0x80\r\n\r\n if (bufferLength > 56) {\r\n buffer.fill(0, bufferLength, 64)\r\n processBlock(buffer, H)\r\n bufferLength = 0\r\n }\r\n\r\n buffer.fill(0, bufferLength, 56)\r\n\r\n // Length in bits (big-endian, 64-bit)\r\n const view = new DataView(buffer.buffer)\r\n view.setUint32(56, Math.floor(bitLength / 0x100000000), false)\r\n view.setUint32(60, bitLength >>> 0, false)\r\n\r\n processBlock(buffer, H)\r\n\r\n // Convert to hex\r\n let hex = ''\r\n for (let i = 0; i < 8; i++) {\r\n hex += H[i].toString(16).padStart(8, '0')\r\n }\r\n return hex\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 计算文件的 SHA256 哈希\r\n * 使用增量哈希算法,支持任意大小文件\r\n * @param {File} file - 要计算哈希的文件\r\n * @returns {Promise} SHA256 哈希值(十六进制字符串)\r\n */\r\nexport async function computeSha256(file) {\r\n const sha256 = createSha256()\r\n\r\n const CHUNK_SIZE = 4 * 1024 * 1024 // 4MB chunks\r\n let offset = 0\r\n\r\n while (offset < file.size) {\r\n const chunk = file.slice(offset, Math.min(offset + CHUNK_SIZE, file.size))\r\n const buffer = await chunk.arrayBuffer()\r\n sha256.update(new Uint8Array(buffer))\r\n offset += CHUNK_SIZE\r\n\r\n // 每处理 20MB 打印一次进度\r\n if (offset % (20 * 1024 * 1024) < CHUNK_SIZE) {\r\n console.log(`SHA256 progress: ${Math.min(100, Math.round(offset / file.size * 100))}%`)\r\n }\r\n }\r\n\r\n return sha256.digest()\r\n}\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.typed-array.with.js\";\nimport \"core-js/modules/esnext.uint8-array.set-from-base64.js\";\nimport \"core-js/modules/esnext.uint8-array.set-from-hex.js\";\nimport \"core-js/modules/esnext.uint8-array.to-base64.js\";\nimport \"core-js/modules/esnext.uint8-array.to-hex.js\";\nimport \"core-js/modules/web.dom-exception.stack.js\";\nimport axios from '@/utils/axios';\nimport * as imageConversion from 'image-conversion';\nimport { mapGetters } from 'vuex';\nimport { buildFileUrls, updateFileListUrls, getUrlByFormat } from '@/utils/upload/urlBuilder';\nimport { computeSha256 } from '@/utils/upload/sha256';\nimport UploadFileItem from '@/components/upload/UploadFileItem.vue';\nexport default {\n name: 'UploadForm',\n components: {\n UploadFileItem\n },\n props: {\n selectedUrlForm: {\n type: String,\n default: 'url',\n required: false\n },\n customerCompress: {\n type: Boolean,\n default: true,\n required: false\n },\n compressQuality: {\n type: Number,\n default: 4,\n required: false\n },\n compressBar: {\n type: Number,\n default: 5,\n required: false\n },\n serverCompress: {\n type: Boolean,\n default: true,\n required: false\n },\n uploadChannel: {\n type: String,\n default: 'telegram',\n required: false\n },\n channelName: {\n type: String,\n default: '',\n required: false\n },\n uploadNameType: {\n type: String,\n default: 'default',\n required: false\n },\n useCustomUrl: {\n type: String,\n default: 'false',\n required: false\n },\n customUrlPrefix: {\n type: String,\n default: '',\n required: false\n },\n autoRetry: {\n type: Boolean,\n default: true,\n required: false\n },\n urlPrefix: {\n type: String,\n default: '',\n required: false\n },\n uploadMethod: {\n type: String,\n default: 'default',\n required: false\n },\n uploadFolder: {\n type: String,\n default: '',\n required: false\n },\n convertToWebp: {\n type: Boolean,\n default: false,\n required: false\n }\n },\n data() {\n return {\n fileList: [],\n uploading: false,\n maxUploading: 6,\n exceptionList: [],\n listScrolled: false,\n fileListLength: 0,\n uploadCount: 0,\n pastedUrls: '',\n pasteUploadMethod: 'save',\n // 失败文件自动重试相关\n autoReUpload: true,\n maxRetryCount: 10,\n // 最大重试次数\n retryTimer: null,\n // 自动重试定时器\n retryDelay: 12000,\n // 重试延迟时间(毫秒)\n // 批量上传并发控制\n uploadQueue: [],\n // 等待上传的文件队列\n activeUploads: 0,\n // 当前正在上传的文件数\n maxConcurrentUploads: 6,\n // 最大并发上传数\n // 取消上传控制\n abortControllers: new Map() // 存储每个文件的 AbortController\n };\n },\n watch: {\n fileList: {\n handler() {\n if (this.fileList.length > this.fileListLength) {\n this.$nextTick(() => {\n setTimeout(() => {\n if (this.$refs.scrollContainer) {\n // this.$refs.scrollContainer.setScrollTop(this.$refs.scrollContainer.wrapRef.scrollHeight) // 滚动到底部\n this.$refs.scrollContainer.setScrollTop(0); // 滚动到顶部\n }\n }, 100);\n });\n }\n this.fileListLength = this.fileList.length;\n },\n deep: true\n },\n useCustomUrl: {\n handler() {\n updateFileListUrls(this.fileList, this.rootUrl);\n },\n immediate: true\n },\n customUrlPrefix: {\n handler() {\n if (this.useCustomUrl === 'true') {\n updateFileListUrls(this.fileList, this.rootUrl);\n }\n },\n immediate: true\n },\n autoReUpload(val) {\n this.$store.commit('setStoreAutoReUpload', val);\n }\n },\n computed: {\n ...mapGetters(['storeAutoReUpload']),\n uploadSuccessCount() {\n return this.fileList.filter(item => item.status === 'done' || item.status === 'success').length;\n },\n uploadErrorCount() {\n return this.fileList.filter(item => item.status === 'exception').length;\n },\n uploadingCount() {\n return this.fileList.filter(item => item.status === 'uploading').length;\n },\n waitingCount() {\n return this.uploadQueue.length;\n },\n urlSize() {\n // 移动端为small\n return window.innerWidth < 768 ? 'small' : 'default';\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n rootUrl() {\n // 链接前缀,优先级:用户自定义 > urlPrefix > 默认\n return this.useCustomUrl === 'true' ? this.customUrlPrefix : this.urlPrefix || `${window.location.protocol}//${window.location.host}/file/`;\n },\n pasteCardMethodButtonSize() {\n if (this.fileList.length) {\n return 'small';\n } else {\n return window.innerWidth < 768 ? 'small' : 'medium';\n }\n }\n },\n mounted() {\n document.addEventListener('paste', this.handlePaste);\n this.autoReUpload = this.storeAutoReUpload;\n },\n beforeUnmount() {\n document.removeEventListener('paste', this.handlePaste);\n // 清理状态\n this.uploadQueue = [];\n this.fileList = [];\n this.activeUploads = 0;\n },\n methods: {\n // 文件名中间截断,保留前缀和扩展名\n truncateFilename(filename, maxLength = 20) {\n if (!filename || filename.length <= maxLength) {\n return filename;\n }\n const lastDotIndex = filename.lastIndexOf('.');\n let name, ext;\n if (lastDotIndex > 0) {\n name = filename.substring(0, lastDotIndex);\n ext = filename.substring(lastDotIndex);\n } else {\n name = filename;\n ext = '';\n }\n // 保留扩展名和部分前后缀\n const keepEnd = ext.length + 4; // 扩展名 + 4个字符\n const keepStart = maxLength - keepEnd - 3; // 3个字符留给...\n if (keepStart <= 0) {\n return filename.substring(0, maxLength - 3) + '...';\n }\n return name.substring(0, keepStart) + '...' + name.slice(-4) + ext;\n },\n uploadFile(file) {\n // 如果fileList中不存在该文件,说明已被删除,直接返回\n if (!this.fileList.find(item => item.uid === file.file.uid)) {\n return;\n }\n\n // 并发控制:如果当前上传数已达上限,加入队列等待\n if (this.activeUploads >= this.maxConcurrentUploads) {\n this.uploadQueue.push(file);\n const waitingItem = this.fileList.find(item => item.uid === file.file.uid);\n if (waitingItem) waitingItem.status = 'waiting';\n return;\n }\n\n // 开始上传,增加计数\n this.activeUploads++;\n const uploadingItem = this.fileList.find(item => item.uid === file.file.uid);\n if (uploadingItem) uploadingItem.status = 'uploading';\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n const uploadChannel = fileItem?.uploadChannel || this.uploadChannel;\n\n // 如果上传渠道为外链,直接使用外链上传\n if (uploadChannel === 'external') {\n this.uploadSingleFile(file);\n return;\n }\n\n // HuggingFace 渠道:根据文件大小选择上传方式\n // 小文件(<20MB):通过 CF Workers 代理上传\n // 大文件(>=20MB):前端直传到 HuggingFace S3,绕过 CF Workers 限制\n if (uploadChannel === 'huggingface') {\n const HF_DIRECT_THRESHOLD = 20 * 1024 * 1024; // 20MB\n if (file.file.size >= HF_DIRECT_THRESHOLD) {\n this.uploadToHuggingFaceDirect(file);\n } else {\n this.uploadSingleFile(file);\n }\n return;\n }\n\n // Discord 渠道:限制 10MB,超过 9MB 就用分块上传(留安全余量)\n if (uploadChannel === 'discord') {\n const DISCORD_CHUNK_THRESHOLD = 9 * 1024 * 1024; // 9MB\n if (file.file.size > DISCORD_CHUNK_THRESHOLD) {\n this.uploadFileInChunks(file);\n } else {\n this.uploadSingleFile(file);\n }\n return;\n }\n\n // 其他渠道,检查文件大小,决定是否使用分块上传\n const CHUNK_THRESHOLD = 20 * 1024 * 1024; // 20MB\n if (file.file.size > CHUNK_THRESHOLD) {\n this.uploadFileInChunks(file);\n } else {\n this.uploadSingleFile(file);\n }\n },\n // 处理上传队列中的下一个文件\n processUploadQueue() {\n // 如果队列为空或已达并发上限,不处理\n if (this.uploadQueue.length === 0 || this.activeUploads >= this.maxConcurrentUploads) {\n return;\n }\n\n // 从队列中取出下一个文件并上传\n const nextFile = this.uploadQueue.shift();\n if (nextFile && this.fileList.find(item => item.uid === nextFile.file.uid)) {\n this.uploadFile(nextFile);\n } else {\n // 如果文件已被删除,继续处理下一个\n this.processUploadQueue();\n }\n },\n // 上传完成后的清理工作(成功或失败都调用)\n onUploadComplete() {\n this.activeUploads = Math.max(0, this.activeUploads - 1);\n\n // 处理队列中的下一个文件\n this.processUploadQueue();\n\n // 更新上传状态\n if (this.activeUploads === 0 && this.uploadQueue.length === 0) {\n this.uploading = false;\n }\n },\n // 单文件上传\n async uploadSingleFile(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return; // 文件已被删除\n\n const needServerCompress = fileItem.serverCompress;\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n const autoRetry = this.autoRetry && uploadChannel !== 'external';\n const uploadNameType = uploadChannel === 'external' ? 'default' : this.uploadNameType;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n const formData = new FormData();\n formData.append('file', file.file);\n if (uploadChannel === 'external') {\n formData.append('url', file.file.url);\n }\n\n // HuggingFace 渠道:在前端预计算 SHA256,避免后端 CPU 超时\n if (uploadChannel === 'huggingface') {\n try {\n console.log('Computing SHA256 for HuggingFace upload...');\n const sha256 = await computeSha256(file.file);\n formData.append('sha256', sha256);\n console.log('SHA256 computed:', sha256);\n } catch (err) {\n console.error('Failed to compute SHA256:', err);\n // 继续上传,让后端计算(可能会超时)\n }\n }\n axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder),\n method: 'post',\n data: formData,\n withAuthCode: true,\n signal: abortController.signal,\n // 添加取消信号\n onUploadProgress: progressEvent => {\n const percentCompleted = Math.round(progressEvent.loaded / progressEvent.total * 100);\n file.onProgress({\n percent: percentCompleted,\n file: file.file\n });\n }\n }).then(res => {\n file.onSuccess(res, file.file);\n }).catch(err => {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n console.log('上传已取消:', file.file.name);\n return;\n }\n if (err.response && err.response.status !== 401) {\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } else if (!err.response) {\n // 网络错误(如 ERR_HTTP2_PROTOCOL_ERROR),也加入异常列表\n this.exceptionList.push(file);\n file.onError(err, file.file);\n }\n }).finally(() => {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n });\n },\n // 分块上传\n async uploadFileInChunks(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return; // 文件已被删除\n\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n\n // Discord 使用 9MB 分块(留安全余量,Discord 限制 10MB)\n // Telegram 使用 16MB 分块(TG Bot getFile 下载限制 20MB,留 4MB 安全余量)\n // 其他渠道使用 16MB 分块\n const CHUNK_SIZE = uploadChannel === 'discord' ? 9 * 1024 * 1024 // 9MB for Discord\n : 16 * 1024 * 1024; // 16MB for Telegram and others (TG getFile limit: 20MB)\n\n const fileSize = file.file.size;\n const fileType = file.file.type || 'application/octet-stream';\n const totalChunks = Math.ceil(fileSize / CHUNK_SIZE);\n const needServerCompress = fileItem.serverCompress;\n const autoRetry = this.autoRetry && uploadChannel !== 'external';\n const uploadNameType = uploadChannel === 'external' ? 'default' : this.uploadNameType;\n\n // HuggingFace 渠道:在前端预计算 SHA256\n let precomputedSha256 = null;\n if (uploadChannel === 'huggingface') {\n try {\n console.log('Computing SHA256 for HuggingFace chunked upload...');\n precomputedSha256 = await computeSha256(file.file);\n console.log('SHA256 computed:', precomputedSha256);\n } catch (err) {\n console.error('Failed to compute SHA256:', err);\n }\n }\n try {\n // 第一步:初始化分块上传,获取uploadId\n const initFormData = new FormData();\n initFormData.append('originalFileName', file.file.name);\n initFormData.append('originalFileType', fileType);\n initFormData.append('totalChunks', totalChunks.toString());\n const initResponse = await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder) + '&initChunked=true',\n method: 'post',\n data: initFormData,\n withAuthCode: true\n });\n if (!initResponse.data.success) {\n throw new Error(this.$t('uploadForm.chunkInitFailed') + ': ' + initResponse.data.message);\n }\n const uploadId = initResponse.data.uploadId;\n console.log('分块上传初始化成功,uploadId:', uploadId);\n\n // 记录 totalChunks 和 uploadId 到文件项,用于后续清理\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (fileItem) {\n fileItem.totalChunks = totalChunks;\n fileItem.uploadId = uploadId;\n }\n\n // 第二步:并发上传所有分块\n const maxConcurrency = 3; // 最大并发数\n const chunkProgress = new Array(totalChunks).fill(0);\n let nextChunkIndex = 0;\n let hasError = false;\n let errorMsg = '';\n let isCancelled = false; // 标记是否被取消\n\n const uploadChunk = async chunkIndex => {\n if (hasError || isCancelled) return;\n const start = chunkIndex * CHUNK_SIZE;\n const end = Math.min(start + CHUNK_SIZE, fileSize);\n const chunk = file.file.slice(start, end);\n const formData = new FormData();\n formData.append('file', chunk, `${file.file.name}.part${chunkIndex.toString().padStart(3, '0')}`);\n formData.append('chunkIndex', chunkIndex.toString());\n formData.append('totalChunks', totalChunks.toString());\n formData.append('uploadId', uploadId);\n formData.append('originalFileName', file.file.name);\n formData.append('originalFileType', fileType);\n let retryCount = 0;\n const maxRetries = 3;\n while (retryCount < maxRetries) {\n if (hasError || isCancelled) return;\n try {\n await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder) + '&chunked=true',\n method: 'post',\n data: formData,\n withAuthCode: true,\n signal: abortController.signal,\n // 添加取消信号\n onUploadProgress: progressEvent => {\n if (hasError || isCancelled) return;\n const percent = Math.round(progressEvent.loaded / progressEvent.total * 100);\n chunkProgress[chunkIndex] = percent;\n const totalPercent = Math.round(chunkProgress.reduce((a, b) => a + b, 0) / totalChunks);\n file.onProgress({\n percent: totalPercent,\n file: file.file\n });\n }\n });\n return; // Success\n } catch (err) {\n // 如果是取消操作,直接返回\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n isCancelled = true;\n console.log('分块上传已取消:', file.file.name);\n return;\n }\n retryCount++;\n console.warn(`分块 ${chunkIndex + 1}/${totalChunks} 上传失败 (重试 ${retryCount}/${maxRetries}):`, err);\n if (retryCount >= maxRetries) {\n hasError = true;\n errorMsg = `分块 ${chunkIndex + 1}/${totalChunks} 上传失败: ${err.message}`;\n throw new Error(errorMsg);\n }\n // 等待后重试\n await new Promise(resolve => setTimeout(resolve, 2000 * retryCount));\n }\n }\n };\n\n // 创建并发池\n const pool = [];\n for (let i = 0; i < maxConcurrency; i++) {\n pool.push((async () => {\n while (nextChunkIndex < totalChunks && !hasError && !isCancelled) {\n const currentIndex = nextChunkIndex++;\n try {\n await uploadChunk(currentIndex);\n } catch (e) {\n if (!isCancelled) {\n hasError = true;\n errorMsg = e.message;\n }\n break;\n }\n }\n })());\n }\n await Promise.all(pool);\n\n // 如果被取消,直接返回\n if (isCancelled) {\n console.log('分块上传已取消,跳过合并步骤');\n return;\n }\n if (hasError) {\n throw new Error(errorMsg || this.$t('uploadForm.uploadError'));\n }\n\n // 第三步:所有分块上传完成,发送合并请求\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.chunkMerging'),\n duration: 0 // 不自动关闭\n });\n const mergeFormData = new FormData();\n mergeFormData.append('uploadId', uploadId);\n mergeFormData.append('totalChunks', totalChunks.toString());\n mergeFormData.append('originalFileName', file.file.name);\n mergeFormData.append('originalFileType', fileType);\n // HuggingFace 渠道:传递预计算的 SHA256\n if (precomputedSha256) {\n mergeFormData.append('sha256', precomputedSha256);\n }\n const response = await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder) + '&chunked=true&merge=true',\n method: 'post',\n data: mergeFormData,\n withAuthCode: true\n });\n\n // 关闭提示\n this.$message.closeAll();\n\n // 同步处理完成\n file.onSuccess(response, file.file);\n } catch (err) {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n console.log('分块上传已取消:', file.file.name);\n return;\n }\n console.error('分块上传失败:', err);\n\n // 如果有uploadId,清理相关资源\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (fileItem && fileItem.uploadId) {\n this.cleanupUploadResources(fileItem.uploadId, fileItem.totalChunks).then(() => {\n console.log(`已清理分块上传失败的资源: ${fileItem.uploadId}`);\n }).catch(cleanupError => {\n console.warn('清理分块上传失败资源时出错:', cleanupError);\n });\n }\n if (err.response && err.response.status !== 401) {\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } else if (!err.response) {\n // 网络错误,也加入异常列表\n this.exceptionList.push(file);\n file.onError(err, file.file);\n }\n } finally {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n }\n },\n handleRemove(file) {\n // 如果文件正在上传,取消上传\n if (this.abortControllers.has(file.uid)) {\n this.abortControllers.get(file.uid).abort();\n this.abortControllers.delete(file.uid);\n }\n // 从上传队列中移除(如果在等待中)\n this.uploadQueue = this.uploadQueue.filter(item => item.file.uid !== file.uid);\n // 从文件列表中移除\n this.fileList = this.fileList.filter(item => item.uid !== file.uid);\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.deleted', {\n name: this.truncateFilename(file.name)\n })\n });\n },\n // 清理上传资源\n async cleanupUploadResources(uploadId, totalChunks = 0) {\n try {\n await axios({\n url: `/upload?cleanup=true&uploadId=${uploadId}&totalChunks=${totalChunks}`,\n method: 'get',\n withAuthCode: true,\n timeout: 5000\n });\n console.log(`清理上传资源成功: ${uploadId}`);\n } catch (error) {\n console.warn('清理上传资源失败:', error);\n }\n },\n handleSuccess(response, file) {\n const fileItem = this.fileList.find(item => item.uid === file.uid);\n if (!fileItem) return; // 文件已被删除\n\n try {\n // 对上传渠道为外链的,不修改链接\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n if (uploadChannel !== 'external') {\n // 从response.data[0].src中去除/file/前缀\n const srcID = response.data[0].src.replace('/file/', '');\n fileItem.url = `${window.location.protocol}//${window.location.host}/file/` + srcID;\n const urls = buildFileUrls(srcID, file.name, this.rootUrl);\n Object.assign(fileItem, urls);\n fileItem.srcID = srcID;\n }\n fileItem.progreess = 100;\n fileItem.status = 'success';\n\n // Save to history\n this.saveToHistory(fileItem);\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.uploadSuccess', {\n name: this.truncateFilename(file.name)\n })\n });\n setTimeout(() => {\n const item = this.fileList.find(item => item.uid === file.uid);\n if (item) item.status = 'done';\n }, 1000);\n } catch (error) {\n this.$message.error(this.$t('uploadForm.uploadFailed', {\n name: this.truncateFilename(file.name)\n }));\n fileItem.status = 'exception';\n }\n // 注意:并发控制的 onUploadComplete 已在各上传方法的 finally 中调用\n },\n saveToHistory(fileItem) {\n try {\n const history = JSON.parse(localStorage.getItem('uploadHistory') || '[]');\n const newRecord = {\n name: fileItem.name,\n url: fileItem.finalURL,\n time: Date.now(),\n type: fileItem.name.split('.').pop().toLowerCase()\n };\n history.push(newRecord);\n localStorage.setItem('uploadHistory', JSON.stringify(history));\n } catch (e) {\n console.error('Failed to save history', e);\n }\n },\n handleError(err, file) {\n const fileItem = this.fileList.find(item => item.uid === file.uid);\n if (!fileItem) return; // 文件已被删除\n\n this.$message.error(this.$t('uploadForm.uploadFailed', {\n name: this.truncateFilename(file.name)\n }));\n fileItem.status = 'exception';\n\n // 如果开启了自动重试,安排自动重试\n if (this.autoReUpload) {\n this.scheduleAutoRetry();\n }\n // 注意:并发控制的 onUploadComplete 已在各上传方法的 finally 中调用\n },\n handleCopy(file) {\n const status = this.fileList.find(item => item.uid === file.uid).status;\n if (status !== 'done' && status !== 'success') {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.fileNotUploaded')\n });\n return;\n }\n navigator.clipboard.writeText(getUrlByFormat(file, this.selectedUrlForm));\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copySuccess')\n });\n },\n beforeUpload(file) {\n return new Promise(async (resolve, reject) => {\n let processedFile = file;\n\n // WebP 转换:在压缩之前进行\n // 条件:1.开启WebP转换 2.文件类型为图片 3.不是WebP/GIF/SVG格式\n const canConvertToWebp = this.convertToWebp && file.type.includes('image') && !file.type.includes('webp') && !file.type.includes('gif') && !file.type.includes('svg');\n if (canConvertToWebp) {\n try {\n const convertedFile = await this.convertImageToWebp(file);\n if (convertedFile) {\n processedFile = convertedFile;\n console.log(`WebP转换成功: ${file.name} -> ${convertedFile.name}, 大小: ${(file.size / 1024).toFixed(1)}KB -> ${(convertedFile.size / 1024).toFixed(1)}KB`);\n }\n } catch (err) {\n console.warn('WebP转换失败,使用原文件:', err);\n // 转换失败,继续使用原文件\n }\n }\n\n // 客户端压缩条件:1.文件类型为图片 2.开启客户端压缩,且文件大小大于压缩阈值\n const needCustomCompress = processedFile.type.includes('image') && this.customerCompress && processedFile.size / 1024 / 1024 > this.compressBar;\n const isLtLim = processedFile.size / 1024 / 1024 <= 1024 || this.uploadChannel !== 'telegram';\n const pushFileToQueue = (file, serverCompress) => {\n const fileUrl = URL.createObjectURL(file);\n this.fileList.push({\n uid: file.uid,\n name: file.name,\n url: fileUrl,\n finalURL: '',\n mdURL: '',\n htmlURL: '',\n ubbURL: '',\n srcID: '',\n status: 'uploading',\n progreess: 0,\n serverCompress: serverCompress,\n retryCount: 0\n });\n resolve(file);\n };\n if (needCustomCompress) {\n //尝试压缩图片\n imageConversion.compressAccurately(processedFile, 1024 * this.compressQuality).then(res => {\n //如果压缩后大于1024MB,且上传渠道为telegram,则不上传\n if (res.size / 1024 / 1024 > 1024 && this.uploadChannel === 'telegram') {\n this.$message.error(this.$t('uploadForm.compressedFileTooLarge', {\n name: processedFile.name\n }));\n reject(this.$t('uploadForm.fileSizeTooLarge'));\n }\n this.uploading = true;\n //将res包装成新的file\n const newFile = new File([res], processedFile.name, {\n type: res.type\n });\n newFile.uid = file.uid;\n const myUploadCount = this.uploadCount++;\n\n //开启服务端压缩条件:1.开启服务端压缩 2.文件大小小于10MB 3.上传渠道为Telegram\n const needServerCompress = this.serverCompress && newFile.size / 1024 / 1024 < 10 && this.uploadChannel === 'telegram';\n if (myUploadCount === 0) {\n pushFileToQueue(newFile, needServerCompress);\n } else {\n setTimeout(() => {\n pushFileToQueue(newFile, needServerCompress);\n this.uploadCount--;\n }, 300 * myUploadCount);\n }\n }).catch(err => {\n this.$message.error(this.$t('uploadForm.compressFailedCannotUpload', {\n name: processedFile.name\n }));\n reject(err);\n });\n } else if (isLtLim) {\n this.uploading = true;\n const myUploadCount = this.uploadCount++;\n\n // 开启服务端压缩条件:1.上传渠道为Telegram 2.开启服务端压缩 3.如果为图片,则文件大小小于10MB,否则不限制大小\n const needServerCompress = this.uploadChannel === 'telegram' && this.serverCompress && (processedFile.type.includes('image') ? processedFile.size / 1024 / 1024 < 10 : true);\n if (myUploadCount === 0) {\n pushFileToQueue(processedFile, needServerCompress);\n } else {\n setTimeout(() => {\n pushFileToQueue(processedFile, needServerCompress);\n this.uploadCount--;\n }, 300 * myUploadCount);\n }\n } else {\n this.$message.error(this.$t('uploadForm.fileTooLarge', {\n name: processedFile.name\n }));\n reject(this.$t('uploadForm.fileSizeTooLarge'));\n }\n });\n },\n handleProgress(event) {\n const fileItem = this.fileList.find(item => item.uid === event.file.uid);\n if (fileItem) {\n fileItem.progreess = event.percent;\n }\n },\n copyAll() {\n const urls = this.fileList.filter(item => item.status === 'done' || item.status === 'success').map(item => getUrlByFormat(item, this.selectedUrlForm)).join('\\n');\n navigator.clipboard.writeText(urls);\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copyAllSuccess')\n });\n },\n clearFileList() {\n if (this.fileList.length > 0) {\n // 取消所有正在上传的文件\n this.abortControllers.forEach((controller, uid) => {\n controller.abort();\n });\n this.abortControllers.clear();\n // 清空上传队列\n this.uploadQueue = [];\n // 清空文件列表\n this.fileList = [];\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.fileListCleared')\n });\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.fileListEmpty')\n });\n }\n },\n clearSuccessList() {\n if (this.uploadSuccessCount > 0) {\n this.fileList = this.fileList.filter(item => item.status !== 'done' && item.status !== 'success');\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.successFilesCleared')\n });\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.successFilesEmpty')\n });\n }\n },\n handlePaste(event) {\n // 当粘贴位置是文本框时,不执行该操作\n if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') {\n return;\n }\n const items = event.clipboardData.items;\n if (items.length > 0) {\n this.uploadFromUrl(items);\n }\n },\n handleUploadPasteUrls() {\n // 用于上传在上传文本框中粘贴的外链\n const urls = this.pastedUrls.split('\\n');\n // 处理空行和首尾空字符,链接须符合URL规范\n const validUrls = urls.map(url => url.trim()).filter(url => url !== '').filter(url => /^(https?:\\/\\/[^\\s$.?#].[^\\s]*)$/.test(url));\n\n // 根据粘贴上传方式进行上传\n if (this.pasteUploadMethod === 'save') {\n // 正常上传\n this.uploadFromUrl(validUrls.map(url => {\n return {\n kind: 'string',\n getAsString: callback => {\n callback(url);\n }\n };\n }));\n } else if (this.pasteUploadMethod === 'external') {\n // 仅保存外链,使用 external 渠道上传\n for (let i = 0; i < validUrls.length; i++) {\n const url = validUrls[i];\n const fileName = url.split('/').pop();\n const mdUrl = `![${fileName}](${url})`;\n const htmlUrl = `\"${fileName}\"`;\n const ubbUrl = `[img]${url}[/img]`;\n // 将 url 作为文件内容,文件名为 URL 的最后一部分\n const file = new File([], url.split('/').pop(), {\n type: 'text/plain'\n });\n file.uid = Date.now() + i;\n file.url = url;\n this.fileList.push({\n uid: file.uid,\n name: file.name,\n url: url,\n finalURL: url,\n mdURL: mdUrl,\n htmlURL: htmlUrl,\n ubbURL: ubbUrl,\n srcID: url,\n status: 'uploading',\n progreess: 0,\n serverCompress: false,\n uploadChannel: 'external',\n retryCount: 0\n });\n // 上传\n this.uploadFile({\n file: file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }\n },\n uploadFromUrl(items) {\n for (let i = 0; i < items.length; i++) {\n if (items[i].kind === 'file') {\n const file = items[i].getAsFile();\n // 允许上传任意类型的文件\n file.uid = Date.now() + i;\n //接收beforeUpload的Promise对象\n const checkResult = this.beforeUpload(file);\n if (checkResult instanceof Promise) {\n checkResult.then(newFile => {\n if (newFile instanceof File) {\n this.uploadFile({\n file: newFile,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }).catch(err => {\n console.log(err);\n });\n }\n } else if (items[i].kind === 'string') {\n items[i].getAsString(text => {\n const urlPattern = /^(https?:\\/\\/[^\\s$.?#].[^\\s]*)$/;\n let fileName = '';\n if (urlPattern.test(text)) {\n axios.post('/api/fetchRes', {\n url: text\n }, {\n responseType: 'blob',\n withAuthCode: true\n }).then(response => {\n const contentType = response.headers['content-type'];\n if (response.status == 200) {\n // 提取文件名\n const disposition = response.headers['content-disposition'];\n if (disposition) {\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n const filenameStarRegex = /filename\\*\\s*=\\s*UTF-8''([^;\\n]*)/; // 处理 filename*\n\n let matches = filenameRegex.exec(disposition);\n if (matches != null && matches[1]) {\n fileName = matches[1].replace(/['\"]/g, '');\n // 尝试解码\n try {\n fileName = decodeURIComponent(fileName);\n } catch (e) {\n fileName = '';\n }\n }\n if (fileName === '') {\n matches = filenameStarRegex.exec(disposition); // 尝试匹配 filename*\n if (matches != null && matches[1]) {\n fileName = decodeURIComponent(matches[1]);\n }\n }\n }\n // 尝试从URL中提取文件名\n if (fileName === '') {\n const url = new URL(text);\n fileName = url.pathname.split('/').pop();\n }\n // 未提取到文件名,使用默认文件名\n if (fileName === '') {\n // 获取文件后缀\n const url = new URL(text);\n let extension = url.pathname.split('.').pop();\n // 未能从URL提取有效后缀,使用bin作为默认后缀\n if (!extension || extension === '' || extension.length > 10) {\n extension = 'bin';\n }\n fileName = 'PastedFile' + Date.now() + i + '.' + extension;\n }\n\n // 读取文件内容\n const blob = response.data;\n const file = new File([blob], fileName, {\n type: blob.type\n });\n file.uid = Date.now() + i;\n // 接收beforeUpload的Promise对象\n const checkResult = this.beforeUpload(file);\n if (checkResult instanceof Promise) {\n checkResult.then(newFile => {\n if (newFile instanceof File) {\n this.uploadFile({\n file: newFile,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }).catch(err => {\n console.log(err);\n });\n }\n } else {\n throw new Error('URL地址请求失败');\n }\n }).catch(error => {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.urlRequestFailed')\n });\n });\n }\n });\n }\n }\n },\n handleScroll(event) {\n this.listScrolled = event.scrollTop > 0 && this.fileList.length > 0;\n },\n retryError() {\n if (this.exceptionList.length > 0) {\n this.retryFailedFiles(this.exceptionList);\n this.exceptionList = [];\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.noFailedFiles')\n });\n }\n },\n handleAutoRetryChange(val) {\n this.$message({\n type: val ? 'success' : 'info',\n message: val ? this.$t('uploadForm.autoRetryOn') : this.$t('uploadForm.autoRetryOff')\n });\n\n // 如果开启自动重试且有失败文件,立即开始重试\n if (val && this.exceptionList.length > 0) {\n this.scheduleAutoRetry();\n }\n },\n retryFailedFiles(files) {\n files.forEach(file => {\n const retryCount = file.retryCount || 0;\n if (retryCount < this.maxRetryCount) {\n file.retryCount = retryCount + 1;\n this.uploadFile({\n file: file.file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n } else {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.maxRetryReached', {\n name: file.name,\n max: this.maxRetryCount\n })\n });\n }\n });\n },\n scheduleAutoRetry() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n this.retryTimer = setTimeout(() => {\n if (this.autoReUpload && this.exceptionList.length > 0) {\n const filesToRetry = [...this.exceptionList];\n this.exceptionList = [];\n this.retryFailedFiles(filesToRetry);\n }\n }, this.retryDelay);\n },\n // HuggingFace 大文件直传(绕过 CF Workers 限制)\n // 流程:前端计算 SHA256 → 获取 S3 上传 URL → 直传到 S3 → 提交文件引用\n async uploadToHuggingFaceDirect(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n try {\n console.log('=== HuggingFace Direct Upload ===');\n console.log('File:', file.file.name, 'Size:', file.file.size);\n\n // 1. 计算 SHA256\n file.onProgress({\n percent: 5,\n file: file.file\n });\n console.log('Computing SHA256...');\n const sha256 = await computeSha256(file.file);\n console.log('SHA256:', sha256);\n\n // 检查是否已取消\n if (abortController.signal.aborted) {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n\n // 2. 获取文件样本(前512字节的base64)\n const sampleBytes = new Uint8Array(await file.file.slice(0, 512).arrayBuffer());\n const fileSample = btoa(String.fromCharCode(...sampleBytes));\n\n // 3. 获取 LFS 上传 URL\n file.onProgress({\n percent: 10,\n file: file.file\n });\n console.log('Getting LFS upload URL...');\n const uploadInfoRes = await axios({\n url: '/upload/huggingface/getUploadUrl',\n method: 'post',\n data: {\n fileSize: file.file.size,\n fileName: file.file.name,\n fileType: file.file.type,\n sha256,\n fileSample,\n channelName: this.channelName,\n // 传递指定的渠道名称\n uploadNameType: this.uploadNameType,\n uploadFolder: this.uploadFolder\n },\n withAuthCode: true,\n signal: abortController.signal\n });\n if (!uploadInfoRes.data.success) {\n throw new Error(uploadInfoRes.data.error || 'Failed to get upload URL');\n }\n const uploadInfo = uploadInfoRes.data;\n console.log('Upload info:', uploadInfo);\n\n // 检查文件是否已存在\n if (uploadInfo.alreadyExists) {\n console.log('File already exists in LFS, skipping upload');\n file.onProgress({\n percent: 90,\n file: file.file\n });\n } else if (uploadInfo.needsLfs && uploadInfo.uploadAction) {\n // 4. 直接上传到 S3\n const {\n href,\n header\n } = uploadInfo.uploadAction;\n if (header?.chunk_size) {\n // 分片上传\n await this.uploadToHuggingFaceMultipart(file, uploadInfo, abortController);\n } else {\n // 基本上传\n console.log('Uploading to S3 (basic)...');\n const uploadRes = await fetch(href, {\n method: 'PUT',\n headers: header || {},\n body: file.file,\n signal: abortController.signal\n });\n if (!uploadRes.ok) {\n const error = await uploadRes.text();\n throw new Error(`S3 upload failed: ${uploadRes.status} - ${error}`);\n }\n console.log('S3 upload complete');\n }\n }\n\n // 检查是否已取消\n if (abortController.signal.aborted) {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n\n // 5. 提交文件引用\n file.onProgress({\n percent: 95,\n file: file.file\n });\n console.log('Committing file...');\n const commitRes = await axios({\n url: '/upload/huggingface/commitUpload',\n method: 'post',\n data: {\n fullId: uploadInfo.fullId,\n filePath: uploadInfo.filePath,\n sha256,\n fileSize: file.file.size,\n fileName: file.file.name,\n fileType: file.file.type,\n channelName: uploadInfo.channelName\n },\n withAuthCode: true,\n signal: abortController.signal\n });\n if (!commitRes.data.success) {\n throw new Error(commitRes.data.error || 'Failed to commit file');\n }\n console.log('Upload complete:', commitRes.data);\n // 转换响应格式以匹配 handleSuccess 期望的格式\n const formattedResponse = {\n data: [{\n src: commitRes.data.src\n }]\n };\n file.onSuccess(formattedResponse, file.file);\n } catch (err) {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED' || err.name === 'AbortError') {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n console.error('HuggingFace direct upload error:', err);\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } finally {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n }\n },\n // HuggingFace 分片上传到 S3\n async uploadToHuggingFaceMultipart(file, uploadInfo, abortController) {\n const {\n uploadAction\n } = uploadInfo;\n const {\n href: completionUrl,\n header\n } = uploadAction;\n const chunkSize = parseInt(header.chunk_size);\n\n // 获取所有分片的上传 URL\n const parts = Object.keys(header).filter(key => /^[0-9]+$/.test(key));\n console.log(`Multipart upload: ${parts.length} parts, chunk size: ${chunkSize}`);\n const completeParts = [];\n const totalParts = parts.length;\n for (const part of parts) {\n // 检查是否已取消\n if (abortController && abortController.signal.aborted) {\n console.log('HuggingFace 分片上传已取消');\n throw new DOMException('Upload cancelled', 'AbortError');\n }\n const index = parseInt(part) - 1;\n const start = index * chunkSize;\n const end = Math.min(start + chunkSize, file.file.size);\n const chunk = file.file.slice(start, end);\n console.log(`Uploading part ${part}/${totalParts}`);\n const response = await fetch(header[part], {\n method: 'PUT',\n body: chunk,\n signal: abortController ? abortController.signal : undefined\n });\n if (!response.ok) {\n throw new Error(`Failed to upload part ${part}: ${response.status}`);\n }\n const etag = response.headers.get('ETag');\n if (!etag) {\n throw new Error(`No ETag for part ${part}`);\n }\n completeParts.push({\n partNumber: parseInt(part),\n etag\n });\n\n // 更新进度(10% - 90%)\n const progress = 10 + Math.round(parseInt(part) / totalParts * 80);\n file.onProgress({\n percent: progress,\n file: file.file\n });\n }\n\n // 检查是否已取消\n if (abortController && abortController.signal.aborted) {\n console.log('HuggingFace 分片上传已取消');\n throw new DOMException('Upload cancelled', 'AbortError');\n }\n\n // 完成分片上传\n console.log('Completing multipart upload...');\n const completeResponse = await fetch(completionUrl, {\n method: 'POST',\n headers: {\n 'Accept': 'application/vnd.git-lfs+json',\n 'Content-Type': 'application/vnd.git-lfs+json'\n },\n body: JSON.stringify({\n oid: uploadInfo.oid,\n parts: completeParts\n }),\n signal: abortController ? abortController.signal : undefined\n });\n if (!completeResponse.ok) {\n const error = await completeResponse.text();\n throw new Error(`Multipart complete failed: ${completeResponse.status} - ${error}`);\n }\n console.log('Multipart upload complete');\n },\n // 将图片转换为 WebP 格式\n async convertImageToWebp(file) {\n return new Promise((resolve, reject) => {\n // 不支持转换的格式直接返回 null\n if (file.type.includes('gif') || file.type.includes('svg') || file.type.includes('webp')) {\n resolve(null);\n return;\n }\n const img = new Image();\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n img.onload = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n canvas.toBlob(blob => {\n if (blob) {\n // 修改文件名:将原扩展名替换为 .webp\n const originalName = file.name;\n const lastDotIndex = originalName.lastIndexOf('.');\n const newName = lastDotIndex > 0 ? originalName.substring(0, lastDotIndex) + '.webp' : originalName + '.webp';\n const webpFile = new File([blob], newName, {\n type: 'image/webp'\n });\n webpFile.uid = file.uid;\n resolve(webpFile);\n } else {\n reject(new Error('WebP 转换失败'));\n }\n\n // 清理\n URL.revokeObjectURL(img.src);\n }, 'image/webp', 0.92); // 0.92 质量参数,平衡质量和大小\n };\n img.onerror = () => {\n URL.revokeObjectURL(img.src);\n reject(new Error(this.$t('uploadForm.imageLoadFailed')));\n };\n img.src = URL.createObjectURL(file);\n });\n },\n // 拖拽上传卡片鼠标移动事件 - 悬浮光斑效果\n handleUploadCardMouseMove(e) {\n const glow = this.$refs.uploadCardGlow;\n if (!glow) return;\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n glow.style.opacity = '1';\n glow.style.left = x + 'px';\n glow.style.top = y + 'px';\n },\n // 拖拽上传卡片鼠标离开事件\n handleUploadCardMouseLeave() {\n const glow = this.$refs.uploadCardGlow;\n if (!glow) return;\n glow.style.opacity = '0';\n }\n },\n beforeDestroy() {\n // 清理定时器\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadForm.vue?vue&type=template&id=a099cfac&scoped=true\"\nimport script from \"./UploadForm.vue?vue&type=script&lang=js\"\nexport * from \"./UploadForm.vue?vue&type=script&lang=js\"\n\nimport \"./UploadForm.vue?vue&type=style&index=0&id=a099cfac&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-a099cfac\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-suggestion-input\",\n ref: \"wrapperRef\"\n};\nconst _hoisted_2 = {\n class: \"suggestion-dropdown\"\n};\nconst _hoisted_3 = {\n class: \"suggestion-list\"\n};\nconst _hoisted_4 = [\"title\", \"onMousedown\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_input, {\n ref: \"inputRef\",\n modelValue: $options.inputValue,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $options.inputValue = $event),\n placeholder: $props.placeholder,\n onFocus: $options.handleFocus,\n onBlur: $options.handleBlur,\n onInput: $options.handleInput\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\", \"onInput\"]), _withDirectives(_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"ul\", _hoisted_3, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, (item, index) => {\n return _openBlock(), _createElementBlock(\"li\", {\n key: index,\n class: \"suggestion-item\",\n title: item.value,\n onMousedown: _withModifiers($event => $options.selectItem(item), [\"prevent\"])\n }, _toDisplayString(item.value), 41, _hoisted_4);\n }), 128))])], 512), [[_vShow, $data.dropdownVisible && $data.suggestions.length > 0]])], 512);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport axios from '@/utils/axios';\nexport default {\n name: 'DirectorySuggestionInput',\n props: {\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: ''\n }\n },\n emits: ['update:modelValue', 'focus', 'blur', 'select'],\n data() {\n return {\n directoryTreeRoot: null,\n directoryTreeLoaded: false,\n directoryTreeLoading: false,\n directoryChildrenMap: {},\n focusTime: null,\n dropdownVisible: false,\n isFocused: false,\n suggestions: []\n };\n },\n computed: {\n inputValue: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n }\n },\n watch: {\n modelValue() {\n // 外部修改 modelValue 时也刷新建议\n if (this.isFocused) {\n this.refreshSuggestions();\n }\n }\n },\n methods: {\n handleFocus() {\n this.isFocused = true;\n this.focusTime = Date.now();\n this.ensureDirectoryTreeLoaded();\n this.$emit('focus');\n setTimeout(() => {\n if (this.isFocused) {\n this.refreshSuggestions();\n this.dropdownVisible = true;\n }\n }, 500);\n },\n handleBlur() {\n this.isFocused = false;\n this.dropdownVisible = false;\n this.$emit('blur');\n },\n handleInput(val) {\n // val 是 el-input @input 事件传来的最新值\n this.$nextTick(() => {\n this.refreshSuggestions();\n if (this.isFocused) {\n this.dropdownVisible = true;\n }\n });\n },\n selectItem(item) {\n const path = item.value;\n this.inputValue = path;\n this.$emit('select', path);\n const normalizedPath = this.normalizeDirectoryPath(path);\n const children = this.directoryChildrenMap[normalizedPath];\n if (children && children.length > 0) {\n this.$nextTick(() => {\n this.refreshSuggestions();\n this.dropdownVisible = true;\n this.$refs.inputRef?.focus();\n });\n } else {\n this.dropdownVisible = false;\n }\n },\n refreshSuggestions() {\n this.suggestions = this.getDirectorySuggestions(this.modelValue || '');\n },\n normalizeDirectoryPath(path) {\n if (!path) return '/';\n let normalized = path;\n if (!normalized.startsWith('/')) normalized = '/' + normalized;\n if (normalized !== '/' && !normalized.endsWith('/')) normalized += '/';\n return normalized;\n },\n buildDirectoryChildrenMap(treeRoot) {\n const map = {};\n const walk = node => {\n const parentPath = this.normalizeDirectoryPath(node.path);\n const children = Array.isArray(node.children) ? node.children : [];\n map[parentPath] = children.map(child => ({\n name: child.name,\n path: this.normalizeDirectoryPath(child.path)\n }));\n children.forEach(walk);\n };\n walk(treeRoot);\n this.directoryChildrenMap = map;\n },\n async ensureDirectoryTreeLoaded() {\n if (this.directoryTreeLoaded || this.directoryTreeLoading) return;\n this.directoryTreeLoading = true;\n try {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n const tree = response?.data?.tree;\n if (tree) {\n this.directoryTreeRoot = tree;\n this.buildDirectoryChildrenMap(tree);\n this.directoryTreeLoaded = true;\n }\n } catch (error) {\n console.error('Failed to load directory tree for autocomplete:', error);\n } finally {\n this.directoryTreeLoading = false;\n }\n },\n parseDirectoryQuery(value) {\n const normalizedInput = value && value.startsWith('/') ? value : `/${value || ''}`;\n const raw = normalizedInput.slice(1);\n const parts = raw.split('/');\n const segmentInput = parts[parts.length - 1] || '';\n const parentSegments = parts.slice(0, -1).filter(Boolean);\n const parentPath = parentSegments.length > 0 ? `/${parentSegments.join('/')}/` : '/';\n return {\n segmentInput,\n parentPath\n };\n },\n getDirectorySuggestions(queryString) {\n const {\n segmentInput,\n parentPath\n } = this.parseDirectoryQuery(queryString);\n const parentChildren = this.directoryChildrenMap[parentPath] || [];\n if (!segmentInput) {\n return parentChildren.slice(0, 10).map(item => ({\n value: item.path\n }));\n }\n const keyword = segmentInput.toLowerCase();\n return parentChildren.filter(item => item.name.toLowerCase().startsWith(keyword)).slice(0, 10).map(item => ({\n value: item.path\n }));\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectorySuggestionInput.vue?vue&type=template&id=28b8eda7&scoped=true\"\nimport script from \"./DirectorySuggestionInput.vue?vue&type=script&lang=js\"\nexport * from \"./DirectorySuggestionInput.vue?vue&type=script&lang=js\"\n\nimport \"./DirectorySuggestionInput.vue?vue&type=style&index=0&id=28b8eda7&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-28b8eda7\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"upload-home\"\n};\nconst _hoisted_3 = {\n class: \"quick-toolbar-actions\"\n};\nconst _hoisted_4 = {\n class: \"quick-toolbar-actions-inner\"\n};\nconst _hoisted_5 = {\n class: \"header\"\n};\nconst _hoisted_6 = {\n class: \"title\"\n};\nconst _hoisted_7 = {\n class: \"title-crayon-text\",\n \"aria-hidden\": \"true\"\n};\nconst _hoisted_8 = {\n class: \"main-title\",\n href: \"https://github.com/MarSeventh/CloudFlare-ImgBed\",\n target: \"_blank\"\n};\nconst _hoisted_9 = {\n class: \"dialog-section\"\n};\nconst _hoisted_10 = {\n class: \"section-header\"\n};\nconst _hoisted_11 = {\n class: \"section-title\"\n};\nconst _hoisted_12 = {\n class: \"section-content\"\n};\nconst _hoisted_13 = {\n class: \"dialog-section\"\n};\nconst _hoisted_14 = {\n class: \"section-header\"\n};\nconst _hoisted_15 = {\n class: \"section-title\"\n};\nconst _hoisted_16 = {\n class: \"section-content\"\n};\nconst _hoisted_17 = {\n class: \"setting-item\"\n};\nconst _hoisted_18 = {\n class: \"setting-label\"\n};\nconst _hoisted_19 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_20 = {\n class: \"setting-label\"\n};\nconst _hoisted_21 = {\n class: \"dialog-action\"\n};\nconst _hoisted_22 = [\"innerHTML\"];\nconst _hoisted_23 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ToggleDark = _resolveComponent(\"ToggleDark\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_DirectorySuggestionInput = _resolveComponent(\"DirectorySuggestionInput\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_DirectoryTreePicker = _resolveComponent(\"DirectoryTreePicker\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_Logo = _resolveComponent(\"Logo\");\n const _component_UploadForm = _resolveComponent(\"UploadForm\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_UploadSettingsDialog = _resolveComponent(\"UploadSettingsDialog\");\n const _component_Footer = _resolveComponent(\"Footer\");\n const _component_UploadHistory = _resolveComponent(\"UploadHistory\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_ToggleDark, {\n class: \"toggle-dark-button desktop-only\"\n }), _createVNode(_component_el_dropdown, {\n class: \"more-dropdown desktop-only\",\n trigger: \"click\",\n onCommand: $options.handleDesktopMenuCommand\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"showHistory\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.history')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showAnnouncement\",\n disabled: !$options.announcementAvailable\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.announcement')), 1)]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_dropdown_item, {\n command: \"toggleLanguage\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$i18n.locale === 'zh-CN' ? 'English' : '简体中文'), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"viewDocs\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.viewDocs')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"more-button\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ellipsis-v\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-folder-container\", {\n 'no-announcement': !$options.announcementAvailable\n }])\n }, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-folder\", {\n 'active': $data.isFolderInputActive\n }])\n }, [$options.showDirectorySuggestions ? (_openBlock(), _createBlock(_component_DirectorySuggestionInput, {\n key: 0,\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.uploadFolder = $event),\n class: \"inner-folder-input\",\n placeholder: _ctx.$t('upload.folderPlaceholder'),\n onFocus: $options.handleFolderInputFocus,\n onBlur: $options.handleFolderInputBlur,\n onSelect: $options.handleDirectorySelect\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\", \"onSelect\"])) : (_openBlock(), _createBlock(_component_el_input, {\n key: 1,\n class: \"inner-folder-input\",\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.uploadFolder = $event),\n placeholder: _ctx.$t('upload.folderPlaceholder'),\n onFocus: $options.handleFolderInputFocus,\n onBlur: $options.handleFolderInputBlur\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\"]))], 2), $options.showDirectorySuggestions ? (_openBlock(), _createBlock(_component_DirectoryTreePicker, {\n key: 0,\n \"current-directory\": $data.uploadFolder,\n source: \"upload\",\n onSelect: $options.handleDirectorySelect\n }, {\n trigger: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"directory-tree-trigger\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"current-directory\", \"onSelect\"])) : _createCommentVNode(\"\", true)], 2), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('upload.switchUploadMethod'),\n placement: \"bottom\",\n disabled: $options.disableTooltip,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"upload-method-button desktop-only\",\n onClick: $options.handleChangeUploadMethod\n }, {\n default: _withCtx(() => [$data.uploadMethod === 'default' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"folder-open\",\n class: \"upload-method-icon\",\n size: \"lg\"\n })) : $data.uploadMethod === 'paste' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"paste\",\n class: \"upload-method-icon\",\n size: \"lg\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\", \"disabled\"]), _createVNode(_component_el_dropdown, {\n class: \"mobile-more-dropdown mobile-only\",\n trigger: \"click\",\n onCommand: $options.handleMobileMenuCommand\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"toggleTheme\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $options.getThemeIcon(),\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($options.getThemeText()), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"toggleUploadMethod\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.uploadMethod === 'default' ? 'paste' : 'folder-open',\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($data.uploadMethod === 'default' ? _ctx.$t('upload.pasteUpload') : _ctx.$t('upload.fileUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showHistory\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.history')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showAnnouncement\",\n disabled: !$options.announcementAvailable\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.announcement')), 1)]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_dropdown_item, {\n command: \"toggleLanguage\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$i18n.locale === 'zh-CN' ? 'English' : '简体中文'), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"viewDocs\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.viewDocs')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"mobile-more-button\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ellipsis-v\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"quick-toolbar\", {\n 'is-expanded': $data.isQuickToolbarOpen\n }]),\n onMouseleave: _cache[5] || (_cache[5] = (...args) => $options.handleQuickToolbarLeave && $options.handleQuickToolbarLeave(...args))\n }, [_createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip || !$data.isQuickToolbarOpen,\n content: _ctx.$t('upload.logout'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[2] || (_cache[2] = $event => $options.handleQuickToolbarCommand('logout'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip || !$data.isQuickToolbarOpen,\n content: _ctx.$t('upload.manage'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[3] || (_cache[3] = $event => $options.handleQuickToolbarCommand('manage'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip || !$data.isQuickToolbarOpen,\n content: _ctx.$t('upload.linkFormat'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[4] || (_cache[4] = $event => $options.handleQuickToolbarCommand('linkFormat'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.settings'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: $options.openCompressDialog\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud-upload\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_button, {\n class: _normalizeClass([\"quick-toolbar-button quick-toolbar-more\", {\n 'is-active': $data.isQuickToolbarOpen\n }]),\n \"aria-expanded\": $data.isQuickToolbarOpen,\n onMouseenter: $options.handleQuickToolbarMoreEnter,\n onClick: $options.toggleQuickToolbar\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"quick-toolbar-icon quick-toolbar-toggle-icon\"\n })]),\n _: 1\n }, 8, [\"class\", \"aria-expanded\", \"onMouseenter\", \"onClick\"])], 34), _createVNode(_component_Logo, {\n useConfigLink: true\n }), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h1\", _hoisted_6, [_createElementVNode(\"span\", _hoisted_7, _toDisplayString($options.ownerName) + \" ImgHub\", 1), _createElementVNode(\"a\", _hoisted_8, _toDisplayString($options.ownerName), 1), _cache[24] || (_cache[24] = _createTextVNode(\" ImgHub \", -1))])]), _createVNode(_component_UploadForm, {\n selectedUrlForm: $data.selectedUrlForm,\n customerCompress: $data.customerCompress,\n compressQuality: $data.compressQuality,\n compressBar: $data.compressBar,\n serverCompress: $data.serverCompress,\n uploadChannel: $data.uploadChannel,\n channelName: $data.channelName,\n uploadNameType: $data.uploadNameType,\n useCustomUrl: $data.useCustomUrl,\n customUrlPrefix: $data.customUrlPrefix,\n autoRetry: $data.autoRetry,\n urlPrefix: $options.urlPrefix,\n uploadMethod: $data.uploadMethod,\n uploadFolder: $data.uploadFolder,\n convertToWebp: $data.convertToWebp,\n class: \"upload\"\n }, null, 8, [\"selectedUrlForm\", \"customerCompress\", \"compressQuality\", \"compressBar\", \"serverCompress\", \"uploadChannel\", \"channelName\", \"uploadNameType\", \"useCustomUrl\", \"customUrlPrefix\", \"autoRetry\", \"urlPrefix\", \"uploadMethod\", \"uploadFolder\", \"convertToWebp\"]), _createVNode(_component_el_dialog, {\n title: _ctx.$t('settings.linkFormatTitle'),\n modelValue: $data.showUrlDialog,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.showUrlDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog settings-dialog-scope\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"div\", _hoisted_10, [_createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('settings.defaultCopyLink')), 1)]), _createElementVNode(\"div\", _hoisted_12, [_createVNode(_component_el_radio_group, {\n modelValue: $data.selectedUrlForm,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.selectedUrlForm = $event),\n onChange: $options.changeUrlForm,\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n value: \"url\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.rawLink')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"md\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code\",\n class: \"radio-icon\"\n }), _cache[25] || (_cache[25] = _createElementVNode(\"span\", null, \"MarkDown\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"html\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\",\n class: \"radio-icon\"\n }), _cache[26] || (_cache[26] = _createElementVNode(\"span\", null, \"HTML\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"ubb\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"quote-right\",\n class: \"radio-icon\"\n }), _cache[27] || (_cache[27] = _createElementVNode(\"span\", null, \"BBCode\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])])]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('settings.customLink')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('settings.customLinkTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"div\", _hoisted_17, [_createElementVNode(\"span\", _hoisted_18, _toDisplayString(_ctx.$t('settings.enableCustom')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [_createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('settings.customPrefix')), 1), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.customUrlPrefix = $event),\n placeholder: _ctx.$t('settings.customPrefixPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_21, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[9] || (_cache[9] = $event => $data.showUrlDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('settings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_UploadSettingsDialog, {\n modelValue: $data.showCompressDialog,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.showCompressDialog = $event),\n uploadChannel: $data.uploadChannel,\n \"onUpdate:uploadChannel\": _cache[12] || (_cache[12] = $event => $data.uploadChannel = $event),\n channelName: $data.channelName,\n \"onUpdate:channelName\": _cache[13] || (_cache[13] = $event => $data.channelName = $event),\n currentChannelList: $options.currentChannelList,\n uploadFolder: $data.uploadFolder,\n \"onUpdate:uploadFolder\": _cache[14] || (_cache[14] = $event => $data.uploadFolder = $event),\n autoRetry: $data.autoRetry,\n \"onUpdate:autoRetry\": _cache[15] || (_cache[15] = $event => $data.autoRetry = $event),\n uploadNameType: $data.uploadNameType,\n \"onUpdate:uploadNameType\": _cache[16] || (_cache[16] = $event => $data.uploadNameType = $event),\n convertToWebp: $data.convertToWebp,\n \"onUpdate:convertToWebp\": _cache[17] || (_cache[17] = $event => $data.convertToWebp = $event),\n customerCompress: $data.customerCompress,\n \"onUpdate:customerCompress\": _cache[18] || (_cache[18] = $event => $data.customerCompress = $event),\n compressBar: $data.compressBar,\n \"onUpdate:compressBar\": _cache[19] || (_cache[19] = $event => $data.compressBar = $event),\n compressQuality: $data.compressQuality,\n \"onUpdate:compressQuality\": _cache[20] || (_cache[20] = $event => $data.compressQuality = $event),\n serverCompress: $data.serverCompress,\n \"onUpdate:serverCompress\": _cache[21] || (_cache[21] = $event => $data.serverCompress = $event)\n }, null, 8, [\"modelValue\", \"uploadChannel\", \"channelName\", \"currentChannelList\", \"uploadFolder\", \"autoRetry\", \"uploadNameType\", \"convertToWebp\", \"customerCompress\", \"compressBar\", \"compressQuality\", \"serverCompress\"])]), _createVNode(_component_Footer, {\n class: \"footer\"\n }), _createVNode(_component_el_dialog, {\n title: _ctx.$t('upload.announcementTitle'),\n modelValue: $data.showAnnouncementDialog,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.showAnnouncementDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n \"close-on-click-modal\": false,\n \"close-on-press-escape\": false,\n center: \"\"\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_23, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.acknowledgeAnnouncement\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.announcementAck')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", {\n innerHTML: $data.announcementContent\n }, null, 8, _hoisted_22)]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_UploadHistory, {\n show: $data.showHistory,\n onClose: _cache[23] || (_cache[23] = $event => $data.showHistory = false)\n }, null, 8, [\"show\"])]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport UploadForm from '@/components/upload/UploadForm.vue';\nimport Footer from '@/components/Footer.vue';\nimport ToggleDark from '@/components/ToggleDark.vue';\nimport Logo from '@/components/Logo.vue';\nimport { setLocale } from '@/locales';\nimport UploadHistory from '@/components/upload/UploadHistory.vue';\nimport UploadSettingsDialog from '@/components/upload/UploadSettingsDialog.vue';\nimport DirectoryTreePicker from '@/components/DirectoryTreePicker.vue';\nimport DirectorySuggestionInput from '@/components/DirectorySuggestionInput.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nimport axios from '@/utils/axios';\nimport { ref } from 'vue';\nimport { mapGetters } from 'vuex';\nimport { validateFolderPath } from '@/utils/pathValidator';\nexport default {\n name: 'UploadHome',\n mixins: [backgroundManager],\n data() {\n return {\n selectedUrlForm: ref(''),\n showUrlDialog: false,\n showCompressDialog: false,\n customerCompress: true,\n //上传前压缩\n compressQuality: 4,\n //压缩后大小\n compressBar: 5,\n //压缩阈值\n convertToWebp: false,\n //转换为WebP格式\n serverCompress: true,\n //服务器端压缩\n uploadChannel: '',\n //上传渠道\n channelName: '',\n //指定的渠道名称\n availableChannels: {},\n //可用渠道列表\n uploadNameType: '',\n //上传文件命名方式\n customUrlPrefix: '',\n //自定义链接前缀\n useCustomUrl: 'false',\n //是否启用自定义链接格式\n autoRetry: true,\n //失败自动切换\n useDefaultWallPaper: false,\n uploadMethod: 'default',\n //上传方式\n uploadFolder: '',\n // 上传文件夹\n isFolderInputActive: false,\n isQuickToolbarOpen: false,\n isQuickToolbarPinned: false,\n showAnnouncementDialog: false,\n // 控制公告弹窗的显示\n announcementContent: '',\n // 公告内容\n displayedAnnouncementRefreshAt: null,\n // 当前弹窗所展示的公告版本\n showHistory: false,\n themeMode: 'auto' // 主题模式:light, dark, auto\n };\n },\n watch: {\n customerCompress(val) {\n this.updateCompressConfig('customerCompress', val);\n },\n compressQuality(val) {\n this.updateCompressConfig('compressQuality', val);\n },\n compressBar(val) {\n // 确保值在有效范围内\n if (val === null || val === undefined || val < 1) {\n this.compressBar = 1;\n return;\n }\n // 确保期望大小不超过压缩阈值\n if (this.compressQuality > val) {\n this.compressQuality = val;\n }\n this.updateCompressConfig('compressBar', val);\n },\n serverCompress(val) {\n this.updateCompressConfig('serverCompress', val);\n },\n convertToWebp(val) {\n this.updateCompressConfig('convertToWebp', val);\n },\n uploadChannel(val) {\n this.updateStoreUploadChannel(val);\n // 切换渠道类型时,检查持久化的渠道名是否在新渠道列表中\n const newChannelList = this.availableChannels[val] || [];\n const savedChannelName = this.storeChannelName;\n if (savedChannelName && newChannelList.some(ch => ch.name === savedChannelName)) {\n // 持久化的渠道名在新渠道列表中,恢复它\n this.channelName = savedChannelName;\n } else {\n // 否则清空\n this.channelName = '';\n }\n },\n channelName(val) {\n // 确保清空时保存空字符串而不是null\n this.$store.commit('setStoreChannelName', val || '');\n },\n uploadNameType(val) {\n this.updateStoreUploadNameType(val);\n },\n customUrlPrefix(val) {\n this.$store.commit('setCustomUrlSettings', {\n key: 'customUrlPrefix',\n value: val\n });\n },\n useCustomUrl(val) {\n this.$store.commit('setCustomUrlSettings', {\n key: 'useCustomUrl',\n value: val\n });\n },\n autoRetry(val) {\n this.$store.commit('setStoreAutoRetry', val);\n },\n uploadFolder(val) {\n // 实时输入时用非 strict 模式,不检查末尾的单独 . 以允许继续输入如 .123\n if (this.validateUploadFolder(val, false)) {\n // 非 strict 通过后,再用 strict 模式静默检查,只有完全合法才更新 store\n const strictResult = validateFolderPath(val, {\n strict: true\n });\n if (strictResult.valid) {\n this.$store.commit('setStoreUploadFolder', val);\n }\n // strict 不通过时不更新 store,等失焦时提示并回滚\n } else {\n this.$nextTick(() => {\n this.uploadFolder = this.storeUploadFolder;\n });\n }\n }\n },\n computed: {\n ...mapGetters(['userConfig', 'uploadCopyUrlForm', 'compressConfig', 'storeUploadChannel', 'storeChannelName', 'storeUploadNameType', 'customUrlSettings', 'storeAutoRetry', 'storeUploadMethod', 'storeUploadFolder']),\n ownerName() {\n return this.userConfig?.ownerName || 'Sanyue';\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n urlPrefix() {\n // 全局自定义链接前缀\n return this.userConfig?.urlPrefix || `${window.location.protocol}//${window.location.host}/file/`;\n },\n announcementAvailable() {\n return !!this.userConfig?.announcement;\n },\n // 是否显示目录候选项(从 userConfig 获取)\n showDirectorySuggestions() {\n return this.userConfig?.showDirectorySuggestions ?? false;\n },\n // 当前渠道类型对应的渠道列表\n currentChannelList() {\n return this.availableChannels[this.uploadChannel] || [];\n }\n },\n mounted() {\n // 初始化背景图,启用自动创建元素\n this.initializeBackground('uploadBkImg', '.container', true, true);\n\n // 读取用户选择的链接格式\n this.selectedUrlForm = this.uploadCopyUrlForm || 'url';\n // 读取用户选择的压缩设置(优先用户设置,其次系统默认配置)\n this.customerCompress = this.compressConfig.customerCompress ?? this.parseBoolean(this.userConfig?.defaultCustomerCompress, true);\n this.compressQuality = this.compressConfig.compressQuality ?? this.parseNumber(this.userConfig?.defaultCompressQuality, 4);\n this.compressBar = this.compressConfig.compressBar ?? this.parseNumber(this.userConfig?.defaultCompressBar, 5);\n this.serverCompress = this.compressConfig.serverCompress ?? true;\n this.convertToWebp = this.compressConfig.convertToWebp ?? this.parseBoolean(this.userConfig?.defaultConvertToWebp, false);\n // 读取用户选择的上传渠道\n this.uploadChannel = this.storeUploadChannel || this.userConfig?.defaultUploadChannel || 'telegram';\n // 用户定义的失败自动切换\n this.autoRetry = this.storeAutoRetry;\n // 读取用户选择的上传文件命名方式\n this.uploadNameType = this.storeUploadNameType || this.userConfig?.defaultUploadNameType || 'default';\n // 读取用户自定义链接格式\n this.customUrlPrefix = this.customUrlSettings.customUrlPrefix;\n this.useCustomUrl = this.customUrlSettings.useCustomUrl;\n // 读取用户偏好的上传方式\n this.uploadMethod = this.storeUploadMethod;\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n // 读取用户设置的上传文件夹\n this.uploadFolder = this.storeUploadFolder || this.userConfig?.defaultUploadFolder || '';\n\n // 从 Vuex store 读取主题模式状态\n const cusDarkMode = this.$store.getters.cusDarkMode;\n const useDarkMode = this.$store.getters.useDarkMode;\n if (!cusDarkMode) {\n this.themeMode = 'auto';\n } else if (useDarkMode) {\n this.themeMode = 'dark';\n } else {\n this.themeMode = 'light';\n }\n this.showAnnouncementIfNeeded();\n },\n components: {\n UploadForm,\n Footer,\n ToggleDark,\n Logo,\n UploadHistory,\n UploadSettingsDialog,\n DirectoryTreePicker,\n DirectorySuggestionInput\n },\n methods: {\n // 获取可用渠道列表\n async fetchAvailableChannels() {\n try {\n const response = await axios.get('/api/channels', {\n withAuthCode: true\n });\n if (response.data) {\n this.availableChannels = response.data;\n // 恢复渠道名称:优先持久化的值,其次系统默认配置\n const savedChannelName = this.storeChannelName;\n const defaultChannelName = this.userConfig?.defaultChannelName;\n const currentChannelList = this.availableChannels[this.uploadChannel] || [];\n\n // 如果用户主动清空过(savedChannelName === ''),则保持为空\n // 如果从未选择过(savedChannelName === null/undefined),则使用默认值\n if (savedChannelName && currentChannelList.some(ch => ch.name === savedChannelName)) {\n this.channelName = savedChannelName;\n } else if (savedChannelName === '' || savedChannelName === null || savedChannelName === undefined) {\n // 用户主动清空或从未选择,检查是否使用默认值\n if (savedChannelName !== '' && defaultChannelName && currentChannelList.some(ch => ch.name === defaultChannelName)) {\n this.channelName = defaultChannelName;\n }\n // 如果 savedChannelName === '',说明用户主动清空,保持为空\n }\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n },\n // 验证上传文件夹路径的合法性\n validateUploadFolder(path, strict = true) {\n // 自动补全前导 /\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n this.uploadFolder = path;\n }\n const result = validateFolderPath(path, {\n strict\n });\n if (!result.valid) {\n this.$message.error(result.error);\n return false;\n }\n return true;\n },\n handleFolderInputFocus() {\n this.isFolderInputActive = true;\n },\n handleFolderInputBlur() {\n this.isFolderInputActive = false;\n // 失焦时自动补全前导 /\n if (this.uploadFolder && !this.uploadFolder.startsWith('/')) {\n this.uploadFolder = '/' + this.uploadFolder;\n }\n // 失焦时做完整校验(包括末尾单独的 .)\n if (!this.validateUploadFolder(this.uploadFolder, true)) {\n this.$nextTick(() => {\n this.uploadFolder = this.storeUploadFolder;\n });\n }\n },\n handleManage() {\n this.$router.push('/dashboard');\n },\n // 解析布尔值\n parseBoolean(value, defaultValue) {\n if (value === undefined || value === null) return defaultValue;\n if (typeof value === 'boolean') return value;\n if (typeof value === 'string') return value === 'true';\n return defaultValue;\n },\n // 解析数字\n parseNumber(value, defaultValue) {\n if (value === undefined || value === null) return defaultValue;\n const num = parseFloat(value);\n return isNaN(num) ? defaultValue : num;\n },\n openUrlDialog() {\n this.showUrlDialog = true;\n },\n handleLogout() {\n axios.post('/api/auth/logout', {\n authType: 'user'\n }, {\n withCredentials: true\n }).finally(() => {\n this.$store.commit('setUserLoggedIn', false);\n this.$router.push('/login');\n this.$message.success(this.$t('upload.logoutSuccess'));\n });\n },\n changeUrlForm() {\n this.$store.commit('setUploadCopyUrlForm', this.selectedUrlForm);\n },\n openCompressDialog() {\n this.showCompressDialog = true;\n },\n updateCompressConfig(key, value) {\n this.$store.commit('setCompressConfig', {\n key,\n value\n });\n },\n updateStoreUploadChannel(value) {\n this.$store.commit('setStoreUploadChannel', value);\n },\n updateStoreUploadNameType(value) {\n this.$store.commit('setStoreUploadNameType', value);\n },\n handleQuickToolbarMoreEnter() {\n this.isQuickToolbarOpen = true;\n },\n handleQuickToolbarLeave() {\n if (!this.isQuickToolbarPinned) {\n this.isQuickToolbarOpen = false;\n }\n },\n toggleQuickToolbar() {\n this.isQuickToolbarPinned = !this.isQuickToolbarPinned;\n this.isQuickToolbarOpen = this.isQuickToolbarPinned;\n },\n closeQuickToolbar() {\n this.isQuickToolbarPinned = false;\n this.isQuickToolbarOpen = false;\n },\n handleQuickToolbarCommand(command) {\n this.closeQuickToolbar();\n if (command === 'linkFormat') {\n this.openUrlDialog();\n } else if (command === 'manage') {\n this.handleManage();\n } else if (command === 'logout') {\n this.handleLogout();\n }\n },\n handleChangeUploadMethod() {\n this.uploadMethod = this.uploadMethod === 'default' ? 'paste' : 'default';\n this.$store.commit('setUploadMethod', this.uploadMethod);\n },\n handleMobileMenuCommand(command) {\n if (command === 'toggleTheme') {\n // 循环切换:auto -> light -> dark -> auto\n if (this.themeMode === 'auto') {\n // 切换到亮色\n this.themeMode = 'light';\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (this.themeMode === 'light') {\n // 切换到暗色\n this.themeMode = 'dark';\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 切换到自动\n this.themeMode = 'auto';\n this.$store.commit('setCusDarkMode', false);\n }\n } else if (command === 'toggleUploadMethod') {\n this.handleChangeUploadMethod();\n } else if (command === 'viewDocs') {\n window.open('https://cfbed.sanyue.de/qa/', '_blank');\n } else if (command === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\n } else if (command === 'toggleLanguage') {\n const next = this.$i18n.locale === 'zh-CN' ? 'en' : 'zh-CN';\n setLocale(next);\n }\n },\n handleDesktopMenuCommand(command) {\n if (command === 'viewDocs') {\n window.open('https://cfbed.sanyue.de/qa/', '_blank');\n } else if (command === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\n } else if (command === 'toggleLanguage') {\n const next = this.$i18n.locale === 'zh-CN' ? 'en' : 'zh-CN';\n setLocale(next);\n }\n },\n getThemeIcon() {\n // 显示下一个模式的图标\n if (this.themeMode === 'auto') return 'sun'; // auto -> light\n if (this.themeMode === 'light') return 'moon'; // light -> dark\n return 'adjust'; // dark -> auto\n },\n getThemeText() {\n // 显示下一个模式的文字\n if (this.themeMode === 'auto') return this.$t('theme.lightMode');\n if (this.themeMode === 'light') return this.$t('theme.darkMode');\n return this.$t('theme.autoMode');\n },\n handleShowAnnouncement() {\n const announcement = this.userConfig?.announcement;\n if (announcement) {\n this.openAnnouncement(announcement);\n } else {\n this.$message.info(this.$t('upload.noAnnouncement'));\n }\n },\n getAnnouncementRefreshAt() {\n const refreshAt = Number(this.userConfig?.announcementRefreshAt);\n return Number.isFinite(refreshAt) && refreshAt > 0 ? refreshAt : null;\n },\n openAnnouncement(announcement) {\n this.announcementContent = announcement;\n this.displayedAnnouncementRefreshAt = this.getAnnouncementRefreshAt();\n this.showAnnouncementDialog = true;\n },\n showAnnouncementIfNeeded() {\n const announcement = this.userConfig?.announcement;\n if (!announcement) return;\n const refreshAt = this.getAnnouncementRefreshAt();\n if (refreshAt) {\n const acknowledgedRefreshAt = Number(localStorage.getItem('announcementAcknowledgedRefreshAt'));\n if (!Number.isFinite(acknowledgedRefreshAt) || refreshAt > acknowledgedRefreshAt) {\n this.openAnnouncement(announcement);\n }\n return;\n }\n\n // 尚未产生刷新时间的旧公告在升级后再展示一次,确认后使用新版时间标记。\n if (!localStorage.getItem('announcementAcknowledgedAt')) {\n this.openAnnouncement(announcement);\n }\n },\n acknowledgeAnnouncement() {\n localStorage.setItem('announcementAcknowledgedAt', String(Date.now()));\n if (this.displayedAnnouncementRefreshAt) {\n localStorage.setItem('announcementAcknowledgedRefreshAt', String(this.displayedAnnouncementRefreshAt));\n }\n this.showAnnouncementDialog = false;\n },\n // 处理目录选择\n handleDirectorySelect(path) {\n // 填入选择的目录路径\n this.uploadFolder = path;\n // 触发路径验证逻辑\n if (this.validateUploadFolder(path, true)) {\n this.$store.commit('setStoreUploadFolder', path);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHome.vue?vue&type=template&id=06705292&scoped=true\"\nimport script from \"./UploadHome.vue?vue&type=script&lang=js\"\nexport * from \"./UploadHome.vue?vue&type=script&lang=js\"\n\nimport \"./UploadHome.vue?vue&type=style&index=0&id=06705292&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-06705292\"]])\n\nexport default __exports__","/**\r\n * 路径验证器模块\r\n * 提供共享的文件夹路径验证功能,供 AdminDashBoard 和 UploadHome 共同使用\r\n */\r\nimport i18n from '@/locales'\r\n\r\n/**\r\n * 验证文件夹路径的合法性\r\n * @param {string} path - 要验证的路径\r\n * @param {{ strict?: boolean }} options - 选项,strict 为 true 时检查末尾单独的 \".\"(默认 true)\r\n * @returns {{ valid: boolean, error?: string }} 验证结果\r\n */\r\nexport function validateFolderPath(path, { strict = true } = {}) {\r\n // 如果路径为空或仅为空白字符,返回有效(表示根目录)\r\n if (!path || path.trim() === '') {\r\n return { valid: true };\r\n }\r\n \r\n // 如果路径仅为 \"/\",返回有效(表示根目录)\r\n if (path === '/') {\r\n return { valid: true };\r\n }\r\n \r\n // 检查路径是否以 \"/\" 开头\r\n if (!path.startsWith('/')) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.pathMustStartWithSlash') \r\n };\r\n }\r\n\r\n // 检查路径穿越:包含 .. 的路径段\r\n if (/(?:^|\\/)\\.\\.(\\/|$)/.test(path) || path.includes('..')) {\r\n return {\r\n valid: false,\r\n error: i18n.global.t('validation.pathTraversalNotAllowed')\r\n };\r\n }\r\n\r\n // 检查路径中单独的 . 段\r\n // strict 模式检查 /./ 和末尾 /.,非 strict 模式仅检查 /./ 以允许用户继续输入如 /.123\r\n const dotPattern = strict ? /\\/\\.(\\/|$)/ : /\\/\\.\\//;\r\n if (dotPattern.test(path)) {\r\n return {\r\n valid: false,\r\n error: i18n.global.t('validation.singleDotNotAllowed')\r\n };\r\n }\r\n\r\n // 检查路径是否包含连续的斜杠\r\n if (path.includes('//')) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.consecutiveSlashNotAllowed') \r\n };\r\n }\r\n \r\n // 检查路径是否包含非法字符\r\n // 非法字符包括: \\ : * ? \" ' < > | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\r\n const invalidChars = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\r\n if (invalidChars.test(path)) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.invalidCharacters') \r\n };\r\n }\r\n \r\n return { valid: true };\r\n}\r\n","import store from '@/store'\r\nimport router from '@/router'\r\n\r\nlet isRedirecting = false;\r\n\r\nexport default async function fetchWithAuth(url, options = {}) {\r\n // 开发环境下添加 /api 前缀\r\n url = process.env.NODE_ENV === 'production' ? url : `/api${url}`;\r\n\r\n // 确保包含凭据(HttpOnly Cookie 会自动携带)\r\n options.credentials = 'include';\r\n\r\n options.headers = {\r\n ...options.headers,\r\n };\r\n\r\n const response = await fetch(url, options);\r\n\r\n if (response.status === 401 && !isRedirecting) {\r\n isRedirecting = true;\r\n store.commit('setAdminLoggedIn', false);\r\n // 静默跳转登录页,不弹出错误提示(路由守卫负责认证 UX)\r\n router.push('/adminLogin').finally(() => {\r\n isRedirecting = false;\r\n });\r\n }\r\n\r\n return response;\r\n}\r\n","module.exports = require(\"./build/conversion.js\");\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"page-footer\"\n};\nconst _hoisted_2 = [\"href\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return !$options.disableFooter ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"p\", null, [_createTextVNode(\"© 2024-\" + _toDisplayString($options.thisYear) + \" Designed by \", 1), _cache[0] || (_cache[0] = _createElementVNode(\"a\", {\n class: \"footer-name\",\n href: \"https://github.com/MarSeventh\",\n target: \"_blank\"\n }, \"SanyueQi\", -1)), _cache[1] || (_cache[1] = _createTextVNode(\" for You! \", -1)), _createElementVNode(\"a\", {\n href: $options.footerLink,\n target: \"_blank\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"paper-plane\",\n class: \"footer-link-icon\"\n })], 8, _hoisted_2)])])) : _createCommentVNode(\"\", true);\n}","import { mapGetters } from 'vuex';\nexport default {\n name: 'Footer',\n computed: {\n ...mapGetters(['userConfig']),\n footerLink() {\n return this.userConfig?.footerLink || 'https://github.com/MarSeventh';\n },\n thisYear() {\n return new Date().getFullYear();\n },\n disableFooter() {\n return this.userConfig?.disableFooter || false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./Footer.vue?vue&type=template&id=08acbaa9&scoped=true\"\nimport script from \"./Footer.vue?vue&type=script&lang=js\"\nexport * from \"./Footer.vue?vue&type=script&lang=js\"\n\nimport \"./Footer.vue?vue&type=style&index=0&id=08acbaa9&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-08acbaa9\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, mergeProps as _mergeProps, createStaticVNode as _createStaticVNode } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = {\n key: 1,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_3 = {\n key: 2,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"span\", _mergeProps(_ctx.$attrs, {\n class: ['channel-icon-wrapper', `channel-brand-${$props.type}`]\n }), [$props.type === 'telegram' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, [...(_cache[0] || (_cache[0] = [_createElementVNode(\"path\", {\n d: \"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z\"\n }, null, -1)]))])) : $props.type === 'huggingface' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, [...(_cache[1] || (_cache[1] = [_createStaticVNode(\"\", 9)]))])) : $props.type === 'webdav' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_3, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"path\", {\n d: \"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z\"\n }, null, -1)]))])) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: $options.fontAwesomeIcon\n }, null, 8, [\"icon\"]))], 16);\n}","export default {\n name: 'ChannelIcon',\n inheritAttrs: false,\n props: {\n type: {\n type: String,\n required: true\n }\n },\n computed: {\n fontAwesomeIcon() {\n const icons = {\n cfr2: ['fab', 'cloudflare'],\n s3: ['fab', 'aws'],\n discord: ['fab', 'discord']\n };\n return icons[this.type] || 'server';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./ChannelIcon.vue?vue&type=template&id=ce6ff2ce&scoped=true\"\nimport script from \"./ChannelIcon.vue?vue&type=script&lang=js\"\nexport * from \"./ChannelIcon.vue?vue&type=script&lang=js\"\n\nimport \"./ChannelIcon.vue?vue&type=style&index=0&id=ce6ff2ce&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ce6ff2ce\"]])\n\nexport default __exports__"],"names":["_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","href","logoHref","target","class","logo","link","logoClasses","alt","src","logoUrl","name","props","type","String","default","validator","value","includes","customSrc","position","size","enableHover","Boolean","useConfigLink","computed","this","userConfig","logoLink","__exports__","t","e","module","exports","n","r","o","i","l","call","m","c","d","Object","defineProperty","enumerable","get","Symbol","toStringTag","__esModule","create","bind","prototype","hasOwnProperty","p","s","some","a","f","g","w","b","PNG","JPEG","GIF","Promise","u","next","throw","done","then","apply","toDataURL","toBlob","split","match","atob","length","Uint8Array","charCodeAt","Blob","Image","onload","onerror","Error","document","createElement","window","URL","createObjectURL","download","Date","now","toString","body","appendChild","createEvent","initEvent","dispatchEvent","removeChild","FileReader","onloadend","result","readAsDataURL","h","assign","getContext","Number","scale","width","height","orientation","rotate","Math","PI","drawImage","translate","fetch","blob","y","quality","isNaN","accuracy","filter","sort","abs","pow","v","id","_hoisted_3","_hoisted_4","_component_font_awesome_icon","onClick","args","handleToggleClick","mode","isAuto","key","icon","style","isDark","viewBox","fill","stroke","x","cx","cy","mask","opacity","x1","y1","x2","y2","_","data","$store","getters","useDarkMode","cusDarkMode","methods","commit","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_component_el_button","_component_el_tree","_component_el_popover","_component_el_drawer","_directive_loading","isDesktop","visible","popoverVisible","$event","placement","trigger","transition","reference","$slots","undefined","error","fetchDirectoryTree","$t","ref","treeData","treeProps","currentDirectory","onNodeClick","handleNodeClick","node","path","expanded","loading","openDrawer","modelValue","drawerVisible","direction","title","source","children","label","windowWidth","innerWidth","watch","newVal","setTimeout","$refs","treeRef","store","nodesMap","treeRefMobile","$nextTick","setCurrentKey","mounted","addEventListener","handleResize","beforeUnmount","removeEventListener","response","fetchWithAuth","method","ok","status","json","axios","withAuthCode","tree","err","console","startsWith","$emit","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_component_el_tooltip","show","count","totalCount","content","circle","toggleViewMode","viewMode","clearHistory","historyList","onScroll","handleScroll","groupedHistory","group","date","items","item","time","isImage","url","onError","handleImageError","isVideo","muted","copyLink","openLink","deleteItem","formatTime","hasMore","loadingMore","spin","allHistory","pageSize","currentPage","val","resetAndLoad","groups","forEach","dateStr","getFullYear","getMonth","padStart","getDate","push","keys","map","savedMode","localStorage","getItem","loadAllHistory","loadMore","history","JSON","parse","start","end","newItems","slice","container","scrollTop","scrollHeight","clientHeight","setItem","$confirm","confirmButtonText","cancelButtonText","removeItem","$message","success","catch","stringify","fileName","imageExtensions","extension","pop","toLowerCase","videoExtensions","timestamp","year","month","day","hours","getHours","minutes","getMinutes","seconds","getSeconds","navigator","clipboard","writeText","open","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_component_ChannelIcon","_component_el_radio","_component_el_radio_group","_component_el_option","_component_el_select","_component_el_input","_component_el_switch","_component_el_slider","_component_el_input_number","_component_el_dialog","dialogWidth","uploadChannel","currentChannelList","channelName","placeholder","clearable","ch","uploadFolder","handleUploadFolderInput","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","min","max","step","compressQuality","precision","serverCompress","components","ChannelIcon","Array","emits","set","autoplay","playsinline","loop","_component_el_text","_component_el_progress","_component_Link","_component_el_icon","_component_Delete","file","truncated","truncateFilename","finalURL","readonly","selectAllText","urlSize","prepend","mdURL","htmlURL","ubbURL","percentage","progreess","IMAGE_EXTENSIONS","VIDEO_EXTENSIONS","Link","Delete","required","ext","filename","maxLength","lastDotIndex","lastIndexOf","substring","keepEnd","keepStart","event","message","_component_el_upload","_component_el_card","_component_List","_component_Checked","_component_Failed","_component_el_dropdown_item","_component_el_dropdown_menu","_component_el_dropdown","_component_UploadFileItem","_component_el_scrollbar","onMousemove","handleUploadCardMouseMove","onMouseleave","handleUploadCardMouseLeave","uploadMethod","uploading","fileList","drag","multiple","uploadFile","onSuccess","handleSuccess","handleError","beforeUpload","handleProgress","innerHTML","pastedUrls","rows","pasteCardMethodButtonSize","handleUploadPasteUrls","pasteUploadMethod","role","listScrolled","uploadingCount","waitingCount","uploadSuccessCount","uploadErrorCount","disabled","disableTooltip","copyAll","dropdown","autoReUpload","onChange","handleAutoRetryChange","retryError","clearFileList","clearSuccessList","reverse","onCopy","handleCopy","onRemove","handleRemove","onPreviewError","buildFileUrls","srcID","rootUrl","getUrlByFormat","format","md","html","ubb","updateFileListUrls","urls","K","Uint32Array","rotr","processBlock","block","H","W","s0","s1","S1","temp1","S0","maj","temp2","createSha256","buffer","bufferLength","totalLength","update","offset","needed","toCopy","subarray","digest","bitLength","view","DataView","setUint32","floor","hex","async","computeSha256","sha256","CHUNK_SIZE","chunk","arrayBuffer","log","round","UploadFileItem","selectedUrlForm","useCustomUrl","customUrlPrefix","urlPrefix","maxUploading","exceptionList","fileListLength","uploadCount","maxRetryCount","retryTimer","retryDelay","uploadQueue","activeUploads","maxConcurrentUploads","abortControllers","Map","handler","scrollContainer","setScrollTop","deep","immediate","location","protocol","host","handlePaste","storeAutoReUpload","find","uid","waitingItem","uploadingItem","fileItem","uploadSingleFile","HF_DIRECT_THRESHOLD","uploadToHuggingFaceDirect","DISCORD_CHUNK_THRESHOLD","uploadFileInChunks","CHUNK_THRESHOLD","processUploadQueue","nextFile","shift","onUploadComplete","needServerCompress","abortController","AbortController","formData","FormData","append","encodeURIComponent","signal","onUploadProgress","progressEvent","percentCompleted","loaded","total","onProgress","percent","res","code","finally","delete","fileSize","fileType","totalChunks","ceil","precomputedSha256","initFormData","initResponse","uploadId","maxConcurrency","chunkProgress","nextChunkIndex","hasError","errorMsg","isCancelled","uploadChunk","chunkIndex","retryCount","maxRetries","totalPercent","reduce","warn","resolve","pool","currentIndex","all","duration","mergeFormData","closeAll","cleanupUploadResources","cleanupError","has","abort","timeout","replace","saveToHistory","newRecord","scheduleAutoRetry","reject","processedFile","canConvertToWebp","convertedFile","convertImageToWebp","toFixed","needCustomCompress","isLtLim","pushFileToQueue","fileUrl","newFile","File","myUploadCount","join","controller","clear","tagName","clipboardData","uploadFromUrl","validUrls","trim","test","kind","getAsString","callback","mdUrl","htmlUrl","ubbUrl","evt","getAsFile","checkResult","text","urlPattern","post","responseType","headers","disposition","filenameRegex","filenameStarRegex","matches","exec","decodeURIComponent","pathname","retryFailedFiles","files","clearTimeout","filesToRetry","aborted","sampleBytes","fileSample","btoa","fromCharCode","uploadInfoRes","uploadInfo","alreadyExists","needsLfs","uploadAction","header","chunk_size","uploadToHuggingFaceMultipart","uploadRes","commitRes","fullId","filePath","formattedResponse","completionUrl","chunkSize","parseInt","parts","completeParts","totalParts","part","DOMException","index","etag","partNumber","progress","completeResponse","oid","img","canvas","ctx","originalName","newName","webpFile","revokeObjectURL","glow","uploadCardGlow","rect","currentTarget","getBoundingClientRect","clientX","left","clientY","top","beforeDestroy","inputValue","onFocus","handleFocus","onBlur","handleBlur","onInput","handleInput","suggestions","onMousedown","selectItem","dropdownVisible","directoryTreeRoot","directoryTreeLoaded","directoryTreeLoading","directoryChildrenMap","focusTime","isFocused","refreshSuggestions","ensureDirectoryTreeLoaded","normalizedPath","normalizeDirectoryPath","inputRef","focus","getDirectorySuggestions","normalized","endsWith","buildDirectoryChildrenMap","treeRoot","walk","parentPath","isArray","child","parseDirectoryQuery","normalizedInput","raw","segmentInput","parentSegments","queryString","parentChildren","keyword","_component_ToggleDark","_component_DirectorySuggestionInput","_component_DirectoryTreePicker","_component_Logo","_component_UploadForm","_component_UploadSettingsDialog","_component_Footer","_component_UploadHistory","onCommand","handleDesktopMenuCommand","command","announcementAvailable","$i18n","locale","isFolderInputActive","showDirectorySuggestions","handleFolderInputFocus","handleFolderInputBlur","onSelect","handleDirectorySelect","handleChangeUploadMethod","handleMobileMenuCommand","getThemeIcon","getThemeText","isQuickToolbarOpen","handleQuickToolbarLeave","handleQuickToolbarCommand","openCompressDialog","onMouseenter","handleQuickToolbarMoreEnter","toggleQuickToolbar","ownerName","showUrlDialog","changeUrlForm","showCompressDialog","showAnnouncementDialog","center","footer","acknowledgeAnnouncement","announcementContent","showHistory","onClose","mixins","backgroundManager","availableChannels","useDefaultWallPaper","isQuickToolbarPinned","displayedAnnouncementRefreshAt","themeMode","updateCompressConfig","updateStoreUploadChannel","newChannelList","savedChannelName","storeChannelName","updateStoreUploadNameType","validateUploadFolder","strictResult","strict","valid","storeUploadFolder","announcement","initializeBackground","uploadCopyUrlForm","compressConfig","parseBoolean","defaultCustomerCompress","parseNumber","defaultCompressQuality","defaultCompressBar","defaultConvertToWebp","storeUploadChannel","defaultUploadChannel","storeAutoRetry","storeUploadNameType","defaultUploadNameType","customUrlSettings","storeUploadMethod","fetchAvailableChannels","defaultUploadFolder","showAnnouncementIfNeeded","UploadForm","Footer","ToggleDark","Logo","UploadHistory","UploadSettingsDialog","DirectoryTreePicker","DirectorySuggestionInput","defaultChannelName","handleManage","$router","defaultValue","num","parseFloat","openUrlDialog","handleLogout","authType","withCredentials","closeQuickToolbar","handleShowAnnouncement","openAnnouncement","info","getAnnouncementRefreshAt","refreshAt","announcementRefreshAt","isFinite","acknowledgedRefreshAt","validateFolderPath","i18n","global","dotPattern","invalidChars","isRedirecting","options","credentials","router","disableFooter","thisYear","footerLink","xmlns","$attrs","fontAwesomeIcon","inheritAttrs","icons","cfr2","s3","discord"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/24.e38d6915.js.map.gz b/frontend-dist/js/24.e38d6915.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..3cf78e7b8cc03d54d4cb404f1d94db08089665f8 GIT binary patch literal 78575 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⁣=17z2*LUCD>wgiTLKBP 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 literal 0 HcmV?d00001 diff --git a/frontend-dist/js/36.1f3c2bdf.js b/frontend-dist/js/36.1f3c2bdf.js deleted file mode 100644 index 1e339b4d..00000000 --- a/frontend-dist/js/36.1f3c2bdf.js +++ /dev/null @@ -1,2 +0,0 @@ -(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[36],{213:function(e,t,o){"use strict";o(85331),o(19104)},732:function(e,t,o){"use strict";o.d(t,{A:function(){return p}});var s=o(56768),a=o(24232);const i=["href","target"],l=["alt","src"];function n(e,t,o,n,r,d){return(0,s.uX)(),(0,s.CE)("a",{href:d.logoHref,target:o.target,class:(0,a.C4)(e.logo-e.link)},[(0,s.Lk)("img",{class:(0,a.C4)(d.logoClasses),alt:o.alt,src:d.logoUrl},null,10,l)],10,i)}var r=o(60782),d={name:"Logo",props:{href:{type:String,default:"https://github.com/MarSeventh/CloudFlare-ImgBed"},target:{type:String,default:"_blank",validator:e=>["_blank","_self","_parent","_top"].includes(e)},alt:{type:String,default:"Sanyue logo"},customSrc:{type:String,default:""},position:{type:String,default:"fixed",validator:e=>["fixed","relative","absolute","static"].includes(e)},size:{type:String,default:"normal",validator:e=>["small","normal","large"].includes(e)},enableHover:{type:Boolean,default:!0},useConfigLink:{type:Boolean,default:!1}},computed:{...(0,r.L8)(["userConfig"]),logoUrl(){return this.customSrc||this.userConfig?.logoUrl||o(33153)},logoHref(){return this.useConfigLink&&this.userConfig?.logoLink?this.userConfig.logoLink:this.href},logoClasses(){return{logo:!0,[`logo--${this.position}`]:!0,[`logo--${this.size}`]:!0,"logo--hover-enabled":this.enableHover}}}},c=o(71241);const u=(0,c.A)(d,[["render",n],["__scopeId","data-v-17f54292"]]);var p=u},1036:function(e,t,o){"use strict";o.r(t),o.d(t,{default:function(){return Ao}});var s=o(78507),a=(o(85331),o(213),o(80047)),i=(o(99648),o(56768)),l=o(24232);const n={class:"history-header"},r={class:"header-left"},d={class:"record-count"},c={class:"header-right"},u={class:"timeline-header"},p={class:"date-label"},h={key:0,class:"grid-view"},m={class:"grid-preview"},g=["src"],f=["src"],y={key:2,class:"file-icon-wrapper"},b={class:"grid-overlay"},k={class:"grid-actions"},v={class:"grid-info"},C=["title"],w={class:"upload-time"},F={key:1,class:"list-view"},L={class:"list-preview"},U=["src"],$=["src"],S={key:2,class:"file-icon-wrapper-small"},T={class:"list-info"},_=["title"],x=["title"],M={class:"list-meta"},A={class:"upload-time"},R={class:"list-actions"},D={key:0,class:"load-more-container"},E={key:0,class:"loading-indicator"},I={key:1,class:"load-more-hint"},N={key:1,class:"no-more-hint"},P={key:1,class:"empty-state"};function z(e,t,o,z,W,V){const B=(0,i.g2)("font-awesome-icon"),H=a.S2,Q=s.R7;return(0,i.uX)(),(0,i.CE)("div",{class:(0,l.C4)(["history-container",{active:o.show}])},[(0,i.Lk)("div",n,[(0,i.Lk)("div",r,[(0,i.Lk)("h2",null,(0,l.v_)(e.$t("uploadHistory.title")),1),(0,i.Lk)("span",d,(0,l.v_)(e.$t("uploadHistory.totalRecords",{count:W.totalCount})),1)]),(0,i.Lk)("div",c,[(0,i.bF)(Q,{content:e.$t("uploadHistory.switchView"),placement:"bottom","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(H,{circle:"",onClick:V.toggleViewMode},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"grid"===W.viewMode?"list":"th-large"},null,8,["icon"])]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,i.bF)(Q,{content:e.$t("uploadHistory.clearRecords"),placement:"bottom","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(H,{circle:"",type:"danger",onClick:V.clearHistory},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])]),_:1},8,["content"]),(0,i.bF)(H,{circle:"",onClick:t[0]||(t[0]=t=>e.$emit("close"))},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"times"})]),_:1})])]),W.historyList.length>0?((0,i.uX)(),(0,i.CE)("div",{key:0,class:"history-content",ref:"historyContent",onScroll:t[3]||(t[3]=(...e)=>V.handleScroll&&V.handleScroll(...e))},[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(V.groupedHistory,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.date,class:"history-group"},[(0,i.Lk)("div",u,[t[4]||(t[4]=(0,i.Lk)("div",{class:"timeline-dot"},null,-1)),(0,i.Lk)("span",p,(0,l.v_)(e.date),1)]),"grid"===W.viewMode?((0,i.uX)(),(0,i.CE)("div",h,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(e.items,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.time,class:"grid-item"},[(0,i.Lk)("div",m,[V.isImage(e.name)?((0,i.uX)(),(0,i.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[1]||(t[1]=(...e)=>V.handleImageError&&V.handleImageError(...e))},null,40,g)):V.isVideo(e.name)?((0,i.uX)(),(0,i.CE)("video",{key:1,src:e.url,muted:""},null,8,f)):((0,i.uX)(),(0,i.CE)("div",y,[(0,i.bF)(B,{icon:"file",class:"file-icon"})])),(0,i.Lk)("div",b,[(0,i.Lk)("div",k,[(0,i.bF)(H,{circle:"",size:"default",type:"primary",onClick:t=>V.copyLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"default",class:"action-btn-view",onClick:t=>V.openLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"default",type:"danger",onClick:t=>V.deleteItem(e)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])])]),(0,i.Lk)("div",v,[(0,i.Lk)("div",{class:"file-name",title:e.name},(0,l.v_)(e.name),9,C),(0,i.Lk)("div",w,(0,l.v_)(V.formatTime(e.time)),1)])]))),128))])):((0,i.uX)(),(0,i.CE)("div",F,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(e.items,e=>((0,i.uX)(),(0,i.CE)("div",{key:e.time,class:"list-item"},[(0,i.Lk)("div",L,[V.isImage(e.name)?((0,i.uX)(),(0,i.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[2]||(t[2]=(...e)=>V.handleImageError&&V.handleImageError(...e))},null,40,U)):V.isVideo(e.name)?((0,i.uX)(),(0,i.CE)("video",{key:1,src:e.url,muted:""},null,8,$)):((0,i.uX)(),(0,i.CE)("div",S,[(0,i.bF)(B,{icon:"file"})]))]),(0,i.Lk)("div",T,[(0,i.Lk)("div",{class:"file-name",title:e.name},(0,l.v_)(e.name),9,_),(0,i.Lk)("div",{class:"file-url",title:e.url},(0,l.v_)(e.url),9,x)]),(0,i.Lk)("div",M,[(0,i.Lk)("div",A,(0,l.v_)(V.formatTime(e.time)),1)]),(0,i.Lk)("div",R,[(0,i.bF)(H,{circle:"",size:"small",type:"primary",onClick:t=>V.copyLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"copy"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"small",class:"action-btn-view",onClick:t=>V.openLink(e.url)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,i.bF)(H,{circle:"",size:"small",type:"danger",onClick:t=>V.deleteItem(e)},{default:(0,i.k6)(()=>[(0,i.bF)(B,{icon:"trash-alt"})]),_:1},8,["onClick"])])]))),128))]))]))),128)),V.hasMore?((0,i.uX)(),(0,i.CE)("div",D,[W.loadingMore?((0,i.uX)(),(0,i.CE)("div",E,[(0,i.bF)(B,{icon:"spinner",spin:""}),(0,i.Lk)("span",null,(0,l.v_)(e.$t("uploadHistory.loading")),1)])):((0,i.uX)(),(0,i.CE)("div",I,(0,l.v_)(e.$t("uploadHistory.pullToLoadMore")),1))])):W.historyList.length>0?((0,i.uX)(),(0,i.CE)("div",N,(0,l.v_)(e.$t("uploadHistory.noMoreRecords")),1)):(0,i.Q3)("",!0)],544)):((0,i.uX)(),(0,i.CE)("div",P,[(0,i.bF)(B,{icon:"history",class:"empty-icon"}),(0,i.Lk)("p",null,(0,l.v_)(e.$t("uploadHistory.emptyHistory")),1)]))],2)}o(44114),o(18111),o(22489),o(7588),o(61701);var W={name:"UploadHistory",props:{show:{type:Boolean,default:!1}},data(){return{historyList:[],allHistory:[],viewMode:"grid",pageSize:30,currentPage:0,loadingMore:!1,totalCount:0}},watch:{show(e){e&&this.resetAndLoad()}},computed:{hasMore(){return this.historyList.length{const o=new Date(t.time),s=`${o.getFullYear()}-${String(o.getMonth()+1).padStart(2,"0")}-${String(o.getDate()).padStart(2,"0")}`;e[s]||(e[s]=[]),e[s].push(t)}),Object.keys(e).sort((e,t)=>new Date(t)-new Date(e)).map(t=>({date:t,items:e[t]}))}},mounted(){const e=localStorage.getItem("historyViewMode");e&&(this.viewMode=e)},methods:{resetAndLoad(){this.historyList=[],this.currentPage=0,this.loadAllHistory(),this.loadMore()},loadAllHistory(){try{const e=JSON.parse(localStorage.getItem("uploadHistory")||"[]");this.allHistory=e.sort((e,t)=>t.time-e.time),this.totalCount=this.allHistory.length}catch(e){console.error("Failed to load history",e),this.allHistory=[],this.totalCount=0}},loadMore(){!this.loadingMore&&this.hasMore&&(this.loadingMore=!0,setTimeout(()=>{const e=this.currentPage*this.pageSize,t=e+this.pageSize,o=this.allHistory.slice(e,t);this.historyList=[...this.historyList,...o],this.currentPage++,this.loadingMore=!1},50))},handleScroll(e){const t=e.target,o=t.scrollTop,s=t.scrollHeight,a=t.clientHeight;s-o-a<100&&this.loadMore()},toggleViewMode(){this.viewMode="grid"===this.viewMode?"list":"grid",localStorage.setItem("historyViewMode",this.viewMode)},clearHistory(){this.$confirm(this.$t("uploadHistory.clearConfirmMessage"),this.$t("uploadHistory.clearConfirmTitle"),{confirmButtonText:this.$t("uploadHistory.clearConfirmOk"),cancelButtonText:this.$t("uploadHistory.clearConfirmCancel"),type:"warning"}).then(()=>{this.historyList=[],this.allHistory=[],this.totalCount=0,this.currentPage=0,localStorage.removeItem("uploadHistory"),this.$message.success(this.$t("uploadHistory.recordsCleared"))}).catch(()=>{})},deleteItem(e){this.$confirm(this.$t("uploadHistory.deleteConfirmMessage"),this.$t("uploadHistory.clearConfirmTitle"),{confirmButtonText:this.$t("uploadHistory.clearConfirmOk"),cancelButtonText:this.$t("uploadHistory.clearConfirmCancel"),type:"warning"}).then(()=>{this.historyList=this.historyList.filter(t=>t.time!==e.time),this.allHistory=this.allHistory.filter(t=>t.time!==e.time),this.totalCount=this.allHistory.length;try{localStorage.setItem("uploadHistory",JSON.stringify(this.allHistory)),this.$message.success(this.$t("uploadHistory.recordDeleted"))}catch(t){console.error("Failed to update history",t)}}).catch(()=>{})},isImage(e){const t=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp"],o=e?e.split(".").pop().toLowerCase():"";return t.includes(o)},isVideo(e){const t=["mp4","webm","ogg","mkv"],o=e?e.split(".").pop().toLowerCase():"";return t.includes(o)},formatTime(e){const t=new Date(e),o=t.getFullYear(),s=String(t.getMonth()+1).padStart(2,"0"),a=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),l=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return`${o}-${s}-${a} ${i}:${l}:${n}`},copyLink(e){navigator.clipboard.writeText(e).then(()=>{this.$message.success(this.$t("uploadHistory.linkCopied"))}).catch(()=>{this.$message.error(this.$t("uploadHistory.copyFailed"))})},openLink(e){window.open(e,"_blank")},handleImageError(e){e.target.src=o(96682)}}},V=o(71241);const B=(0,V.A)(W,[["render",z],["__scopeId","data-v-7da2f8c2"]]);var H=B,Q=o(86975),X=o(9267),q=(o(15616),o(81418)),O=(o(50333),o(74757)),j=o(55558),G=(o(10456),o(39623)),K=(o(29092),o(76018)),J=(o(96808),o(67819),o(66810)),Y=(o(34396),o(4885),o(97769));const Z={class:"dialog-section"},ee={class:"section-header"},te={class:"section-title"},oe={class:"section-content"},se={class:"setting-item"},ae={class:"setting-label"},ie={key:0,class:"setting-item"},le={class:"setting-label"},ne={class:"setting-item"},re={class:"setting-label"},de={class:"setting-item"},ce={class:"setting-label"},ue={class:"dialog-section"},pe={class:"section-header"},he={class:"section-title"},me={class:"section-content"},ge={class:"dialog-section"},fe={class:"section-header"},ye={class:"section-title"},be={class:"section-content"},ke={class:"setting-item"},ve={class:"setting-label"},Ce={class:"setting-item"},we={class:"setting-label"},Fe={key:0,class:"setting-item slider-item"},Le={class:"setting-label"},Ue={class:"slider-wrapper"},$e={class:"slider-input-wrapper"},Se={key:1,class:"setting-item slider-item"},Te={class:"setting-label"},_e={class:"slider-wrapper"},xe={class:"slider-input-wrapper"},Me={key:0,class:"dialog-section"},Ae={class:"section-header"},Re={class:"section-title"},De={class:"section-content"},Ee={class:"setting-item"},Ie={class:"setting-label"},Ne={class:"dialog-action"};function Pe(e,t,o,n,r,d){const c=Y.A,u=J.ll,p=J.MQ,h=(0,i.g2)("font-awesome-icon"),m=s.R7,g=K.P9,f=K.AV,y=G.WK,b=j.qi,k=O.B8,v=q.lq,C=a.S2,w=X.kZ;return(0,i.uX)(),(0,i.Wv)(w,{title:e.$t("uploadSettings.title"),modelValue:d.visible,"onUpdate:modelValue":t[12]||(t[12]=e=>d.visible=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog settings-dialog-scope upload-settings-dialog"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Z,[(0,i.Lk)("div",ee,[(0,i.Lk)("span",te,(0,l.v_)(e.$t("uploadSettings.uploadChannel")),1)]),(0,i.Lk)("div",oe,[(0,i.Lk)("div",se,[(0,i.Lk)("span",ae,(0,l.v_)(e.$t("uploadSettings.channelType")),1),(0,i.bF)(p,{"model-value":o.uploadChannel,"onUpdate:modelValue":t[0]||(t[0]=t=>e.$emit("update:uploadChannel",t)),class:"radio-card-group compact"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{label:"telegram",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"telegram",class:"channel-icon"}),t[13]||(t[13]=(0,i.Lk)("span",null,"TG",-1))]),_:1}),(0,i.bF)(u,{label:"cfr2",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"cfr2",class:"channel-icon"}),t[14]||(t[14]=(0,i.Lk)("span",null,"R2",-1))]),_:1}),(0,i.bF)(u,{label:"s3",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"s3",class:"channel-icon"}),t[15]||(t[15]=(0,i.Lk)("span",null,"S3",-1))]),_:1}),(0,i.bF)(u,{label:"discord",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"discord",class:"channel-icon"}),t[16]||(t[16]=(0,i.Lk)("span",null,"DC",-1))]),_:1}),(0,i.bF)(u,{label:"huggingface",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"huggingface",class:"channel-icon"}),t[17]||(t[17]=(0,i.Lk)("span",null,"HF",-1))]),_:1}),(0,i.bF)(u,{label:"webdav",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(c,{type:"webdav",class:"channel-icon"}),t[18]||(t[18]=(0,i.Lk)("span",null,"WD",-1))]),_:1})]),_:1},8,["model-value"])]),o.currentChannelList.length>1?((0,i.uX)(),(0,i.CE)("div",ie,[(0,i.Lk)("span",le,[(0,i.eW)((0,l.v_)(e.$t("uploadSettings.channelName"))+" ",1),(0,i.bF)(m,{content:e.$t("uploadSettings.channelNameTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.bF)(f,{"model-value":o.channelName,"onUpdate:modelValue":t[1]||(t[1]=t=>e.$emit("update:channelName",t)),placeholder:e.$t("uploadSettings.autoSelect"),clearable:"",class:"setting-input"},{default:(0,i.k6)(()=>[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(o.currentChannelList,e=>((0,i.uX)(),(0,i.Wv)(g,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["model-value","placeholder"])])):(0,i.Q3)("",!0),(0,i.Lk)("div",ne,[(0,i.Lk)("span",re,(0,l.v_)(e.$t("uploadSettings.uploadDirectory")),1),(0,i.bF)(y,{"model-value":o.uploadFolder,"onUpdate:modelValue":d.handleUploadFolderInput,placeholder:e.$t("uploadSettings.uploadDirectoryPlaceholder"),class:"setting-input"},null,8,["model-value","onUpdate:modelValue","placeholder"])]),(0,i.Lk)("div",de,[(0,i.Lk)("span",ce,[(0,i.eW)((0,l.v_)(e.$t("uploadSettings.autoSwitch"))+" ",1),(0,i.bF)(m,{content:e.$t("uploadSettings.autoSwitchTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.bF)(b,{"model-value":o.autoRetry,"onUpdate:modelValue":t[2]||(t[2]=t=>e.$emit("update:autoRetry",t))},null,8,["model-value"])])])]),(0,i.Lk)("div",ue,[(0,i.Lk)("div",pe,[(0,i.Lk)("span",he,(0,l.v_)(e.$t("uploadSettings.fileNaming")),1)]),(0,i.Lk)("div",me,[(0,i.bF)(p,{"model-value":o.uploadNameType,"onUpdate:modelValue":t[3]||(t[3]=t=>e.$emit("update:uploadNameType",t)),class:"radio-card-group grid-2x2"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{label:"default",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"cog",class:"radio-icon"}),(0,i.Lk)("span",null,(0,l.v_)(e.$t("uploadSettings.namingDefault")),1)]),_:1}),(0,i.bF)(u,{label:"index",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"hashtag",class:"radio-icon"}),(0,i.Lk)("span",null,(0,l.v_)(e.$t("uploadSettings.namingIndex")),1)]),_:1}),(0,i.bF)(u,{label:"origin",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"file-signature",class:"radio-icon"}),(0,i.Lk)("span",null,(0,l.v_)(e.$t("uploadSettings.namingOrigin")),1)]),_:1}),(0,i.bF)(u,{label:"short",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"compress-alt",class:"radio-icon"}),(0,i.Lk)("span",null,(0,l.v_)(e.$t("uploadSettings.namingShort")),1)]),_:1})]),_:1},8,["model-value"])])]),(0,i.Lk)("div",ge,[(0,i.Lk)("div",fe,[(0,i.Lk)("span",ye,(0,l.v_)(e.$t("uploadSettings.filePreprocess")),1),(0,i.bF)(m,{content:e.$t("uploadSettings.filePreprocessTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",be,[(0,i.Lk)("div",ke,[(0,i.Lk)("span",ve,[(0,i.eW)((0,l.v_)(e.$t("uploadSettings.convertToWebp"))+" ",1),(0,i.bF)(m,{content:e.$t("uploadSettings.convertToWebpTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.bF)(b,{"model-value":o.convertToWebp,"onUpdate:modelValue":t[4]||(t[4]=t=>e.$emit("update:convertToWebp",t))},null,8,["model-value"])]),(0,i.Lk)("div",Ce,[(0,i.Lk)("span",we,(0,l.v_)(e.$t("uploadSettings.fileCompress")),1),(0,i.bF)(b,{"model-value":o.customerCompress,"onUpdate:modelValue":t[5]||(t[5]=t=>e.$emit("update:customerCompress",t))},null,8,["model-value"])]),o.customerCompress?((0,i.uX)(),(0,i.CE)("div",Fe,[(0,i.Lk)("span",Le,[(0,i.eW)((0,l.v_)(e.$t("uploadSettings.compressThreshold"))+" ",1),(0,i.bF)(m,{content:e.$t("uploadSettings.compressThresholdTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",Ue,[(0,i.bF)(k,{"model-value":o.compressBar,"onUpdate:modelValue":t[6]||(t[6]=t=>e.$emit("update:compressBar",t)),min:1,max:20,"format-tooltip":e=>`${e} MB`},null,8,["model-value","format-tooltip"]),(0,i.Lk)("div",$e,[(0,i.bF)(v,{"model-value":o.compressBar,"onUpdate:modelValue":t[7]||(t[7]=t=>e.$emit("update:compressBar",t)),min:1,max:20,step:1,"value-on-clear":1,class:"slider-input","controls-position":"right"},null,8,["model-value"]),t[19]||(t[19]=(0,i.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,i.Q3)("",!0),o.customerCompress?((0,i.uX)(),(0,i.CE)("div",Se,[(0,i.Lk)("span",Te,[(0,i.eW)((0,l.v_)(e.$t("uploadSettings.expectedSize"))+" ",1),(0,i.bF)(m,{content:e.$t("uploadSettings.expectedSizeTooltip"),placement:"top"},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"inline-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",_e,[(0,i.bF)(k,{"model-value":o.compressQuality,"onUpdate:modelValue":t[8]||(t[8]=t=>e.$emit("update:compressQuality",t)),min:.5,max:o.compressBar,step:.1,"format-tooltip":e=>`${e} MB`},null,8,["model-value","max","format-tooltip"]),(0,i.Lk)("div",xe,[(0,i.bF)(v,{"model-value":o.compressQuality,"onUpdate:modelValue":t[9]||(t[9]=t=>e.$emit("update:compressQuality",t)),min:.5,max:o.compressBar,step:.1,precision:1,"value-on-clear":.5,class:"slider-input","controls-position":"right"},null,8,["model-value","max"]),t[20]||(t[20]=(0,i.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,i.Q3)("",!0)])]),"telegram"===o.uploadChannel?((0,i.uX)(),(0,i.CE)("div",Me,[(0,i.Lk)("div",Ae,[(0,i.Lk)("span",Re,(0,l.v_)(e.$t("uploadSettings.serverCompress")),1),(0,i.bF)(m,{content:e.$t("uploadSettings.serverCompressTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(h,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",De,[(0,i.Lk)("div",Ee,[(0,i.Lk)("span",Ie,(0,l.v_)(e.$t("uploadSettings.enableCompress")),1),(0,i.bF)(b,{"model-value":o.serverCompress,"onUpdate:modelValue":t[10]||(t[10]=t=>e.$emit("update:serverCompress",t))},null,8,["model-value"])])])])):(0,i.Q3)("",!0),(0,i.Lk)("div",Ne,[(0,i.bF)(C,{type:"primary",onClick:t[11]||(t[11]=e=>d.visible=!1),class:"confirm-btn"},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(e.$t("uploadSettings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"])}var ze={name:"UploadSettingsDialog",components:{ChannelIcon:Y.A},methods:{handleUploadFolderInput(e){e&&!e.startsWith("/")&&(e="/"+e),this.$emit("update:uploadFolder",e)}},props:{modelValue:{type:Boolean,default:!1},uploadChannel:{type:String,default:"telegram"},channelName:{type:String,default:""},currentChannelList:{type:Array,default:()=>[]},uploadFolder:{type:String,default:""},autoRetry:{type:Boolean,default:!0},uploadNameType:{type:String,default:"default"},convertToWebp:{type:Boolean,default:!1},customerCompress:{type:Boolean,default:!0},compressBar:{type:Number,default:5},compressQuality:{type:Number,default:4},serverCompress:{type:Boolean,default:!0}},emits:["update:modelValue","update:uploadChannel","update:channelName","update:uploadFolder","update:autoRetry","update:uploadNameType","update:convertToWebp","update:customerCompress","update:compressBar","update:compressQuality","update:serverCompress"],computed:{visible:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}},dialogWidth(){return window.innerWidth>768?"50%":"90%"}}};const We=(0,V.A)(ze,[["render",Pe]]);var Ve=We,Be=o(88559),He=(o(85970),o(813)),Qe=(o(34896),o(69655)),Xe=(o(2893),o(74253));o(79899);const qe={class:"upload-list-item"},Oe=["href"],je={key:0,style:{width:"10vw","border-radius":"12px"},autoplay:"",muted:"",playsinline:"",loop:""},Ge=["src"],Ke=["src"],Je={key:2,style:{width:"10vw","border-radius":"12px"}},Ye={class:"upload-list-item-content"},Ze={class:"upload-list-item-name-wrapper"},et={key:0,class:"upload-list-item-url"},tt={class:"upload-list-item-url-row"},ot={class:"upload-list-item-url-row"},st={key:1,class:"upload-list-item-progress"},at={class:"upload-list-item-action"};function it(e,t,o,s,a,n){const r=(0,i.g2)("font-awesome-icon"),d=Xe.$g,c=G.WK,u=Qe.ve,p=(0,i.g2)("Link"),h=He.tk,m=(0,i.g2)("Delete");return(0,i.uX)(),(0,i.CE)("div",qe,[(0,i.Lk)("a",{href:o.file.url,target:"_blank",class:"upload-list-item-preview"},[n.isVideo(o.file.name)?((0,i.uX)(),(0,i.CE)("video",je,[(0,i.Lk)("source",{src:o.file.url,type:"video/mp4"},null,8,Ge),t[7]||(t[7]=(0,i.eW)(" Your browser does not support the video tag. ",-1))])):n.isImage(o.file.name)?((0,i.uX)(),(0,i.CE)("img",{key:1,style:{width:"10vw","border-radius":"12px"},src:o.file.url,onError:t[0]||(t[0]=t=>e.$emit("preview-error",o.file))},null,40,Ke)):((0,i.uX)(),(0,i.CE)("div",Je,[(0,i.bF)(r,{icon:"file",class:"file-icon"})]))],8,Oe),(0,i.Lk)("div",Ye,[(0,i.Lk)("div",Ze,[(0,i.bF)(d,{class:"upload-list-item-name",truncated:""},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(n.truncateFilename(o.file.name)),1)]),_:1})]),"done"===o.file.status?((0,i.uX)(),(0,i.CE)("div",et,[(0,i.Lk)("div",tt,[(0,i.bF)(c,{modelValue:o.file.finalURL,"onUpdate:modelValue":t[1]||(t[1]=e=>o.file.finalURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[8]||(t[8]=[(0,i.eW)("URL",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,i.bF)(c,{modelValue:o.file.mdURL,"onUpdate:modelValue":t[2]||(t[2]=e=>o.file.mdURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[9]||(t[9]=[(0,i.eW)("MarkDown",-1)])]),_:1},8,["modelValue","onClick","size"])]),(0,i.Lk)("div",ot,[(0,i.bF)(c,{modelValue:o.file.htmlURL,"onUpdate:modelValue":t[3]||(t[3]=e=>o.file.htmlURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[10]||(t[10]=[(0,i.eW)("HTML",-1)])]),_:1},8,["modelValue","onClick","size"]),(0,i.bF)(c,{modelValue:o.file.ubbURL,"onUpdate:modelValue":t[4]||(t[4]=e=>o.file.ubbURL=e),readonly:"",onClick:n.selectAllText,size:n.urlSize},{prepend:(0,i.k6)(()=>[...t[11]||(t[11]=[(0,i.eW)("BBCode",-1)])]),_:1},8,["modelValue","onClick","size"])])])):((0,i.uX)(),(0,i.CE)("div",st,[(0,i.bF)(u,{percentage:o.file.progreess,status:o.file.status,"show-text":!1},null,8,["percentage","status"])]))]),(0,i.Lk)("div",at,[(0,i.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-primary",onClick:t[5]||(t[5]=t=>e.$emit("copy",o.file))},[(0,i.bF)(h,null,{default:(0,i.k6)(()=>[(0,i.bF)(p)]),_:1})]),(0,i.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-danger",onClick:t[6]||(t[6]=t=>e.$emit("remove",o.file))},[(0,i.bF)(h,null,{default:(0,i.k6)(()=>[(0,i.bF)(m)]),_:1})])])])}var lt=o(57477);const nt=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp","raw","cr2","nef","dng","eps","ai","emf","wmf"],rt=["mp4","webm","ogg","mkv"];var dt={name:"UploadFileItem",components:{Link:lt.Link,Delete:lt.Delete},props:{file:{type:Object,required:!0}},emits:["copy","remove","preview-error"],computed:{urlSize(){return window.innerWidth<768?"small":"default"}},methods:{isImage(e){const t=e.split(".").pop().toLowerCase();return nt.includes(t)},isVideo(e){const t=e.split(".").pop().toLowerCase();return rt.includes(t)},truncateFilename(e,t=20){if(!e||e.length<=t)return e;const o=e.lastIndexOf(".");let s,a;o>0?(s=e.substring(0,o),a=e.substring(o)):(s=e,a="");const i=a.length+4,l=t-i-3;return l<=0?e.substring(0,t-3)+"...":s.substring(0,l)+"..."+s.slice(-4)+a},selectAllText(e){navigator.clipboard.writeText(e.target.value).then(()=>{this.$message({type:"success",message:this.$t("uploadForm.copySuccess")})}).catch(()=>{this.$message({type:"error",message:this.$t("uploadForm.copyFailed")})})}}};const ct=(0,V.A)(dt,[["render",it],["__scopeId","data-v-645a7810"]]);var ut=ct,pt=o(62086),ht=(o(40670),o(88830),o(23597),o(70683)),mt=(o(95385),o(47358));const gt={class:"upload-form"},ft={class:"upload-card-glow",ref:"uploadCardGlow"},yt=["innerHTML"],bt={key:0,class:"upload-card"},kt={class:"paste-card-actions"},vt=["aria-label"],Ct=["aria-pressed"],wt=["aria-pressed"],Ft={class:"upload-list-container"},Lt={class:"upload-list-dashboard-action"},Ut={class:"modern-action-group"},$t={class:"modern-dropdown-item-content"},St={class:"modern-action-btn modern-action-btn-danger"};function Tt(e,t,n,r,d,c){const u=He.tk,p=mt.j5,h=G.WK,m=a.S2,g=ht.Ik,f=(0,i.g2)("List"),y=(0,i.g2)("Checked"),b=(0,i.g2)("Failed"),k=Xe.$g,v=(0,i.g2)("font-awesome-icon"),C=s.R7,w=j.qi,F=pt.c6,L=pt.Iy,U=pt.dW,$=ut,S=Be.kA;return(0,i.uX)(),(0,i.CE)("div",gt,[(0,i.Lk)("div",{class:"upload-card-wrapper",onMousemove:t[0]||(t[0]=(...e)=>c.handleUploadCardMouseMove&&c.handleUploadCardMouseMove(...e)),onMouseleave:t[1]||(t[1]=(...e)=>c.handleUploadCardMouseLeave&&c.handleUploadCardMouseLeave(...e))},[(0,i.Lk)("div",ft,null,512),"default"===n.uploadMethod?((0,i.uX)(),(0,i.Wv)(p,{key:0,class:(0,l.C4)(["upload-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}]),drag:"",multiple:"","http-request":c.uploadFile,onSuccess:c.handleSuccess,"on-error":c.handleError,"before-upload":c.beforeUpload,"on-progress":c.handleProgress,"file-list":d.fileList,"show-file-list":!1},{default:(0,i.k6)(()=>[(0,i.bF)(u,{class:(0,l.C4)(["el-icon--upload",{"upload-list-busy":d.fileList.length}])},{default:(0,i.k6)(()=>[...t[9]||(t[9]=[(0,i.Lk)("svg",{class:"upload-plus-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.25","stroke-linecap":"round","aria-hidden":"true"},[(0,i.Lk)("path",{d:"M12 7v10"}),(0,i.Lk)("path",{d:"M7 12h10"})],-1)])]),_:1},8,["class"]),(0,i.Lk)("div",{class:(0,l.C4)(["el-upload__text",{"upload-list-busy":d.fileList.length}]),innerHTML:e.$t("upload.dragUploadText")},null,10,yt)]),_:1},8,["class","http-request","onSuccess","on-error","before-upload","on-progress","file-list"])):(0,i.Q3)("",!0)],32),"paste"===n.uploadMethod?((0,i.uX)(),(0,i.CE)("div",bt,[(0,i.bF)(g,{class:(0,l.C4)(["paste-card",{"is-uploading":d.uploading,"upload-card-busy":d.fileList.length}])},{default:(0,i.k6)(()=>[(0,i.bF)(h,{modelValue:d.pastedUrls,"onUpdate:modelValue":t[2]||(t[2]=e=>d.pastedUrls=e),class:"upload-card-textarea",placeholder:e.$t("upload.pasteUrlPlaceholder"),type:"textarea",rows:d.fileList.length?4:14},null,8,["modelValue","placeholder","rows"]),(0,i.Lk)("div",kt,[(0,i.bF)(m,{class:"paste-card-upload-button",type:"primary",size:c.pasteCardMethodButtonSize,onClick:c.handleUploadPasteUrls},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(e.$t("upload.pasteUploadBtn")),1)]),_:1},8,["size","onClick"]),(0,i.Lk)("div",{class:(0,l.C4)(["paste-card-method-group",{"is-external":"external"===d.pasteUploadMethod}]),role:"group","aria-label":e.$t("upload.switchUploadMethod")},[(0,i.Lk)("button",{class:(0,l.C4)(["paste-card-method-button",{"is-active":"save"===d.pasteUploadMethod}]),type:"button","aria-pressed":"save"===d.pasteUploadMethod,onClick:t[3]||(t[3]=e=>d.pasteUploadMethod="save")},(0,l.v_)(e.$t("upload.pasteSave")),11,Ct),(0,i.Lk)("button",{class:(0,l.C4)(["paste-card-method-button",{"is-active":"external"===d.pasteUploadMethod}]),type:"button","aria-pressed":"external"===d.pasteUploadMethod,onClick:t[4]||(t[4]=e=>d.pasteUploadMethod="external")},(0,l.v_)(e.$t("upload.pasteExternal")),11,wt)],10,vt)])]),_:1},8,["class"])])):(0,i.Q3)("",!0),(0,i.bF)(g,{class:(0,l.C4)(["upload-list-card",{"upload-list-busy":d.fileList.length}])},{default:(0,i.k6)(()=>[(0,i.Lk)("div",Ft,[(0,i.bF)(S,{onScroll:c.handleScroll,ref:"scrollContainer"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",{class:(0,l.C4)(["upload-list-dashboard",{"list-scrolled":d.listScrolled}])},[(0,i.bF)(k,{class:"upload-list-dashboard-title"},{default:(0,i.k6)(()=>[(0,i.bF)(u,null,{default:(0,i.k6)(()=>[(0,i.bF)(f)]),_:1}),(0,i.eW)((0,l.v_)(c.uploadingCount+c.waitingCount)+" ",1),(0,i.bF)(u,null,{default:(0,i.k6)(()=>[(0,i.bF)(y)]),_:1}),(0,i.eW)((0,l.v_)(c.uploadSuccessCount)+" ",1),(0,i.bF)(u,null,{default:(0,i.k6)(()=>[(0,i.bF)(b)]),_:1}),(0,i.eW)((0,l.v_)(c.uploadErrorCount),1)]),_:1}),(0,i.Lk)("div",Lt,[(0,i.Lk)("div",Ut,[(0,i.bF)(C,{disabled:c.disableTooltip,content:e.$t("upload.copyAll"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.Lk)("button",{class:"modern-action-btn modern-action-btn-copy",onClick:t[5]||(t[5]=(...e)=>c.copyAll&&c.copyAll(...e))},[(0,i.bF)(v,{icon:"copy"})])]),_:1},8,["disabled","content"]),(0,i.bF)(C,{disabled:c.disableTooltip,content:e.$t("upload.retryFailed"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(U,null,{dropdown:(0,i.k6)(()=>[(0,i.bF)(L,{class:"modern-dropdown-menu"},{default:(0,i.k6)(()=>[(0,i.bF)(F,null,{default:(0,i.k6)(()=>[(0,i.Lk)("div",$t,[(0,i.Lk)("span",null,(0,l.v_)(e.$t("uploadForm.autoRetry")),1),(0,i.bF)(w,{modelValue:d.autoReUpload,"onUpdate:modelValue":t[7]||(t[7]=e=>d.autoReUpload=e),onChange:c.handleAutoRetryChange,size:"small"},null,8,["modelValue","onChange"])])]),_:1})]),_:1})]),default:(0,i.k6)(()=>[(0,i.Lk)("button",{class:"modern-action-btn modern-action-btn-retry",onClick:t[6]||(t[6]=(...e)=>c.retryError&&c.retryError(...e))},[(0,i.bF)(v,{icon:"redo"})])]),_:1})]),_:1},8,["disabled","content"]),(0,i.bF)(C,{disabled:c.disableTooltip,content:e.$t("upload.clearList"),placement:"top","show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(U,null,{dropdown:(0,i.k6)(()=>[(0,i.bF)(L,{class:"modern-dropdown-menu"},{default:(0,i.k6)(()=>[(0,i.bF)(F,{onClick:c.clearFileList},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(e.$t("upload.clearAll")),1)]),_:1},8,["onClick"]),(0,i.bF)(F,{onClick:c.clearSuccessList},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(e.$t("upload.clearUploaded")),1)]),_:1},8,["onClick"])]),_:1})]),default:(0,i.k6)(()=>[(0,i.Lk)("button",St,[(0,i.bF)(v,{icon:"trash-alt"})])]),_:1})]),_:1},8,["disabled","content"])])])],2),((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(d.fileList.slice().reverse(),e=>((0,i.uX)(),(0,i.Wv)($,{key:e.name,file:e,onCopy:c.handleCopy,onRemove:c.handleRemove,onPreviewError:t[8]||(t[8]=e=>e.url=o(96682))},null,8,["file","onCopy","onRemove"]))),128))]),_:1},8,["onScroll"])])]),_:1},8,["class"])])}o(20116),o(18237),o(79577),o(41549),o(49797),o(49631),o(35623),o(64979);var _t=o(457),xt=o(76334),Mt=o(60782);function At(e,t,o){const s=o+e;return{finalURL:s,mdURL:`![${t}](${s})`,htmlURL:`${t}`,ubbURL:`[img]${s}[/img]`}}function Rt(e,t){const o={url:e.finalURL,md:e.mdURL,html:e.htmlURL,ubb:e.ubbURL};return o[t]||e.finalURL}function Dt(e,t){e.forEach(e=>{if("external"===e.uploadChannel)return;const o=At(e.srcID,e.name,t);Object.assign(e,o)})}const Et=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),It=(e,t)=>e>>>t|e<<32-t;function Nt(e,t){const o=new Uint32Array(64);for(let u=0;u<16;u++)o[u]=e[4*u]<<24|e[4*u+1]<<16|e[4*u+2]<<8|e[4*u+3];for(let u=16;u<64;u++){const e=It(o[u-15],7)^It(o[u-15],18)^o[u-15]>>>3,t=It(o[u-2],17)^It(o[u-2],19)^o[u-2]>>>10;o[u]=o[u-16]+e+o[u-7]+t>>>0}let[s,a,i,l,n,r,d,c]=t;for(let u=0;u<64;u++){const e=It(n,6)^It(n,11)^It(n,25),t=n&r^~n&d,p=c+e+t+Et[u]+o[u]>>>0,h=It(s,2)^It(s,13)^It(s,22),m=s&a^s&i^a&i,g=h+m>>>0;c=d,d=r,r=n,n=l+p>>>0,l=i,i=a,a=s,s=p+g>>>0}t[0]=t[0]+s>>>0,t[1]=t[1]+a>>>0,t[2]=t[2]+i>>>0,t[3]=t[3]+l>>>0,t[4]=t[4]+n>>>0,t[5]=t[5]+r>>>0,t[6]=t[6]+d>>>0,t[7]=t[7]+c>>>0}function Pt(){let e=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),t=new Uint8Array(64),o=0,s=0;return{update(a){s+=a.length;let i=0;if(o>0){const s=64-o,l=Math.min(s,a.length);t.set(a.subarray(0,l),o),o+=l,i=l,64===o&&(Nt(t,e),o=0)}while(i+64<=a.length)Nt(a.subarray(i,i+64),e),i+=64;i56&&(t.fill(0,o,64),Nt(t,e),o=0),t.fill(0,o,56);const i=new DataView(t.buffer);i.setUint32(56,Math.floor(a/4294967296),!1),i.setUint32(60,a>>>0,!1),Nt(t,e);let l="";for(let t=0;t<8;t++)l+=e[t].toString(16).padStart(8,"0");return l}}}async function zt(e){const t=Pt(),o=4194304;let s=0;while(sthis.fileListLength&&this.$nextTick(()=>{setTimeout(()=>{this.$refs.scrollContainer&&this.$refs.scrollContainer.setScrollTop(0)},100)}),this.fileListLength=this.fileList.length},deep:!0},useCustomUrl:{handler(){Dt(this.fileList,this.rootUrl)},immediate:!0},customUrlPrefix:{handler(){"true"===this.useCustomUrl&&Dt(this.fileList,this.rootUrl)},immediate:!0},autoReUpload(e){this.$store.commit("setStoreAutoReUpload",e)}},computed:{...(0,Mt.L8)(["storeAutoReUpload"]),uploadSuccessCount(){return this.fileList.filter(e=>"done"===e.status||"success"===e.status).length},uploadErrorCount(){return this.fileList.filter(e=>"exception"===e.status).length},uploadingCount(){return this.fileList.filter(e=>"uploading"===e.status).length},waitingCount(){return this.uploadQueue.length},urlSize(){return window.innerWidth<768?"small":"default"},disableTooltip(){return window.innerWidth<768},rootUrl(){return"true"===this.useCustomUrl?this.customUrlPrefix:this.urlPrefix||`${window.location.protocol}//${window.location.host}/file/`},pasteCardMethodButtonSize(){return this.fileList.length||window.innerWidth<768?"small":"medium"}},mounted(){document.addEventListener("paste",this.handlePaste),this.autoReUpload=this.storeAutoReUpload},beforeUnmount(){document.removeEventListener("paste",this.handlePaste),this.uploadQueue=[],this.fileList=[],this.activeUploads=0},methods:{truncateFilename(e,t=20){if(!e||e.length<=t)return e;const o=e.lastIndexOf(".");let s,a;o>0?(s=e.substring(0,o),a=e.substring(o)):(s=e,a="");const i=a.length+4,l=t-i-3;return l<=0?e.substring(0,t-3)+"...":s.substring(0,l)+"..."+s.slice(-4)+a},uploadFile(e){if(!this.fileList.find(t=>t.uid===e.file.uid))return;if(this.activeUploads>=this.maxConcurrentUploads){this.uploadQueue.push(e);const t=this.fileList.find(t=>t.uid===e.file.uid);return void(t&&(t.status="waiting"))}this.activeUploads++;const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.status="uploading");const o=this.fileList.find(t=>t.uid===e.file.uid),s=o?.uploadChannel||this.uploadChannel;if("external"===s)return void this.uploadSingleFile(e);if("huggingface"===s){const t=20971520;return void(e.file.size>=t?this.uploadToHuggingFaceDirect(e):this.uploadSingleFile(e))}if("discord"===s){const t=9437184;return void(e.file.size>t?this.uploadFileInChunks(e):this.uploadSingleFile(e))}const a=20971520;e.file.size>a?this.uploadFileInChunks(e):this.uploadSingleFile(e)},processUploadQueue(){if(0===this.uploadQueue.length||this.activeUploads>=this.maxConcurrentUploads)return;const e=this.uploadQueue.shift();e&&this.fileList.find(t=>t.uid===e.file.uid)?this.uploadFile(e):this.processUploadQueue()},onUploadComplete(){this.activeUploads=Math.max(0,this.activeUploads-1),this.processUploadQueue(),0===this.activeUploads&&0===this.uploadQueue.length&&(this.uploading=!1)},async uploadSingleFile(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=t.serverCompress,s=t.uploadChannel||this.uploadChannel,a=this.autoRetry&&"external"!==s,i="external"===s?"default":this.uploadNameType,l=new AbortController;this.abortControllers.set(e.file.uid,l);const n=new FormData;if(n.append("file",e.file),"external"===s&&n.append("url",e.file.url),"huggingface"===s)try{console.log("Computing SHA256 for HuggingFace upload...");const t=await zt(e.file);n.append("sha256",t),console.log("SHA256 computed:",t)}catch(r){console.error("Failed to compute SHA256:",r)}(0,_t.A)({url:"/upload?serverCompress="+o+"&uploadChannel="+s+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+i+"&autoRetry="+a+"&uploadFolder="+encodeURIComponent(this.uploadFolder),method:"post",data:n,withAuthCode:!0,signal:l.signal,onUploadProgress:t=>{const o=Math.round(t.loaded/t.total*100);e.onProgress({percent:o,file:e.file})}}).then(t=>{e.onSuccess(t,e.file)}).catch(t=>{"CanceledError"!==t.name&&"ERR_CANCELED"!==t.code?t.response&&401!==t.response.status?(this.exceptionList.push(e),e.onError(t,e.file)):t.response||(this.exceptionList.push(e),e.onError(t,e.file)):console.log("上传已取消:",e.file.name)}).finally(()=>{this.abortControllers.delete(e.file.uid),this.onUploadComplete()})},async uploadFileInChunks(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=t.uploadChannel||this.uploadChannel,s=new AbortController;this.abortControllers.set(e.file.uid,s);const a="discord"===o?9437184:16777216,i=e.file.size,l=e.file.type||"application/octet-stream",n=Math.ceil(i/a),r=t.serverCompress,d=this.autoRetry&&"external"!==o,c="external"===o?"default":this.uploadNameType;let u=null;if("huggingface"===o)try{console.log("Computing SHA256 for HuggingFace chunked upload..."),u=await zt(e.file),console.log("SHA256 computed:",u)}catch(p){console.error("Failed to compute SHA256:",p)}try{const t=new FormData;t.append("originalFileName",e.file.name),t.append("originalFileType",l),t.append("totalChunks",n.toString());const h=await(0,_t.A)({url:"/upload?serverCompress="+r+"&uploadChannel="+o+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+c+"&autoRetry="+d+"&uploadFolder="+encodeURIComponent(this.uploadFolder)+"&initChunked=true",method:"post",data:t,withAuthCode:!0});if(!h.data.success)throw new Error(this.$t("uploadForm.chunkInitFailed")+": "+h.data.message);const m=h.data.uploadId;console.log("分块上传初始化成功,uploadId:",m);const g=this.fileList.find(t=>t.uid===e.file.uid);g&&(g.totalChunks=n,g.uploadId=m);const f=3,y=new Array(n).fill(0);let b=0,k=!1,v="",C=!1;const w=async t=>{if(k||C)return;const u=t*a,h=Math.min(u+a,i),g=e.file.slice(u,h),f=new FormData;f.append("file",g,`${e.file.name}.part${t.toString().padStart(3,"0")}`),f.append("chunkIndex",t.toString()),f.append("totalChunks",n.toString()),f.append("uploadId",m),f.append("originalFileName",e.file.name),f.append("originalFileType",l);let b=0;const w=3;while(b{if(k||C)return;const s=Math.round(o.loaded/o.total*100);y[t]=s;const a=Math.round(y.reduce((e,t)=>e+t,0)/n);e.onProgress({percent:a,file:e.file})}})}catch(p){if("CanceledError"===p.name||"ERR_CANCELED"===p.code)return C=!0,void console.log("分块上传已取消:",e.file.name);if(b++,console.warn(`分块 ${t+1}/${n} 上传失败 (重试 ${b}/${w}):`,p),b>=w)throw k=!0,v=`分块 ${t+1}/${n} 上传失败: ${p.message}`,new Error(v);await new Promise(e=>setTimeout(e,2e3*b))}}},F=[];for(let e=0;e{while(bt.uid===e.file.uid);t&&t.uploadId&&this.cleanupUploadResources(t.uploadId,t.totalChunks).then(()=>{console.log(`已清理分块上传失败的资源: ${t.uploadId}`)}).catch(e=>{console.warn("清理分块上传失败资源时出错:",e)}),p.response&&401!==p.response.status?(this.exceptionList.push(e),e.onError(p,e.file)):p.response||(this.exceptionList.push(e),e.onError(p,e.file))}finally{this.abortControllers.delete(e.file.uid),this.onUploadComplete()}},handleRemove(e){this.abortControllers.has(e.uid)&&(this.abortControllers.get(e.uid).abort(),this.abortControllers.delete(e.uid)),this.uploadQueue=this.uploadQueue.filter(t=>t.file.uid!==e.uid),this.fileList=this.fileList.filter(t=>t.uid!==e.uid),this.$message({type:"info",message:this.$t("uploadForm.deleted",{name:this.truncateFilename(e.name)})})},async cleanupUploadResources(e,t=0){try{await(0,_t.A)({url:`/upload?cleanup=true&uploadId=${e}&totalChunks=${t}`,method:"get",withAuthCode:!0,timeout:5e3}),console.log(`清理上传资源成功: ${e}`)}catch(o){console.warn("清理上传资源失败:",o)}},handleSuccess(e,t){const o=this.fileList.find(e=>e.uid===t.uid);if(o)try{const s=o.uploadChannel||this.uploadChannel;if("external"!==s){const s=e.data[0].src.replace("/file/","");o.url=`${window.location.protocol}//${window.location.host}/file/`+s;const a=At(s,t.name,this.rootUrl);Object.assign(o,a),o.srcID=s}o.progreess=100,o.status="success",this.saveToHistory(o),this.$message({type:"success",message:this.$t("uploadForm.uploadSuccess",{name:this.truncateFilename(t.name)})}),setTimeout(()=>{const e=this.fileList.find(e=>e.uid===t.uid);e&&(e.status="done")},1e3)}catch(s){this.$message.error(this.$t("uploadForm.uploadFailed",{name:this.truncateFilename(t.name)})),o.status="exception"}},saveToHistory(e){try{const t=JSON.parse(localStorage.getItem("uploadHistory")||"[]"),o={name:e.name,url:e.finalURL,time:Date.now(),type:e.name.split(".").pop().toLowerCase()};t.push(o),localStorage.setItem("uploadHistory",JSON.stringify(t))}catch(t){console.error("Failed to save history",t)}},handleError(e,t){const o=this.fileList.find(e=>e.uid===t.uid);o&&(this.$message.error(this.$t("uploadForm.uploadFailed",{name:this.truncateFilename(t.name)})),o.status="exception",this.autoReUpload&&this.scheduleAutoRetry())},handleCopy(e){const t=this.fileList.find(t=>t.uid===e.uid).status;"done"===t||"success"===t?(navigator.clipboard.writeText(Rt(e,this.selectedUrlForm)),this.$message({type:"success",message:this.$t("uploadForm.copySuccess")})):this.$message({type:"warning",message:this.$t("uploadForm.fileNotUploaded")})},beforeUpload(e){return new Promise(async(t,o)=>{let s=e;const a=this.convertToWebp&&e.type.includes("image")&&!e.type.includes("webp")&&!e.type.includes("gif")&&!e.type.includes("svg");if(a)try{const t=await this.convertImageToWebp(e);t&&(s=t,console.log(`WebP转换成功: ${e.name} -> ${t.name}, 大小: ${(e.size/1024).toFixed(1)}KB -> ${(t.size/1024).toFixed(1)}KB`))}catch(r){console.warn("WebP转换失败,使用原文件:",r)}const i=s.type.includes("image")&&this.customerCompress&&s.size/1024/1024>this.compressBar,l=s.size/1024/1024<=1024||"telegram"!==this.uploadChannel,n=(e,o)=>{const s=URL.createObjectURL(e);this.fileList.push({uid:e.uid,name:e.name,url:s,finalURL:"",mdURL:"",htmlURL:"",ubbURL:"",srcID:"",status:"uploading",progreess:0,serverCompress:o,retryCount:0}),t(e)};if(i)xt.compressAccurately(s,1024*this.compressQuality).then(t=>{t.size/1024/1024>1024&&"telegram"===this.uploadChannel&&(this.$message.error(this.$t("uploadForm.compressedFileTooLarge",{name:s.name})),o(this.$t("uploadForm.fileSizeTooLarge"))),this.uploading=!0;const a=new File([t],s.name,{type:t.type});a.uid=e.uid;const i=this.uploadCount++,l=this.serverCompress&&a.size/1024/1024<10&&"telegram"===this.uploadChannel;0===i?n(a,l):setTimeout(()=>{n(a,l),this.uploadCount--},300*i)}).catch(e=>{this.$message.error(this.$t("uploadForm.compressFailedCannotUpload",{name:s.name})),o(e)});else if(l){this.uploading=!0;const e=this.uploadCount++,t="telegram"===this.uploadChannel&&this.serverCompress&&(!s.type.includes("image")||s.size/1024/1024<10);0===e?n(s,t):setTimeout(()=>{n(s,t),this.uploadCount--},300*e)}else this.$message.error(this.$t("uploadForm.fileTooLarge",{name:s.name})),o(this.$t("uploadForm.fileSizeTooLarge"))})},handleProgress(e){const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.progreess=e.percent)},copyAll(){const e=this.fileList.filter(e=>"done"===e.status||"success"===e.status).map(e=>Rt(e,this.selectedUrlForm)).join("\n");navigator.clipboard.writeText(e),this.$message({type:"success",message:this.$t("uploadForm.copyAllSuccess")})},clearFileList(){this.fileList.length>0?(this.abortControllers.forEach((e,t)=>{e.abort()}),this.abortControllers.clear(),this.uploadQueue=[],this.fileList=[],this.$message({type:"success",message:this.$t("uploadForm.fileListCleared")})):this.$message({type:"info",message:this.$t("uploadForm.fileListEmpty")})},clearSuccessList(){this.uploadSuccessCount>0?(this.fileList=this.fileList.filter(e=>"done"!==e.status&&"success"!==e.status),this.$message({type:"success",message:this.$t("uploadForm.successFilesCleared")})):this.$message({type:"info",message:this.$t("uploadForm.successFilesEmpty")})},handlePaste(e){if("INPUT"===e.target.tagName||"TEXTAREA"===e.target.tagName)return;const t=e.clipboardData.items;t.length>0&&this.uploadFromUrl(t)},handleUploadPasteUrls(){const e=this.pastedUrls.split("\n"),t=e.map(e=>e.trim()).filter(e=>""!==e).filter(e=>/^(https?:\/\/[^\s$.?#].[^\s]*)$/.test(e));if("save"===this.pasteUploadMethod)this.uploadFromUrl(t.map(e=>({kind:"string",getAsString:t=>{t(e)}})));else if("external"===this.pasteUploadMethod)for(let o=0;o`,l=`[img]${e}[/img]`,n=new File([],e.split("/").pop(),{type:"text/plain"});n.uid=Date.now()+o,n.url=e,this.fileList.push({uid:n.uid,name:n.name,url:e,finalURL:e,mdURL:a,htmlURL:i,ubbURL:l,srcID:e,status:"uploading",progreess:0,serverCompress:!1,uploadChannel:"external",retryCount:0}),this.uploadFile({file:n,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}},uploadFromUrl(e){for(let t=0;t{e instanceof File&&this.uploadFile({file:e,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}).catch(e=>{console.log(e)})}else"string"===e[t].kind&&e[t].getAsString(e=>{const o=/^(https?:\/\/[^\s$.?#].[^\s]*)$/;let s="";o.test(e)&&_t.A.post("/api/fetchRes",{url:e},{responseType:"blob",withAuthCode:!0}).then(o=>{o.headers["content-type"];if(200!=o.status)throw new Error("URL地址请求失败");{const i=o.headers["content-disposition"];if(i){const e=/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/,t=/filename\*\s*=\s*UTF-8''([^;\n]*)/;let o=e.exec(i);if(null!=o&&o[1]){s=o[1].replace(/['"]/g,"");try{s=decodeURIComponent(s)}catch(a){s=""}}""===s&&(o=t.exec(i),null!=o&&o[1]&&(s=decodeURIComponent(o[1])))}if(""===s){const t=new URL(e);s=t.pathname.split("/").pop()}if(""===s){const o=new URL(e);let a=o.pathname.split(".").pop();(!a||""===a||a.length>10)&&(a="bin"),s="PastedFile"+Date.now()+t+"."+a}const l=o.data,n=new File([l],s,{type:l.type});n.uid=Date.now()+t;const r=this.beforeUpload(n);r instanceof Promise&&r.then(e=>{e instanceof File&&this.uploadFile({file:e,onProgress:e=>this.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})}).catch(e=>{console.log(e)})}}).catch(e=>{this.$message({type:"warning",message:this.$t("uploadForm.urlRequestFailed")})})})},handleScroll(e){this.listScrolled=e.scrollTop>0&&this.fileList.length>0},retryError(){this.exceptionList.length>0?(this.retryFailedFiles(this.exceptionList),this.exceptionList=[]):this.$message({type:"info",message:this.$t("uploadForm.noFailedFiles")})},handleAutoRetryChange(e){this.$message({type:e?"success":"info",message:e?this.$t("uploadForm.autoRetryOn"):this.$t("uploadForm.autoRetryOff")}),e&&this.exceptionList.length>0&&this.scheduleAutoRetry()},retryFailedFiles(e){e.forEach(e=>{const t=e.retryCount||0;tthis.handleProgress(e),onSuccess:(e,t)=>this.handleSuccess(e,t),onError:(e,t)=>this.handleError(e,t)})):this.$message({type:"warning",message:this.$t("uploadForm.maxRetryReached",{name:e.name,max:this.maxRetryCount})})})},scheduleAutoRetry(){this.retryTimer&&clearTimeout(this.retryTimer),this.retryTimer=setTimeout(()=>{if(this.autoReUpload&&this.exceptionList.length>0){const e=[...this.exceptionList];this.exceptionList=[],this.retryFailedFiles(e)}},this.retryDelay)},async uploadToHuggingFaceDirect(e){const t=this.fileList.find(t=>t.uid===e.file.uid);if(!t)return;const o=new AbortController;this.abortControllers.set(e.file.uid,o);try{console.log("=== HuggingFace Direct Upload ==="),console.log("File:",e.file.name,"Size:",e.file.size),e.onProgress({percent:5,file:e.file}),console.log("Computing SHA256...");const t=await zt(e.file);if(console.log("SHA256:",t),o.signal.aborted)return void console.log("HuggingFace 上传已取消:",e.file.name);const s=new Uint8Array(await e.file.slice(0,512).arrayBuffer()),a=btoa(String.fromCharCode(...s));e.onProgress({percent:10,file:e.file}),console.log("Getting LFS upload URL...");const i=await(0,_t.A)({url:"/upload/huggingface/getUploadUrl",method:"post",data:{fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,sha256:t,fileSample:a,channelName:this.channelName,uploadNameType:this.uploadNameType,uploadFolder:this.uploadFolder},withAuthCode:!0,signal:o.signal});if(!i.data.success)throw new Error(i.data.error||"Failed to get upload URL");const l=i.data;if(console.log("Upload info:",l),l.alreadyExists)console.log("File already exists in LFS, skipping upload"),e.onProgress({percent:90,file:e.file});else if(l.needsLfs&&l.uploadAction){const{href:t,header:s}=l.uploadAction;if(s?.chunk_size)await this.uploadToHuggingFaceMultipart(e,l,o);else{console.log("Uploading to S3 (basic)...");const a=await fetch(t,{method:"PUT",headers:s||{},body:e.file,signal:o.signal});if(!a.ok){const e=await a.text();throw new Error(`S3 upload failed: ${a.status} - ${e}`)}console.log("S3 upload complete")}}if(o.signal.aborted)return void console.log("HuggingFace 上传已取消:",e.file.name);e.onProgress({percent:95,file:e.file}),console.log("Committing file...");const n=await(0,_t.A)({url:"/upload/huggingface/commitUpload",method:"post",data:{fullId:l.fullId,filePath:l.filePath,sha256:t,fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,channelName:l.channelName},withAuthCode:!0,signal:o.signal});if(!n.data.success)throw new Error(n.data.error||"Failed to commit file");console.log("Upload complete:",n.data);const r={data:[{src:n.data.src}]};e.onSuccess(r,e.file)}catch(s){if("CanceledError"===s.name||"ERR_CANCELED"===s.code||"AbortError"===s.name)return void console.log("HuggingFace 上传已取消:",e.file.name);console.error("HuggingFace direct upload error:",s),this.exceptionList.push(e),e.onError(s,e.file)}finally{this.abortControllers.delete(e.file.uid),this.onUploadComplete()}},async uploadToHuggingFaceMultipart(e,t,o){const{uploadAction:s}=t,{href:a,header:i}=s,l=parseInt(i.chunk_size),n=Object.keys(i).filter(e=>/^[0-9]+$/.test(e));console.log(`Multipart upload: ${n.length} parts, chunk size: ${l}`);const r=[],d=n.length;for(const u of n){if(o&&o.signal.aborted)throw console.log("HuggingFace 分片上传已取消"),new DOMException("Upload cancelled","AbortError");const t=parseInt(u)-1,s=t*l,a=Math.min(s+l,e.file.size),n=e.file.slice(s,a);console.log(`Uploading part ${u}/${d}`);const c=await fetch(i[u],{method:"PUT",body:n,signal:o?o.signal:void 0});if(!c.ok)throw new Error(`Failed to upload part ${u}: ${c.status}`);const p=c.headers.get("ETag");if(!p)throw new Error(`No ETag for part ${u}`);r.push({partNumber:parseInt(u),etag:p});const h=10+Math.round(parseInt(u)/d*80);e.onProgress({percent:h,file:e.file})}if(o&&o.signal.aborted)throw console.log("HuggingFace 分片上传已取消"),new DOMException("Upload cancelled","AbortError");console.log("Completing multipart upload...");const c=await fetch(a,{method:"POST",headers:{Accept:"application/vnd.git-lfs+json","Content-Type":"application/vnd.git-lfs+json"},body:JSON.stringify({oid:t.oid,parts:r}),signal:o?o.signal:void 0});if(!c.ok){const e=await c.text();throw new Error(`Multipart complete failed: ${c.status} - ${e}`)}console.log("Multipart upload complete")},async convertImageToWebp(e){return new Promise((t,o)=>{if(e.type.includes("gif")||e.type.includes("svg")||e.type.includes("webp"))return void t(null);const s=new Image,a=document.createElement("canvas"),i=a.getContext("2d");s.onload=()=>{a.width=s.width,a.height=s.height,i.drawImage(s,0,0),a.toBlob(a=>{if(a){const o=e.name,s=o.lastIndexOf("."),i=s>0?o.substring(0,s)+".webp":o+".webp",l=new File([a],i,{type:"image/webp"});l.uid=e.uid,t(l)}else o(new Error("WebP 转换失败"));URL.revokeObjectURL(s.src)},"image/webp",.92)},s.onerror=()=>{URL.revokeObjectURL(s.src),o(new Error(this.$t("uploadForm.imageLoadFailed")))},s.src=URL.createObjectURL(e)})},handleUploadCardMouseMove(e){const t=this.$refs.uploadCardGlow;if(!t)return;const o=e.currentTarget.getBoundingClientRect(),s=e.clientX-o.left,a=e.clientY-o.top;t.style.opacity="1",t.style.left=s+"px",t.style.top=a+"px"},handleUploadCardMouseLeave(){const e=this.$refs.uploadCardGlow;e&&(e.style.opacity="0")}},beforeDestroy(){this.retryTimer&&clearTimeout(this.retryTimer)}};const Vt=(0,V.A)(Wt,[["render",Tt],["__scopeId","data-v-fe1ea9cc"]]);var Bt=Vt,Ht=o(732),Qt=o(33892),Xt=o(45130);const qt={class:"directory-suggestion-input",ref:"wrapperRef"},Ot={class:"suggestion-dropdown"},jt={class:"suggestion-list"},Gt=["title","onMousedown"];function Kt(e,t,o,s,a,n){const r=G.WK;return(0,i.uX)(),(0,i.CE)("div",qt,[(0,i.bF)(r,{ref:"inputRef",modelValue:n.inputValue,"onUpdate:modelValue":t[0]||(t[0]=e=>n.inputValue=e),placeholder:o.placeholder,onFocus:n.handleFocus,onBlur:n.handleBlur,onInput:n.handleInput},null,8,["modelValue","placeholder","onFocus","onBlur","onInput"]),(0,i.bo)((0,i.Lk)("div",Ot,[(0,i.Lk)("ul",jt,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(a.suggestions,(e,t)=>((0,i.uX)(),(0,i.CE)("li",{key:t,class:"suggestion-item",title:e.value,onMousedown:(0,Xt.D$)(t=>n.selectItem(e),["prevent"])},(0,l.v_)(e.value),41,Gt))),128))])],512),[[Xt.aG,a.dropdownVisible&&a.suggestions.length>0]])],512)}var Jt={name:"DirectorySuggestionInput",props:{modelValue:{type:String,default:""},placeholder:{type:String,default:""}},emits:["update:modelValue","focus","blur","select"],data(){return{directoryTreeRoot:null,directoryTreeLoaded:!1,directoryTreeLoading:!1,directoryChildrenMap:{},focusTime:null,dropdownVisible:!1,isFocused:!1,suggestions:[]}},computed:{inputValue:{get(){return this.modelValue},set(e){this.$emit("update:modelValue",e)}}},watch:{modelValue(){this.isFocused&&this.refreshSuggestions()}},methods:{handleFocus(){this.isFocused=!0,this.focusTime=Date.now(),this.ensureDirectoryTreeLoaded(),this.$emit("focus"),setTimeout(()=>{this.isFocused&&(this.refreshSuggestions(),this.dropdownVisible=!0)},500)},handleBlur(){this.isFocused=!1,this.dropdownVisible=!1,this.$emit("blur")},handleInput(e){this.$nextTick(()=>{this.refreshSuggestions(),this.isFocused&&(this.dropdownVisible=!0)})},selectItem(e){const t=e.value;this.inputValue=t,this.$emit("select",t);const o=this.normalizeDirectoryPath(t),s=this.directoryChildrenMap[o];s&&s.length>0?this.$nextTick(()=>{this.refreshSuggestions(),this.dropdownVisible=!0,this.$refs.inputRef?.focus()}):this.dropdownVisible=!1},refreshSuggestions(){this.suggestions=this.getDirectorySuggestions(this.modelValue||"")},normalizeDirectoryPath(e){if(!e)return"/";let t=e;return t.startsWith("/")||(t="/"+t),"/"===t||t.endsWith("/")||(t+="/"),t},buildDirectoryChildrenMap(e){const t={},o=e=>{const s=this.normalizeDirectoryPath(e.path),a=Array.isArray(e.children)?e.children:[];t[s]=a.map(e=>({name:e.name,path:this.normalizeDirectoryPath(e.path)})),a.forEach(o)};o(e),this.directoryChildrenMap=t},async ensureDirectoryTreeLoaded(){if(!this.directoryTreeLoaded&&!this.directoryTreeLoading){this.directoryTreeLoading=!0;try{const e=await _t.A.get("/api/directoryTree",{withAuthCode:!0}),t=e?.data?.tree;t&&(this.directoryTreeRoot=t,this.buildDirectoryChildrenMap(t),this.directoryTreeLoaded=!0)}catch(e){console.error("Failed to load directory tree for autocomplete:",e)}finally{this.directoryTreeLoading=!1}}},parseDirectoryQuery(e){const t=e&&e.startsWith("/")?e:`/${e||""}`,o=t.slice(1),s=o.split("/"),a=s[s.length-1]||"",i=s.slice(0,-1).filter(Boolean),l=i.length>0?`/${i.join("/")}/`:"/";return{segmentInput:a,parentPath:l}},getDirectorySuggestions(e){const{segmentInput:t,parentPath:o}=this.parseDirectoryQuery(e),s=this.directoryChildrenMap[o]||[];if(!t)return s.slice(0,10).map(e=>({value:e.path}));const a=t.toLowerCase();return s.filter(e=>e.name.toLowerCase().startsWith(a)).slice(0,10).map(e=>({value:e.path}))}}};const Yt=(0,V.A)(Jt,[["render",Kt],["__scopeId","data-v-28b8eda7"]]);var Zt=Yt,eo=o(17879);const to={class:"container"},oo={class:"upload-home"},so={class:"quick-toolbar-actions"},ao={class:"quick-toolbar-actions-inner"},io={class:"header"},lo={class:"title"},no={class:"title-crayon-text","aria-hidden":"true"},ro={class:"main-title",href:"https://github.com/MarSeventh/CloudFlare-ImgBed",target:"_blank"},co={class:"dialog-section"},uo={class:"section-header"},po={class:"section-title"},ho={class:"section-content"},mo={class:"dialog-section"},go={class:"section-header"},fo={class:"section-title"},yo={class:"section-content"},bo={class:"setting-item"},ko={class:"setting-label"},vo={key:0,class:"setting-item"},Co={class:"setting-label"},wo={class:"dialog-action"},Fo=["innerHTML"],Lo={class:"dialog-footer"};function Uo(e,t,o,n,r,d){const c=eo.A,u=(0,i.g2)("font-awesome-icon"),p=a.S2,h=pt.c6,m=pt.Iy,g=pt.dW,f=Zt,y=G.WK,b=Qt.A,k=s.R7,v=Ht.A,C=Bt,w=J.ll,F=J.MQ,L=j.qi,U=X.kZ,$=Ve,S=Q.A,T=H;return(0,i.uX)(),(0,i.CE)("div",to,[(0,i.Lk)("div",oo,[(0,i.bF)(c,{class:"toggle-dark-button desktop-only"}),(0,i.bF)(g,{class:"more-dropdown desktop-only",trigger:"click",onCommand:d.handleDesktopMenuCommand},{dropdown:(0,i.k6)(()=>[(0,i.bF)(m,null,{default:(0,i.k6)(()=>[(0,i.bF)(h,{command:"showHistory"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)(e.$t("upload.history")),1)]),_:1}),(0,i.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,i.bF)(h,{command:"toggleLanguage"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,i.bF)(h,{command:"viewDocs"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"more-button"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,i.Lk)("div",{class:(0,l.C4)(["upload-folder-container",{"no-announcement":!d.announcementAvailable}])},[(0,i.Lk)("div",{class:(0,l.C4)(["upload-folder",{active:r.isFolderInputActive}])},[d.showDirectorySuggestions?((0,i.uX)(),(0,i.Wv)(f,{key:0,modelValue:r.uploadFolder,"onUpdate:modelValue":t[0]||(t[0]=e=>r.uploadFolder=e),class:"inner-folder-input",placeholder:e.$t("upload.folderPlaceholder"),onFocus:d.handleFolderInputFocus,onBlur:d.handleFolderInputBlur,onSelect:d.handleDirectorySelect},null,8,["modelValue","placeholder","onFocus","onBlur","onSelect"])):((0,i.uX)(),(0,i.Wv)(y,{key:1,class:"inner-folder-input",modelValue:r.uploadFolder,"onUpdate:modelValue":t[1]||(t[1]=e=>r.uploadFolder=e),placeholder:e.$t("upload.folderPlaceholder"),onFocus:d.handleFolderInputFocus,onBlur:d.handleFolderInputBlur},null,8,["modelValue","placeholder","onFocus","onBlur"]))],2),d.showDirectorySuggestions?((0,i.uX)(),(0,i.Wv)(b,{key:0,"current-directory":r.uploadFolder,source:"upload",onSelect:d.handleDirectorySelect},{trigger:(0,i.k6)(()=>[(0,i.bF)(p,{class:"directory-tree-trigger"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"folder-tree"})]),_:1})]),_:1},8,["current-directory","onSelect"])):(0,i.Q3)("",!0)],2),(0,i.bF)(k,{content:e.$t("upload.switchUploadMethod"),placement:"bottom",disabled:d.disableTooltip,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"upload-method-button desktop-only",onClick:d.handleChangeUploadMethod},{default:(0,i.k6)(()=>["default"===r.uploadMethod?((0,i.uX)(),(0,i.Wv)(u,{key:0,icon:"folder-open",class:"upload-method-icon",size:"lg"})):"paste"===r.uploadMethod?((0,i.uX)(),(0,i.Wv)(u,{key:1,icon:"paste",class:"upload-method-icon",size:"lg"})):(0,i.Q3)("",!0)]),_:1},8,["onClick"])]),_:1},8,["content","disabled"]),(0,i.bF)(g,{class:"mobile-more-dropdown mobile-only",trigger:"click",onCommand:d.handleMobileMenuCommand},{dropdown:(0,i.k6)(()=>[(0,i.bF)(m,null,{default:(0,i.k6)(()=>[(0,i.bF)(h,{command:"toggleTheme"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:d.getThemeIcon(),style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,i.eW)(" "+(0,l.v_)(d.getThemeText()),1)]),_:1}),(0,i.bF)(h,{command:"toggleUploadMethod"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"default"===r.uploadMethod?"paste":"folder-open",style:{width:"16px","margin-right":"8px","text-align":"center"}},null,8,["icon"]),(0,i.eW)(" "+(0,l.v_)("default"===r.uploadMethod?e.$t("upload.pasteUpload"):e.$t("upload.fileUpload")),1)]),_:1}),(0,i.bF)(h,{command:"showHistory"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"history",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)(e.$t("upload.history")),1)]),_:1}),(0,i.bF)(h,{command:"showAnnouncement",disabled:!d.announcementAvailable},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"bullhorn",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)(e.$t("upload.announcement")),1)]),_:1},8,["disabled"]),(0,i.bF)(h,{command:"toggleLanguage"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"globe",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)("zh-CN"===e.$i18n.locale?"English":"简体中文"),1)]),_:1}),(0,i.bF)(h,{command:"viewDocs"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"book",style:{width:"16px","margin-right":"8px","text-align":"center"}}),(0,i.eW)(" "+(0,l.v_)(e.$t("upload.viewDocs")),1)]),_:1})]),_:1})]),default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"mobile-more-button"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,i.Lk)("div",{class:(0,l.C4)(["quick-toolbar",{"is-expanded":r.isQuickToolbarOpen}]),onMouseleave:t[5]||(t[5]=(...e)=>d.handleQuickToolbarLeave&&d.handleQuickToolbarLeave(...e))},[(0,i.Lk)("div",so,[(0,i.Lk)("div",ao,[(0,i.bF)(k,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.logout"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:t[2]||(t[2]=e=>d.handleQuickToolbarCommand("logout"))},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"sign-out-alt",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,i.bF)(k,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.manage"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:t[3]||(t[3]=e=>d.handleQuickToolbarCommand("manage"))},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"cog",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"]),(0,i.bF)(k,{disabled:d.disableTooltip||!r.isQuickToolbarOpen,content:e.$t("upload.linkFormat"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:t[4]||(t[4]=e=>d.handleQuickToolbarCommand("linkFormat"))},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"link",class:"quick-toolbar-icon"})]),_:1})]),_:1},8,["disabled","content"])])]),(0,i.bF)(k,{disabled:d.disableTooltip,content:e.$t("upload.settings"),placement:"left","hide-after":0,"show-after":1e3},{default:(0,i.k6)(()=>[(0,i.bF)(p,{class:"quick-toolbar-button",onClick:d.openCompressDialog},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"cloud-upload",class:"quick-toolbar-icon"})]),_:1},8,["onClick"])]),_:1},8,["disabled","content"]),(0,i.bF)(p,{class:(0,l.C4)(["quick-toolbar-button quick-toolbar-more",{"is-active":r.isQuickToolbarOpen}]),"aria-expanded":r.isQuickToolbarOpen,onMouseenter:d.handleQuickToolbarMoreEnter,onClick:d.toggleQuickToolbar},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"chevron-down",class:"quick-toolbar-icon quick-toolbar-toggle-icon"})]),_:1},8,["class","aria-expanded","onMouseenter","onClick"])],34),(0,i.bF)(v,{useConfigLink:!0}),(0,i.Lk)("div",io,[(0,i.Lk)("h1",lo,[(0,i.Lk)("span",no,(0,l.v_)(d.ownerName)+" ImgHub",1),(0,i.Lk)("a",ro,(0,l.v_)(d.ownerName),1),t[24]||(t[24]=(0,i.eW)(" ImgHub ",-1))])]),(0,i.bF)(C,{selectedUrlForm:r.selectedUrlForm,customerCompress:r.customerCompress,compressQuality:r.compressQuality,compressBar:r.compressBar,serverCompress:r.serverCompress,uploadChannel:r.uploadChannel,channelName:r.channelName,uploadNameType:r.uploadNameType,useCustomUrl:r.useCustomUrl,customUrlPrefix:r.customUrlPrefix,autoRetry:r.autoRetry,urlPrefix:d.urlPrefix,uploadMethod:r.uploadMethod,uploadFolder:r.uploadFolder,convertToWebp:r.convertToWebp,class:"upload"},null,8,["selectedUrlForm","customerCompress","compressQuality","compressBar","serverCompress","uploadChannel","channelName","uploadNameType","useCustomUrl","customUrlPrefix","autoRetry","urlPrefix","uploadMethod","uploadFolder","convertToWebp"]),(0,i.bF)(U,{title:e.$t("settings.linkFormatTitle"),modelValue:r.showUrlDialog,"onUpdate:modelValue":t[10]||(t[10]=e=>r.showUrlDialog=e),width:d.dialogWidth,"show-close":!1,class:"settings-dialog settings-dialog-scope"},{default:(0,i.k6)(()=>[(0,i.Lk)("div",co,[(0,i.Lk)("div",uo,[(0,i.Lk)("span",po,(0,l.v_)(e.$t("settings.defaultCopyLink")),1)]),(0,i.Lk)("div",ho,[(0,i.bF)(F,{modelValue:r.selectedUrlForm,"onUpdate:modelValue":t[6]||(t[6]=e=>r.selectedUrlForm=e),onChange:d.changeUrlForm,class:"radio-card-group grid-2x2"},{default:(0,i.k6)(()=>[(0,i.bF)(w,{value:"url",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"link",class:"radio-icon"}),(0,i.Lk)("span",null,(0,l.v_)(e.$t("settings.rawLink")),1)]),_:1}),(0,i.bF)(w,{value:"md",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"code",class:"radio-icon"}),t[25]||(t[25]=(0,i.Lk)("span",null,"MarkDown",-1))]),_:1}),(0,i.bF)(w,{value:"html",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[26]||(t[26]=(0,i.Lk)("span",null,"HTML",-1))]),_:1}),(0,i.bF)(w,{value:"ubb",class:"radio-card"},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[27]||(t[27]=(0,i.Lk)("span",null,"BBCode",-1))]),_:1})]),_:1},8,["modelValue","onChange"])])]),(0,i.Lk)("div",mo,[(0,i.Lk)("div",go,[(0,i.Lk)("span",fo,(0,l.v_)(e.$t("settings.customLink")),1),(0,i.bF)(k,{content:e.$t("settings.customLinkTooltip"),placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1},8,["content"])]),(0,i.Lk)("div",yo,[(0,i.Lk)("div",bo,[(0,i.Lk)("span",ko,(0,l.v_)(e.$t("settings.enableCustom")),1),(0,i.bF)(L,{modelValue:r.useCustomUrl,"onUpdate:modelValue":t[7]||(t[7]=e=>r.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===r.useCustomUrl?((0,i.uX)(),(0,i.CE)("div",vo,[(0,i.Lk)("span",Co,(0,l.v_)(e.$t("settings.customPrefix")),1),(0,i.bF)(y,{modelValue:r.customUrlPrefix,"onUpdate:modelValue":t[8]||(t[8]=e=>r.customUrlPrefix=e),placeholder:e.$t("settings.customPrefixPlaceholder"),class:"setting-input"},null,8,["modelValue","placeholder"])])):(0,i.Q3)("",!0)])]),(0,i.Lk)("div",wo,[(0,i.bF)(p,{type:"primary",onClick:t[9]||(t[9]=e=>r.showUrlDialog=!1),class:"confirm-btn"},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(e.$t("settings.confirm")),1)]),_:1})])]),_:1},8,["title","modelValue","width"]),(0,i.bF)($,{modelValue:r.showCompressDialog,"onUpdate:modelValue":t[11]||(t[11]=e=>r.showCompressDialog=e),uploadChannel:r.uploadChannel,"onUpdate:uploadChannel":t[12]||(t[12]=e=>r.uploadChannel=e),channelName:r.channelName,"onUpdate:channelName":t[13]||(t[13]=e=>r.channelName=e),currentChannelList:d.currentChannelList,uploadFolder:r.uploadFolder,"onUpdate:uploadFolder":t[14]||(t[14]=e=>r.uploadFolder=e),autoRetry:r.autoRetry,"onUpdate:autoRetry":t[15]||(t[15]=e=>r.autoRetry=e),uploadNameType:r.uploadNameType,"onUpdate:uploadNameType":t[16]||(t[16]=e=>r.uploadNameType=e),convertToWebp:r.convertToWebp,"onUpdate:convertToWebp":t[17]||(t[17]=e=>r.convertToWebp=e),customerCompress:r.customerCompress,"onUpdate:customerCompress":t[18]||(t[18]=e=>r.customerCompress=e),compressBar:r.compressBar,"onUpdate:compressBar":t[19]||(t[19]=e=>r.compressBar=e),compressQuality:r.compressQuality,"onUpdate:compressQuality":t[20]||(t[20]=e=>r.compressQuality=e),serverCompress:r.serverCompress,"onUpdate:serverCompress":t[21]||(t[21]=e=>r.serverCompress=e)},null,8,["modelValue","uploadChannel","channelName","currentChannelList","uploadFolder","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","compressQuality","serverCompress"])]),(0,i.bF)(S,{class:"footer"}),(0,i.bF)(U,{title:e.$t("upload.announcementTitle"),modelValue:r.showAnnouncementDialog,"onUpdate:modelValue":t[22]||(t[22]=e=>r.showAnnouncementDialog=e),width:d.dialogWidth,"show-close":!1,"close-on-click-modal":!1,"close-on-press-escape":!1,center:""},{footer:(0,i.k6)(()=>[(0,i.Lk)("span",Lo,[(0,i.bF)(p,{type:"primary",onClick:d.acknowledgeAnnouncement},{default:(0,i.k6)(()=>[(0,i.eW)((0,l.v_)(e.$t("upload.announcementAck")),1)]),_:1},8,["onClick"])])]),default:(0,i.k6)(()=>[(0,i.Lk)("div",{innerHTML:r.announcementContent},null,8,Fo)]),_:1},8,["title","modelValue","width"]),(0,i.bF)(T,{show:r.showHistory,onClose:t[23]||(t[23]=e=>r.showHistory=!1)},null,8,["show"])])}o(13579);var $o=o(46638),So=o(48903),To=o(90144),_o=o(62388),xo={name:"UploadHome",mixins:[So.A],data(){return{selectedUrlForm:(0,To.KR)(""),showUrlDialog:!1,showCompressDialog:!1,customerCompress:!0,compressQuality:4,compressBar:5,convertToWebp:!1,serverCompress:!0,uploadChannel:"",channelName:"",availableChannels:{},uploadNameType:"",customUrlPrefix:"",useCustomUrl:"false",autoRetry:!0,useDefaultWallPaper:!1,uploadMethod:"default",uploadFolder:"",isFolderInputActive:!1,isQuickToolbarOpen:!1,isQuickToolbarPinned:!1,showAnnouncementDialog:!1,announcementContent:"",displayedAnnouncementRefreshAt:null,showHistory:!1,themeMode:"auto"}},watch:{customerCompress(e){this.updateCompressConfig("customerCompress",e)},compressQuality(e){this.updateCompressConfig("compressQuality",e)},compressBar(e){null===e||void 0===e||e<1?this.compressBar=1:(this.compressQuality>e&&(this.compressQuality=e),this.updateCompressConfig("compressBar",e))},serverCompress(e){this.updateCompressConfig("serverCompress",e)},convertToWebp(e){this.updateCompressConfig("convertToWebp",e)},uploadChannel(e){this.updateStoreUploadChannel(e);const t=this.availableChannels[e]||[],o=this.storeChannelName;o&&t.some(e=>e.name===o)?this.channelName=o:this.channelName=""},channelName(e){this.$store.commit("setStoreChannelName",e||"")},uploadNameType(e){this.updateStoreUploadNameType(e)},customUrlPrefix(e){this.$store.commit("setCustomUrlSettings",{key:"customUrlPrefix",value:e})},useCustomUrl(e){this.$store.commit("setCustomUrlSettings",{key:"useCustomUrl",value:e})},autoRetry(e){this.$store.commit("setStoreAutoRetry",e)},uploadFolder(e){if(this.validateUploadFolder(e,!1)){const t=(0,_o.G)(e,{strict:!0});t.valid&&this.$store.commit("setStoreUploadFolder",e)}else this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})}},computed:{...(0,Mt.L8)(["userConfig","uploadCopyUrlForm","compressConfig","storeUploadChannel","storeChannelName","storeUploadNameType","customUrlSettings","storeAutoRetry","storeUploadMethod","storeUploadFolder"]),ownerName(){return this.userConfig?.ownerName||"Sanyue"},dialogWidth(){return window.innerWidth>768?"50%":"90%"},disableTooltip(){return window.innerWidth<768},urlPrefix(){return this.userConfig?.urlPrefix||`${window.location.protocol}//${window.location.host}/file/`},announcementAvailable(){return!!this.userConfig?.announcement},showDirectorySuggestions(){return this.userConfig?.showDirectorySuggestions??!1},currentChannelList(){return this.availableChannels[this.uploadChannel]||[]}},mounted(){this.initializeBackground("uploadBkImg",".container",!0,!0),this.selectedUrlForm=this.uploadCopyUrlForm||"url",this.customerCompress=this.compressConfig.customerCompress??this.parseBoolean(this.userConfig?.defaultCustomerCompress,!0),this.compressQuality=this.compressConfig.compressQuality??this.parseNumber(this.userConfig?.defaultCompressQuality,4),this.compressBar=this.compressConfig.compressBar??this.parseNumber(this.userConfig?.defaultCompressBar,5),this.serverCompress=this.compressConfig.serverCompress??!0,this.convertToWebp=this.compressConfig.convertToWebp??this.parseBoolean(this.userConfig?.defaultConvertToWebp,!1),this.uploadChannel=this.storeUploadChannel||this.userConfig?.defaultUploadChannel||"telegram",this.autoRetry=this.storeAutoRetry,this.uploadNameType=this.storeUploadNameType||this.userConfig?.defaultUploadNameType||"default",this.customUrlPrefix=this.customUrlSettings.customUrlPrefix,this.useCustomUrl=this.customUrlSettings.useCustomUrl,this.uploadMethod=this.storeUploadMethod,this.fetchAvailableChannels(),this.uploadFolder=this.storeUploadFolder||this.userConfig?.defaultUploadFolder||"";const e=this.$store.getters.cusDarkMode,t=this.$store.getters.useDarkMode;this.themeMode=e?t?"dark":"light":"auto",this.showAnnouncementIfNeeded()},components:{UploadForm:Bt,Footer:Q.A,ToggleDark:eo.A,Logo:Ht.A,UploadHistory:H,UploadSettingsDialog:Ve,DirectoryTreePicker:Qt.A,DirectorySuggestionInput:Zt},methods:{async fetchAvailableChannels(){try{const e=await _t.A.get("/api/channels",{withAuthCode:!0});if(e.data){this.availableChannels=e.data;const t=this.storeChannelName,o=this.userConfig?.defaultChannelName,s=this.availableChannels[this.uploadChannel]||[];t&&s.some(e=>e.name===t)?this.channelName=t:""!==t&&null!==t&&void 0!==t||""!==t&&o&&s.some(e=>e.name===o)&&(this.channelName=o)}}catch(e){console.error("Failed to fetch available channels:",e)}},validateUploadFolder(e,t=!0){e&&!e.startsWith("/")&&(e="/"+e,this.uploadFolder=e);const o=(0,_o.G)(e,{strict:t});return!!o.valid||(this.$message.error(o.error),!1)},handleFolderInputFocus(){this.isFolderInputActive=!0},handleFolderInputBlur(){this.isFolderInputActive=!1,this.uploadFolder&&!this.uploadFolder.startsWith("/")&&(this.uploadFolder="/"+this.uploadFolder),this.validateUploadFolder(this.uploadFolder,!0)||this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})},handleManage(){this.$router.push("/dashboard")},parseBoolean(e,t){return void 0===e||null===e?t:"boolean"===typeof e?e:"string"===typeof e?"true"===e:t},parseNumber(e,t){if(void 0===e||null===e)return t;const o=parseFloat(e);return isNaN(o)?t:o},openUrlDialog(){this.showUrlDialog=!0},handleLogout(){_t.A.post("/api/auth/logout",{authType:"user"},{withCredentials:!0}).finally(()=>{this.$store.commit("setUserLoggedIn",!1),this.$router.push("/login"),this.$message.success(this.$t("upload.logoutSuccess"))})},changeUrlForm(){this.$store.commit("setUploadCopyUrlForm",this.selectedUrlForm)},openCompressDialog(){this.showCompressDialog=!0},updateCompressConfig(e,t){this.$store.commit("setCompressConfig",{key:e,value:t})},updateStoreUploadChannel(e){this.$store.commit("setStoreUploadChannel",e)},updateStoreUploadNameType(e){this.$store.commit("setStoreUploadNameType",e)},handleQuickToolbarMoreEnter(){this.isQuickToolbarOpen=!0},handleQuickToolbarLeave(){this.isQuickToolbarPinned||(this.isQuickToolbarOpen=!1)},toggleQuickToolbar(){this.isQuickToolbarPinned=!this.isQuickToolbarPinned,this.isQuickToolbarOpen=this.isQuickToolbarPinned},closeQuickToolbar(){this.isQuickToolbarPinned=!1,this.isQuickToolbarOpen=!1},handleQuickToolbarCommand(e){this.closeQuickToolbar(),"linkFormat"===e?this.openUrlDialog():"manage"===e?this.handleManage():"logout"===e&&this.handleLogout()},handleChangeUploadMethod(){this.uploadMethod="default"===this.uploadMethod?"paste":"default",this.$store.commit("setUploadMethod",this.uploadMethod)},handleMobileMenuCommand(e){if("toggleTheme"===e)"auto"===this.themeMode?(this.themeMode="light",this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!1)):"light"===this.themeMode?(this.themeMode="dark",this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!0)):(this.themeMode="auto",this.$store.commit("setCusDarkMode",!1));else if("toggleUploadMethod"===e)this.handleChangeUploadMethod();else if("viewDocs"===e)window.open("https://cfbed.sanyue.de/qa/","_blank");else if("showHistory"===e)this.showHistory=!0;else if("showAnnouncement"===e)this.handleShowAnnouncement();else if("toggleLanguage"===e){const e="zh-CN"===this.$i18n.locale?"en":"zh-CN";(0,$o.xS)(e)}},handleDesktopMenuCommand(e){if("viewDocs"===e)window.open("https://cfbed.sanyue.de/qa/","_blank");else if("showHistory"===e)this.showHistory=!0;else if("showAnnouncement"===e)this.handleShowAnnouncement();else if("toggleLanguage"===e){const e="zh-CN"===this.$i18n.locale?"en":"zh-CN";(0,$o.xS)(e)}},getThemeIcon(){return"auto"===this.themeMode?"sun":"light"===this.themeMode?"moon":"adjust"},getThemeText(){return"auto"===this.themeMode?this.$t("theme.lightMode"):"light"===this.themeMode?this.$t("theme.darkMode"):this.$t("theme.autoMode")},handleShowAnnouncement(){const e=this.userConfig?.announcement;e?this.openAnnouncement(e):this.$message.info(this.$t("upload.noAnnouncement"))},getAnnouncementRefreshAt(){const e=Number(this.userConfig?.announcementRefreshAt);return Number.isFinite(e)&&e>0?e:null},openAnnouncement(e){this.announcementContent=e,this.displayedAnnouncementRefreshAt=this.getAnnouncementRefreshAt(),this.showAnnouncementDialog=!0},showAnnouncementIfNeeded(){const e=this.userConfig?.announcement;if(!e)return;const t=this.getAnnouncementRefreshAt();if(t){const o=Number(localStorage.getItem("announcementAcknowledgedRefreshAt"));return void((!Number.isFinite(o)||t>o)&&this.openAnnouncement(e))}localStorage.getItem("announcementAcknowledgedAt")||this.openAnnouncement(e)},acknowledgeAnnouncement(){localStorage.setItem("announcementAcknowledgedAt",String(Date.now())),this.displayedAnnouncementRefreshAt&&localStorage.setItem("announcementAcknowledgedRefreshAt",String(this.displayedAnnouncementRefreshAt)),this.showAnnouncementDialog=!1},handleDirectorySelect(e){this.uploadFolder=e,this.validateUploadFolder(e,!0)&&this.$store.commit("setStoreUploadFolder",e)}}};const Mo=(0,V.A)(xo,[["render",Uo],["__scopeId","data-v-06705292"]]);var Ao=Mo},2893:function(e,t,o){"use strict";o(85331)},4885:function(e,t,o){"use strict";o(85331)},10456:function(e,t,o){"use strict";o(85331)},11393:function(e,t,o){o(79577),o(41549),o(49797),o(49631),o(35623),o(64979),function(t,o){e.exports=o()}(0,function(){return function(e){var t={};function o(s){if(t[s])return t[s].exports;var a=t[s]={i:s,l:!1,exports:{}};return e[s].call(a.exports,a,a.exports,o),a.l=!0,a.exports}return o.m=e,o.c=t,o.d=function(e,t,s){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(o.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)o.d(s,a,function(t){return e[t]}.bind(null,a));return s},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=0)}([function(e,t,o){"use strict";var s;function a(e){return["image/png","image/jpeg","image/gif"].some(t=>t===e)}o.r(t),o.d(t,"canvastoDataURL",function(){return l}),o.d(t,"canvastoFile",function(){return n}),o.d(t,"dataURLtoFile",function(){return d}),o.d(t,"dataURLtoImage",function(){return c}),o.d(t,"downloadFile",function(){return u}),o.d(t,"filetoDataURL",function(){return p}),o.d(t,"imagetoCanvas",function(){return m}),o.d(t,"urltoBlob",function(){return g}),o.d(t,"urltoImage",function(){return f}),o.d(t,"compress",function(){return b}),o.d(t,"compressAccurately",function(){return k}),o.d(t,"EImageType",function(){return s}),function(e){e.PNG="image/png",e.JPEG="image/jpeg",e.GIF="image/gif"}(s||(s={}));var i=function(e,t,o,s){return new(o||(o=Promise))(function(a,i){function l(e){try{r(s.next(e))}catch(e){i(e)}}function n(e){try{r(s.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?a(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(l,n)}r((s=s.apply(e,t||[])).next())})};function l(e,t=.92,o=s.JPEG){return i(this,void 0,void 0,function*(){return a(o)||(o=s.JPEG),e.toDataURL(o,t)})}function n(e,t=.92,o=s.JPEG){return new Promise(s=>e.toBlob(e=>s(e),o,t))}var r=function(e,t,o,s){return new(o||(o=Promise))(function(a,i){function l(e){try{r(s.next(e))}catch(e){i(e)}}function n(e){try{r(s.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?a(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(l,n)}r((s=s.apply(e,t||[])).next())})};function d(e,t){return r(this,void 0,void 0,function*(){const o=e.split(",");let s=o[0].match(/:(.*?);/)[1];const i=atob(o[1]);let l=i.length;const n=new Uint8Array(l);for(;l--;)n[l]=i.charCodeAt(l);return a(t)&&(s=t),new Blob([n],{type:s})})}function c(e){return new Promise((t,o)=>{const s=new Image;s.onload=()=>t(s),s.onerror=()=>o(new Error("dataURLtoImage(): dataURL is illegal")),s.src=e})}function u(e,t){const o=document.createElement("a");o.href=window.URL.createObjectURL(e),o.download=t||Date.now().toString(36),document.body.appendChild(o);const s=document.createEvent("MouseEvents");s.initEvent("click",!1,!1),o.dispatchEvent(s),document.body.removeChild(o)}function p(e){return new Promise(t=>{const o=new FileReader;o.onloadend=e=>t(e.target.result),o.readAsDataURL(e)})}var h=function(e,t,o,s){return new(o||(o=Promise))(function(a,i){function l(e){try{r(s.next(e))}catch(e){i(e)}}function n(e){try{r(s.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?a(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(l,n)}r((s=s.apply(e,t||[])).next())})};function m(e,t={}){return h(this,void 0,void 0,function*(){const o=Object.assign({},t),s=document.createElement("canvas"),a=s.getContext("2d");let i,l;for(const e in o)Object.prototype.hasOwnProperty.call(o,e)&&(o[e]=Number(o[e]));if(o.scale){const t=o.scale>0&&o.scale<10?o.scale:1;l=e.width*t,i=e.height*t}else l=o.width||o.height*e.width/e.height||e.width,i=o.height||o.width*e.height/e.width||e.height;switch([5,6,7,8].some(e=>e===o.orientation)?(s.height=l,s.width=i):(s.height=i,s.width=l),o.orientation){case 3:a.rotate(180*Math.PI/180),a.drawImage(e,-s.width,-s.height,s.width,s.height);break;case 6:a.rotate(90*Math.PI/180),a.drawImage(e,0,-s.width,s.height,s.width);break;case 8:a.rotate(270*Math.PI/180),a.drawImage(e,-s.height,0,s.height,s.width);break;case 2:a.translate(s.width,0),a.scale(-1,1),a.drawImage(e,0,0,s.width,s.height);break;case 4:a.translate(s.width,0),a.scale(-1,1),a.rotate(180*Math.PI/180),a.drawImage(e,-s.width,-s.height,s.width,s.height);break;case 5:a.translate(s.width,0),a.scale(-1,1),a.rotate(90*Math.PI/180),a.drawImage(e,0,-s.width,s.height,s.width);break;case 7:a.translate(s.width,0),a.scale(-1,1),a.rotate(270*Math.PI/180),a.drawImage(e,-s.height,0,s.height,s.width);break;default:a.drawImage(e,0,0,s.width,s.height)}return s})}function g(e){return fetch(e).then(e=>e.blob())}function f(e){return new Promise((t,o)=>{const s=new Image;s.onload=()=>t(s),s.onerror=()=>o(new Error("urltoImage(): Image failed to load, please check the image URL")),s.src=e})}var y=function(e,t,o,s){return new(o||(o=Promise))(function(a,i){function l(e){try{r(s.next(e))}catch(e){i(e)}}function n(e){try{r(s.throw(e))}catch(e){i(e)}}function r(e){var t;e.done?a(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(l,n)}r((s=s.apply(e,t||[])).next())})};function b(e,t={}){return y(this,void 0,void 0,function*(){if(!(e instanceof Blob))throw new Error("compress(): First arg must be a Blob object or a File object.");if("object"!=typeof t&&(t=Object.assign({quality:t})),t.quality=Number(t.quality),Number.isNaN(t.quality))return e;const o=yield p(e);let i=o.split(",")[0].match(/:(.*?);/)[1],n=s.JPEG;a(t.type)&&(n=t.type,i=t.type);const r=yield c(o),u=yield m(r,Object.assign({},t)),h=yield l(u,t.quality,n),g=yield d(h,i);return g.size>e.size?e:g})}function k(e,t={}){return y(this,void 0,void 0,function*(){if(!(e instanceof Blob))throw new Error("compressAccurately(): First arg must be a Blob object or a File object.");if("object"!=typeof t&&(t=Object.assign({size:t})),t.size=Number(t.size),Number.isNaN(t.size))return e;if(1024*t.size>e.size)return e;t.accuracy=Number(t.accuracy),(!t.accuracy||t.accuracy<.8||t.accuracy>.99)&&(t.accuracy=.95);const o=t.size*(2-t.accuracy)*1024,i=1024*t.size,n=t.size*t.accuracy*1024,r=yield p(e);let u=r.split(",")[0].match(/:(.*?);/)[1],h=s.JPEG;a(t.type)&&(h=t.type,u=t.type);const g=yield c(r),f=yield m(g,Object.assign({},t));let y,b=.5;const k=[null,null];for(let e=1;e<=7;e++){y=yield l(f,b,h);const t=.75*y.length;if(7===e){(ot)&&(y=[y,...k].filter(e=>e).sort((e,t)=>Math.abs(.75*e.length-i)-Math.abs(.75*t.length-i))[0]);break}if(ot))break;k[0]=y,b+=Math.pow(.5,e+1)}}const v=yield d(y,u);return v.size>e.size?e:v})}}])})},13378:function(e,t,o){"use strict";o(85331),o(38736),o(79899)},15616:function(e,t,o){"use strict";o(85331),o(97197)},17879:function(e,t,o){"use strict";o.d(t,{A:function(){return m}});var s=o(56768),a=o(45130),i=o(24232);const l={id:"themeMask"},n=["cx","cy","r"],r=["r"],d=["opacity"];function c(e,t,o,c,u,p){const h=(0,s.g2)("font-awesome-icon");return(0,s.uX)(),(0,s.CE)("div",{id:"themeToggle",onClick:t[0]||(t[0]=(...e)=>p.handleToggleClick&&p.handleToggleClick(...e))},[(0,s.bF)(a.eB,{name:"icon-fade",mode:"out-in"},{default:(0,s.k6)(()=>[u.isAuto?((0,s.uX)(),(0,s.Wv)(h,{key:"auto-mode",icon:"circle-half-stroke",class:"auto-icon",style:{"font-size":"1.5em",color:"var(--theme-toggle-color)"}})):((0,s.uX)(),(0,s.CE)("svg",{key:"sun-moon",class:(0,i.C4)(["theme_toggle_svg",{dark:u.isDark}]),width:"1.5em",height:"1.5em",viewBox:"0 0 24 24",fill:"none","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",stroke:"currentColor"},[(0,s.Lk)("mask",l,[t[1]||(t[1]=(0,s.Lk)("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:"white"},null,-1)),(0,s.Lk)("circle",{class:"theme_toggle_circle1",fill:"black",cx:u.isDark?"50%":"100%",cy:u.isDark?"23%":"0%",r:u.isDark?"9":"5"},null,8,n)]),(0,s.Lk)("circle",{class:"theme_toggle_circle2",cx:"12",cy:"12",r:u.isDark?"9":"5",mask:"url(#themeMask)"},null,8,r),(0,s.Lk)("g",{class:"theme_toggle_g",stroke:"currentColor",opacity:u.isDark?0:1},[...t[2]||(t[2]=[(0,s.Lk)("line",{x1:"12",y1:"1",x2:"12",y2:"3"},null,-1),(0,s.Lk)("line",{x1:"12",y1:"21",x2:"12",y2:"23"},null,-1),(0,s.Lk)("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"},null,-1),(0,s.Lk)("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"},null,-1),(0,s.Lk)("line",{x1:"1",y1:"12",x2:"3",y2:"12"},null,-1),(0,s.Lk)("line",{x1:"21",y1:"12",x2:"23",y2:"12"},null,-1),(0,s.Lk)("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"},null,-1),(0,s.Lk)("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"},null,-1)])],8,d)],2))]),_:1})])}var u={name:"ToggleDark",data(){return{isDark:this.$store.getters.useDarkMode,isAuto:!this.$store.getters.cusDarkMode}},methods:{handleToggleClick(){this.isAuto?(this.isDark=!1,this.isAuto=!1,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!1)):this.isDark?(this.isAuto=!0,this.$store.commit("setCusDarkMode",!1)):(this.isDark=!0,this.$store.commit("setCusDarkMode",!0),this.$store.commit("setUseDarkMode",!0))}}},p=o(71241);const h=(0,p.A)(u,[["render",c],["__scopeId","data-v-2122c62a"]]);var m=h},18785:function(e,t,o){"use strict";o(85331)},19104:function(e,t,o){"use strict";o(85331)},23597:function(e,t,o){"use strict";o(85331)},30694:function(e,t,o){"use strict";o(85331)},33153:function(e,t,o){"use strict";e.exports=o.p+"img/logo.e8dbfa27.png"},33892:function(e,t,o){"use strict";o.d(t,{A:function(){return $}});var s=o(99114),a=(o(85331),o(30694),o(49385)),i=(o(37952),o(30650)),l=(o(19104),o(31802)),n=(o(13378),o(80047)),r=(o(99648),o(56768)),d=o(45130),c=o(24232);const u={class:"directory-tree-picker"},p={class:"tree-container"},h={key:0,class:"error-state"},m={class:"error-text"},g={class:"node-label"},f={class:"tree-container"},y={key:0,class:"error-state"},b={class:"error-text"},k={class:"node-label"};function v(e,t,o,v,C,w){const F=(0,r.g2)("font-awesome-icon"),L=n.S2,U=l.qk,$=i.Vc,S=a.pw,T=s.A;return(0,r.uX)(),(0,r.CE)("div",u,[w.isDesktop?((0,r.uX)(),(0,r.Wv)($,{key:0,visible:C.popoverVisible,"onUpdate:visible":t[1]||(t[1]=e=>C.popoverVisible=e),placement:"bottom-start",width:320,trigger:"click","popper-class":"directory-tree-popover","show-arrow":!0,"hide-after":0,"show-after":50,transition:"el-zoom-in-top"},{reference:(0,r.k6)(()=>[(0,r.Lk)("span",{class:"popover-trigger-wrapper",onClick:t[0]||(t[0]=(0,d.D$)(()=>{},["stop"]))},[(0,r.RG)(e.$slots,"trigger",{},void 0,!0)])]),default:(0,r.k6)(()=>[(0,r.bo)(((0,r.uX)(),(0,r.CE)("div",p,[C.error?((0,r.uX)(),(0,r.CE)("div",h,[(0,r.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,r.Lk)("span",m,(0,c.v_)(C.error),1),(0,r.bF)(L,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,r.k6)(()=>[(0,r.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,r.uX)(),(0,r.Wv)(U,{key:1,ref:"treeRef",data:C.treeData,props:C.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":o.currentDirectory,class:"directory-tree",onNodeClick:w.handleNodeClick},{default:(0,r.k6)(({node:e,data:t})=>[(0,r.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===o.currentDirectory}])},[(0,r.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,r.Lk)("span",g,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[T,C.loading]])]),_:3},8,["visible"])):((0,r.uX)(),(0,r.CE)(r.FK,{key:1},[(0,r.Lk)("span",{class:"drawer-trigger-wrapper",onClick:t[2]||(t[2]=(...e)=>w.openDrawer&&w.openDrawer(...e))},[(0,r.RG)(e.$slots,"trigger",{},void 0,!0)]),(0,r.bF)(S,{modelValue:C.drawerVisible,"onUpdate:modelValue":t[3]||(t[3]=e=>C.drawerVisible=e),direction:"btt",size:"60%","show-close":!0,"with-header":!0,"z-index":3e3,title:e.$t("directoryTree.selectDirectory"),class:"directory-tree-drawer"},{default:(0,r.k6)(()=>[(0,r.bo)(((0,r.uX)(),(0,r.CE)("div",f,[C.error?((0,r.uX)(),(0,r.CE)("div",y,[(0,r.bF)(F,{icon:"exclamation-circle",class:"error-icon"}),(0,r.Lk)("span",b,(0,c.v_)(C.error),1),(0,r.bF)(L,{type:"primary",size:"small",onClick:w.fetchDirectoryTree},{default:(0,r.k6)(()=>[(0,r.eW)((0,c.v_)(e.$t("directoryTree.retry")),1)]),_:1},8,["onClick"])])):((0,r.uX)(),(0,r.Wv)(U,{key:1,ref:"treeRefMobile",data:C.treeData,props:C.treeProps,"node-key":"path","default-expand-all":!1,"expand-on-click-node":!1,"highlight-current":!0,"current-node-key":o.currentDirectory,class:"directory-tree mobile-tree",onNodeClick:w.handleNodeClick},{default:(0,r.k6)(({node:e,data:t})=>[(0,r.Lk)("span",{class:(0,c.C4)(["tree-node",{"is-current":t.path===o.currentDirectory}])},[(0,r.bF)(F,{icon:e.expanded?"folder-open":"folder",class:"folder-icon"},null,8,["icon"]),(0,r.Lk)("span",k,(0,c.v_)(t.name),1)],2)]),_:1},8,["data","props","current-node-key","onNodeClick"]))])),[[T,C.loading]])]),_:1},8,["modelValue","title"])],64))])}var C=o(457),w=o(70797),F={name:"DirectoryTreePicker",props:{currentDirectory:{type:String,default:""},source:{type:String,default:"upload",validator:e=>["upload","admin"].includes(e)}},data(){return{popoverVisible:!1,drawerVisible:!1,treeData:[],loading:!1,error:"",treeProps:{children:"children",label:"name"},windowWidth:window.innerWidth}},computed:{isDesktop(){return this.windowWidth>=769}},watch:{popoverVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.popoverVisible&&this.$refs.treeRef){const e=this.$refs.treeRef.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},200)},drawerVisible(e){e?this.fetchDirectoryTree():setTimeout(()=>{if(!this.drawerVisible&&this.$refs.treeRefMobile){const e=this.$refs.treeRefMobile.store;for(const t in e.nodesMap)e.nodesMap[t].expanded=!1}},300)},currentDirectory(e){this.$nextTick(()=>{this.$refs.treeRef&&e&&this.$refs.treeRef.setCurrentKey(e),this.$refs.treeRefMobile&&e&&this.$refs.treeRefMobile.setCurrentKey(e)})}},mounted(){window.addEventListener("resize",this.handleResize)},beforeUnmount(){window.removeEventListener("resize",this.handleResize)},methods:{handleResize(){this.windowWidth=window.innerWidth},openDrawer(){this.drawerVisible=!0},async fetchDirectoryTree(){this.loading=!0,this.error="";try{let e;if("admin"===this.source){const t=await(0,w.A)("/api/directoryTree",{method:"GET"});if(!t.ok)return void(401===t.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.serverError"));e=await t.json()}else{const t=await C.A.get("/api/directoryTree",{withAuthCode:!0});e=t.data}e.tree?this.treeData=[e.tree]:this.treeData=[]}catch(e){console.error("Failed to fetch directory tree:",e),401===e.response?.status?this.error=this.$t("directoryTree.authFailed"):this.error=this.$t("directoryTree.loadFailed")}finally{this.loading=!1}},handleNodeClick(e){let t=e.path;t&&!t.startsWith("/")?t="/"+t:t||(t="/"),this.$emit("select",t),this.popoverVisible=!1,this.drawerVisible=!1}}},L=o(71241);const U=(0,L.A)(F,[["render",v],["__scopeId","data-v-62eab69a"]]);var $=U},34396:function(e,t,o){"use strict";o(85331),o(4885)},34896:function(e,t,o){"use strict";o(85331)},37952:function(e,t,o){"use strict";o(85331),o(97197)},38736:function(e,t,o){"use strict";o(85331)},40670:function(e,t,o){"use strict";o(85331),o(99648),o(19104),o(85970)},50333:function(e,t,o){"use strict";o(85331),o(29092)},62388:function(e,t,o){"use strict";o.d(t,{G:function(){return a}});var s=o(46638);function a(e,{strict:t=!0}={}){if(!e||""===e.trim())return{valid:!0};if("/"===e)return{valid:!0};if(!e.startsWith("/"))return{valid:!1,error:s.Ay.global.t("validation.pathMustStartWithSlash")};if(/(?:^|\/)\.\.(\/|$)/.test(e)||e.includes(".."))return{valid:!1,error:s.Ay.global.t("validation.pathTraversalNotAllowed")};const o=t?/\/\.(\/|$)/:/\/\.\//;if(o.test(e))return{valid:!1,error:s.Ay.global.t("validation.singleDotNotAllowed")};if(e.includes("//"))return{valid:!1,error:s.Ay.global.t("validation.consecutiveSlashNotAllowed")};const a=/[\\:\*\?"'<>\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;return a.test(e)?{valid:!1,error:s.Ay.global.t("validation.invalidCharacters")}:{valid:!0}}},67819:function(e,t,o){"use strict";o(85331)},70797:function(e,t,o){"use strict";o.d(t,{A:function(){return l}});o(44114);var s=o(25507),a=o(16915);let i=!1;async function l(e,t={}){t.credentials="include",t.headers={...t.headers};const o=await fetch(e,t);return 401!==o.status||i||(i=!0,s.A.commit("setAdminLoggedIn",!1),a.A.push("/adminLogin").finally(()=>{i=!1})),o}},76334:function(e,t,o){e.exports=o(11393)},79899:function(e,t,o){"use strict";o(85331)},85970:function(e,t,o){"use strict";o(85331)},86975:function(e,t,o){"use strict";o.d(t,{A:function(){return p}});var s=o(56768),a=o(24232);const i={key:0,class:"page-footer"},l=["href"];function n(e,t,o,n,r,d){const c=(0,s.g2)("font-awesome-icon");return d.disableFooter?(0,s.Q3)("",!0):((0,s.uX)(),(0,s.CE)("div",i,[(0,s.Lk)("p",null,[(0,s.eW)("© 2024-"+(0,a.v_)(d.thisYear)+" Designed by ",1),t[0]||(t[0]=(0,s.Lk)("a",{class:"footer-name",href:"https://github.com/MarSeventh",target:"_blank"},"SanyueQi",-1)),t[1]||(t[1]=(0,s.eW)(" for You! ",-1)),(0,s.Lk)("a",{href:d.footerLink,target:"_blank"},[(0,s.bF)(c,{icon:"paper-plane",class:"footer-link-icon"})],8,l)])]))}var r=o(60782),d={name:"Footer",computed:{...(0,r.L8)(["userConfig"]),footerLink(){return this.userConfig?.footerLink||"https://github.com/MarSeventh"},thisYear(){return(new Date).getFullYear()},disableFooter(){return this.userConfig?.disableFooter||!1}}},c=o(71241);const u=(0,c.A)(d,[["render",n],["__scopeId","data-v-08acbaa9"]]);var p=u},88830:function(e,t,o){"use strict";o(85331)},95385:function(e,t,o){"use strict";o(85331)},96682:function(e,t,o){"use strict";e.exports=o.p+"img/404.8ed11fb3.png"},96808:function(e,t,o){"use strict";o(85331),o(18785),o(67819),o(85970),o(19104)},97769:function(e,t,o){"use strict";o.d(t,{A:function(){return u}});var s=o(56768);const a={key:0,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},i={key:1,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},l={key:2,class:"channel-svg-icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"};function n(e,t,o,n,r,d){const c=(0,s.g2)("font-awesome-icon");return(0,s.uX)(),(0,s.CE)("span",(0,s.v6)(e.$attrs,{class:["channel-icon-wrapper",`channel-brand-${o.type}`]}),["telegram"===o.type?((0,s.uX)(),(0,s.CE)("svg",a,[...t[0]||(t[0]=[(0,s.Lk)("path",{d:"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z"},null,-1)])])):"huggingface"===o.type?((0,s.uX)(),(0,s.CE)("svg",i,[...t[1]||(t[1]=[(0,s.Fv)('',9)])])):"webdav"===o.type?((0,s.uX)(),(0,s.CE)("svg",l,[...t[2]||(t[2]=[(0,s.Lk)("path",{d:"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z"},null,-1)])])):((0,s.uX)(),(0,s.Wv)(c,{key:3,icon:d.fontAwesomeIcon},null,8,["icon"]))],16)}var r={name:"ChannelIcon",inheritAttrs:!1,props:{type:{type:String,required:!0}},computed:{fontAwesomeIcon(){const e={cfr2:["fab","cloudflare"],s3:["fab","aws"],discord:["fab","discord"]};return e[this.type]||"server"}}},d=o(71241);const c=(0,d.A)(r,[["render",n],["__scopeId","data-v-ce6ff2ce"]]);var u=c}}]); -//# sourceMappingURL=36.1f3c2bdf.js.map \ No newline at end of file diff --git a/frontend-dist/js/36.1f3c2bdf.js.gz b/frontend-dist/js/36.1f3c2bdf.js.gz deleted file mode 100644 index 29c4f46207ffbc53c1460da6f7c3e22b35ccdc80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31469 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 ['_blank', '_self', '_parent', '_top'].includes(value)\n },\n // 图片alt文本\n alt: {\n type: String,\n default: 'Sanyue logo'\n },\n // 自定义logo图片URL(可选)\n customSrc: {\n type: String,\n default: ''\n },\n // Logo位置样式\n position: {\n type: String,\n default: 'fixed',\n // fixed, relative, absolute\n validator: value => ['fixed', 'relative', 'absolute', 'static'].includes(value)\n },\n // Logo大小\n size: {\n type: String,\n default: 'normal',\n // small, normal, large\n validator: value => ['small', 'normal', 'large'].includes(value)\n },\n // 是否启用悬停动画\n enableHover: {\n type: Boolean,\n default: true\n },\n // 是否允许使用用户配置的链接(仅上传页面启用)\n useConfigLink: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n ...mapGetters(['userConfig']),\n logoUrl() {\n // 优先级:customSrc > 用户配置 > 默认图片\n return this.customSrc || this.userConfig?.logoUrl || require('../assets/logo.png');\n },\n logoHref() {\n // 只有启用 useConfigLink 时才使用用户配置的链接\n if (this.useConfigLink && this.userConfig?.logoLink) {\n return this.userConfig.logoLink;\n }\n return this.href;\n },\n logoClasses() {\n return {\n 'logo': true,\n [`logo--${this.position}`]: true,\n [`logo--${this.size}`]: true,\n 'logo--hover-enabled': this.enableHover\n };\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./Logo.vue?vue&type=template&id=17f54292&scoped=true\"\nimport script from \"./Logo.vue?vue&type=script&lang=js\"\nexport * from \"./Logo.vue?vue&type=script&lang=js\"\n\nimport \"./Logo.vue?vue&type=style&index=0&id=17f54292&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-17f54292\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\";\nconst _hoisted_1 = {\n class: \"history-header\"\n};\nconst _hoisted_2 = {\n class: \"header-left\"\n};\nconst _hoisted_3 = {\n class: \"record-count\"\n};\nconst _hoisted_4 = {\n class: \"header-right\"\n};\nconst _hoisted_5 = {\n class: \"timeline-header\"\n};\nconst _hoisted_6 = {\n class: \"date-label\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"grid-view\"\n};\nconst _hoisted_8 = {\n class: \"grid-preview\"\n};\nconst _hoisted_9 = [\"src\"];\nconst _hoisted_10 = [\"src\"];\nconst _hoisted_11 = {\n key: 2,\n class: \"file-icon-wrapper\"\n};\nconst _hoisted_12 = {\n class: \"grid-overlay\"\n};\nconst _hoisted_13 = {\n class: \"grid-actions\"\n};\nconst _hoisted_14 = {\n class: \"grid-info\"\n};\nconst _hoisted_15 = [\"title\"];\nconst _hoisted_16 = {\n class: \"upload-time\"\n};\nconst _hoisted_17 = {\n key: 1,\n class: \"list-view\"\n};\nconst _hoisted_18 = {\n class: \"list-preview\"\n};\nconst _hoisted_19 = [\"src\"];\nconst _hoisted_20 = [\"src\"];\nconst _hoisted_21 = {\n key: 2,\n class: \"file-icon-wrapper-small\"\n};\nconst _hoisted_22 = {\n class: \"list-info\"\n};\nconst _hoisted_23 = [\"title\"];\nconst _hoisted_24 = [\"title\"];\nconst _hoisted_25 = {\n class: \"list-meta\"\n};\nconst _hoisted_26 = {\n class: \"upload-time\"\n};\nconst _hoisted_27 = {\n class: \"list-actions\"\n};\nconst _hoisted_28 = {\n key: 0,\n class: \"load-more-container\"\n};\nconst _hoisted_29 = {\n key: 0,\n class: \"loading-indicator\"\n};\nconst _hoisted_30 = {\n key: 1,\n class: \"load-more-hint\"\n};\nconst _hoisted_31 = {\n key: 1,\n class: \"no-more-hint\"\n};\nconst _hoisted_32 = {\n key: 1,\n class: \"empty-state\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n return _openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\"history-container\", {\n 'active': $props.show\n }])\n }, [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"h2\", null, _toDisplayString(_ctx.$t('uploadHistory.title')), 1), _createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('uploadHistory.totalRecords', {\n count: $data.totalCount\n })), 1)]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadHistory.switchView'),\n placement: \"bottom\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n circle: \"\",\n onClick: $options.toggleViewMode\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.viewMode === 'grid' ? 'list' : 'th-large'\n }, null, 8, [\"icon\"])]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadHistory.clearRecords'),\n placement: \"bottom\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n circle: \"\",\n type: \"danger\",\n onClick: $options.clearHistory\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\"]), _createVNode(_component_el_button, {\n circle: \"\",\n onClick: _cache[0] || (_cache[0] = $event => _ctx.$emit('close'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"times\"\n })]),\n _: 1\n })])]), $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"history-content\",\n ref: \"historyContent\",\n onScroll: _cache[3] || (_cache[3] = (...args) => $options.handleScroll && $options.handleScroll(...args))\n }, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.groupedHistory, group => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: group.date,\n class: \"history-group\"\n }, [_createElementVNode(\"div\", _hoisted_5, [_cache[4] || (_cache[4] = _createElementVNode(\"div\", {\n class: \"timeline-dot\"\n }, null, -1)), _createElementVNode(\"span\", _hoisted_6, _toDisplayString(group.date), 1)]), $data.viewMode === 'grid' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.items, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.time,\n class: \"grid-item\"\n }, [_createElementVNode(\"div\", _hoisted_8, [$options.isImage(item.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: item.url,\n loading: \"lazy\",\n onError: _cache[1] || (_cache[1] = (...args) => $options.handleImageError && $options.handleImageError(...args))\n }, null, 40, _hoisted_9)) : $options.isVideo(item.name) ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: item.url,\n muted: \"\"\n }, null, 8, _hoisted_10)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })])), _createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"div\", _hoisted_13, [_createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n type: \"primary\",\n onClick: $event => $options.copyLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n class: \"action-btn-view\",\n onClick: $event => $options.openLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"external-link-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"default\",\n type: \"danger\",\n onClick: $event => $options.deleteItem(item)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])])])]), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", {\n class: \"file-name\",\n title: item.name\n }, _toDisplayString(item.name), 9, _hoisted_15), _createElementVNode(\"div\", _hoisted_16, _toDisplayString($options.formatTime(item.time)), 1)])]);\n }), 128))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(group.items, item => {\n return _openBlock(), _createElementBlock(\"div\", {\n key: item.time,\n class: \"list-item\"\n }, [_createElementVNode(\"div\", _hoisted_18, [$options.isImage(item.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: item.url,\n loading: \"lazy\",\n onError: _cache[2] || (_cache[2] = (...args) => $options.handleImageError && $options.handleImageError(...args))\n }, null, 40, _hoisted_19)) : $options.isVideo(item.name) ? (_openBlock(), _createElementBlock(\"video\", {\n key: 1,\n src: item.url,\n muted: \"\"\n }, null, 8, _hoisted_20)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_21, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\"\n })]))]), _createElementVNode(\"div\", _hoisted_22, [_createElementVNode(\"div\", {\n class: \"file-name\",\n title: item.name\n }, _toDisplayString(item.name), 9, _hoisted_23), _createElementVNode(\"div\", {\n class: \"file-url\",\n title: item.url\n }, _toDisplayString(item.url), 9, _hoisted_24)]), _createElementVNode(\"div\", _hoisted_25, [_createElementVNode(\"div\", _hoisted_26, _toDisplayString($options.formatTime(item.time)), 1)]), _createElementVNode(\"div\", _hoisted_27, [_createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n type: \"primary\",\n onClick: $event => $options.copyLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n class: \"action-btn-view\",\n onClick: $event => $options.openLink(item.url)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"external-link-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_button, {\n circle: \"\",\n size: \"small\",\n type: \"danger\",\n onClick: $event => $options.deleteItem(item)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })]),\n _: 1\n }, 8, [\"onClick\"])])]);\n }), 128))]))]);\n }), 128)), $options.hasMore ? (_openBlock(), _createElementBlock(\"div\", _hoisted_28, [$data.loadingMore ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [_createVNode(_component_font_awesome_icon, {\n icon: \"spinner\",\n spin: \"\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadHistory.loading')), 1)])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_30, _toDisplayString(_ctx.$t('uploadHistory.pullToLoadMore')), 1))])) : $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, _toDisplayString(_ctx.$t('uploadHistory.noMoreRecords')), 1)) : _createCommentVNode(\"\", true)], 544)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n class: \"empty-icon\"\n }), _createElementVNode(\"p\", null, _toDisplayString(_ctx.$t('uploadHistory.emptyHistory')), 1)]))], 2);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nexport default {\n name: 'UploadHistory',\n props: {\n show: {\n type: Boolean,\n default: false\n }\n },\n data() {\n return {\n historyList: [],\n allHistory: [],\n // 完整历史记录\n viewMode: 'grid',\n // 'grid' or 'list'\n pageSize: 30,\n // 每次加载数量\n currentPage: 0,\n loadingMore: false,\n totalCount: 0\n };\n },\n watch: {\n show(val) {\n if (val) {\n this.resetAndLoad();\n }\n }\n },\n computed: {\n hasMore() {\n return this.historyList.length < this.totalCount;\n },\n groupedHistory() {\n const groups = {};\n this.historyList.forEach(item => {\n const date = new Date(item.time);\n const dateStr = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;\n if (!groups[dateStr]) {\n groups[dateStr] = [];\n }\n groups[dateStr].push(item);\n });\n\n // Sort dates descending\n return Object.keys(groups).sort((a, b) => new Date(b) - new Date(a)).map(date => ({\n date,\n items: groups[date]\n }));\n }\n },\n mounted() {\n // Load view mode preference\n const savedMode = localStorage.getItem('historyViewMode');\n if (savedMode) {\n this.viewMode = savedMode;\n }\n },\n methods: {\n resetAndLoad() {\n this.historyList = [];\n this.currentPage = 0;\n this.loadAllHistory();\n this.loadMore();\n },\n loadAllHistory() {\n try {\n const history = JSON.parse(localStorage.getItem('uploadHistory') || '[]');\n // Sort by time desc\n this.allHistory = history.sort((a, b) => b.time - a.time);\n this.totalCount = this.allHistory.length;\n } catch (e) {\n console.error('Failed to load history', e);\n this.allHistory = [];\n this.totalCount = 0;\n }\n },\n loadMore() {\n if (this.loadingMore || !this.hasMore) return;\n this.loadingMore = true;\n\n // 模拟异步加载,避免阻塞UI\n setTimeout(() => {\n const start = this.currentPage * this.pageSize;\n const end = start + this.pageSize;\n const newItems = this.allHistory.slice(start, end);\n this.historyList = [...this.historyList, ...newItems];\n this.currentPage++;\n this.loadingMore = false;\n }, 50);\n },\n handleScroll(e) {\n const container = e.target;\n const scrollTop = container.scrollTop;\n const scrollHeight = container.scrollHeight;\n const clientHeight = container.clientHeight;\n\n // 距离底部 100px 时加载更多\n if (scrollHeight - scrollTop - clientHeight < 100) {\n this.loadMore();\n }\n },\n toggleViewMode() {\n this.viewMode = this.viewMode === 'grid' ? 'list' : 'grid';\n localStorage.setItem('historyViewMode', this.viewMode);\n },\n clearHistory() {\n this.$confirm(this.$t('uploadHistory.clearConfirmMessage'), this.$t('uploadHistory.clearConfirmTitle'), {\n confirmButtonText: this.$t('uploadHistory.clearConfirmOk'),\n cancelButtonText: this.$t('uploadHistory.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n this.historyList = [];\n this.allHistory = [];\n this.totalCount = 0;\n this.currentPage = 0;\n localStorage.removeItem('uploadHistory');\n this.$message.success(this.$t('uploadHistory.recordsCleared'));\n }).catch(() => {});\n },\n deleteItem(item) {\n this.$confirm(this.$t('uploadHistory.deleteConfirmMessage'), this.$t('uploadHistory.clearConfirmTitle'), {\n confirmButtonText: this.$t('uploadHistory.clearConfirmOk'),\n cancelButtonText: this.$t('uploadHistory.clearConfirmCancel'),\n type: 'warning'\n }).then(() => {\n // Remove from lists\n this.historyList = this.historyList.filter(i => i.time !== item.time);\n this.allHistory = this.allHistory.filter(i => i.time !== item.time);\n this.totalCount = this.allHistory.length;\n\n // Update localStorage\n try {\n localStorage.setItem('uploadHistory', JSON.stringify(this.allHistory));\n this.$message.success(this.$t('uploadHistory.recordDeleted'));\n } catch (e) {\n console.error('Failed to update history', e);\n }\n }).catch(() => {});\n },\n isImage(fileName) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp'];\n const extension = fileName ? fileName.split('.').pop().toLowerCase() : '';\n return imageExtensions.includes(extension);\n },\n isVideo(fileName) {\n const videoExtensions = ['mp4', 'webm', 'ogg', 'mkv'];\n const extension = fileName ? fileName.split('.').pop().toLowerCase() : '';\n return videoExtensions.includes(extension);\n },\n formatTime(timestamp) {\n const date = new Date(timestamp);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n },\n copyLink(url) {\n navigator.clipboard.writeText(url).then(() => {\n this.$message.success(this.$t('uploadHistory.linkCopied'));\n }).catch(() => {\n this.$message.error(this.$t('uploadHistory.copyFailed'));\n });\n },\n openLink(url) {\n window.open(url, '_blank');\n },\n handleImageError(e) {\n e.target.src = require('@/assets/404.png');\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHistory.vue?vue&type=template&id=7da2f8c2&scoped=true\"\nimport script from \"./UploadHistory.vue?vue&type=script&lang=js\"\nexport * from \"./UploadHistory.vue?vue&type=script&lang=js\"\n\nimport \"./UploadHistory.vue?vue&type=style&index=0&id=7da2f8c2&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7da2f8c2\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n class: \"dialog-section\"\n};\nconst _hoisted_2 = {\n class: \"section-header\"\n};\nconst _hoisted_3 = {\n class: \"section-title\"\n};\nconst _hoisted_4 = {\n class: \"section-content\"\n};\nconst _hoisted_5 = {\n class: \"setting-item\"\n};\nconst _hoisted_6 = {\n class: \"setting-label\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_8 = {\n class: \"setting-label\"\n};\nconst _hoisted_9 = {\n class: \"setting-item\"\n};\nconst _hoisted_10 = {\n class: \"setting-label\"\n};\nconst _hoisted_11 = {\n class: \"setting-item\"\n};\nconst _hoisted_12 = {\n class: \"setting-label\"\n};\nconst _hoisted_13 = {\n class: \"dialog-section\"\n};\nconst _hoisted_14 = {\n class: \"section-header\"\n};\nconst _hoisted_15 = {\n class: \"section-title\"\n};\nconst _hoisted_16 = {\n class: \"section-content\"\n};\nconst _hoisted_17 = {\n class: \"dialog-section\"\n};\nconst _hoisted_18 = {\n class: \"section-header\"\n};\nconst _hoisted_19 = {\n class: \"section-title\"\n};\nconst _hoisted_20 = {\n class: \"section-content\"\n};\nconst _hoisted_21 = {\n class: \"setting-item\"\n};\nconst _hoisted_22 = {\n class: \"setting-label\"\n};\nconst _hoisted_23 = {\n class: \"setting-item\"\n};\nconst _hoisted_24 = {\n class: \"setting-label\"\n};\nconst _hoisted_25 = {\n key: 0,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_26 = {\n class: \"setting-label\"\n};\nconst _hoisted_27 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_28 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_29 = {\n key: 1,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_30 = {\n class: \"setting-label\"\n};\nconst _hoisted_31 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_32 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_33 = {\n key: 0,\n class: \"dialog-section\"\n};\nconst _hoisted_34 = {\n class: \"section-header\"\n};\nconst _hoisted_35 = {\n class: \"section-title\"\n};\nconst _hoisted_36 = {\n class: \"section-content\"\n};\nconst _hoisted_37 = {\n class: \"setting-item\"\n};\nconst _hoisted_38 = {\n class: \"setting-label\"\n};\nconst _hoisted_39 = {\n class: \"dialog-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ChannelIcon = _resolveComponent(\"ChannelIcon\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_slider = _resolveComponent(\"el-slider\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n return _openBlock(), _createBlock(_component_el_dialog, {\n title: _ctx.$t('uploadSettings.title'),\n modelValue: $options.visible,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $options.visible = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog settings-dialog-scope upload-settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"span\", _hoisted_3, _toDisplayString(_ctx.$t('uploadSettings.uploadChannel')), 1)]), _createElementVNode(\"div\", _hoisted_4, [_createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"span\", _hoisted_6, _toDisplayString(_ctx.$t('uploadSettings.channelType')), 1), _createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadChannel,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => _ctx.$emit('update:uploadChannel', $event)),\n class: \"radio-card-group compact\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"telegram\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"telegram\",\n class: \"channel-icon\"\n }), _cache[13] || (_cache[13] = _createElementVNode(\"span\", null, \"TG\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"cfr2\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"cfr2\",\n class: \"channel-icon\"\n }), _cache[14] || (_cache[14] = _createElementVNode(\"span\", null, \"R2\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"s3\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"s3\",\n class: \"channel-icon\"\n }), _cache[15] || (_cache[15] = _createElementVNode(\"span\", null, \"S3\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"discord\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"discord\",\n class: \"channel-icon\"\n }), _cache[16] || (_cache[16] = _createElementVNode(\"span\", null, \"DC\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"huggingface\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"huggingface\",\n class: \"channel-icon\"\n }), _cache[17] || (_cache[17] = _createElementVNode(\"span\", null, \"HF\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"webdav\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_ChannelIcon, {\n type: \"webdav\",\n class: \"channel-icon\"\n }), _cache[18] || (_cache[18] = _createElementVNode(\"span\", null, \"WD\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model-value\"])]), $props.currentChannelList.length > 1 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createElementVNode(\"span\", _hoisted_8, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.channelName')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.channelNameTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_select, {\n \"model-value\": $props.channelName,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => _ctx.$emit('update:channelName', $event)),\n placeholder: _ctx.$t('uploadSettings.autoSelect'),\n clearable: \"\",\n class: \"setting-input\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.currentChannelList, ch => {\n return _openBlock(), _createBlock(_component_el_option, {\n key: ch.name,\n label: ch.name,\n value: ch.name\n }, null, 8, [\"label\", \"value\"]);\n }), 128))]),\n _: 1\n }, 8, [\"model-value\", \"placeholder\"])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"span\", _hoisted_10, _toDisplayString(_ctx.$t('uploadSettings.uploadDirectory')), 1), _createVNode(_component_el_input, {\n \"model-value\": $props.uploadFolder,\n \"onUpdate:modelValue\": $options.handleUploadFolderInput,\n placeholder: _ctx.$t('uploadSettings.uploadDirectoryPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"model-value\", \"onUpdate:modelValue\", \"placeholder\"])]), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"span\", _hoisted_12, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.autoSwitch')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.autoSwitchTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_switch, {\n \"model-value\": $props.autoRetry,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => _ctx.$emit('update:autoRetry', $event))\n }, null, 8, [\"model-value\"])])])]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('uploadSettings.fileNaming')), 1)]), _createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_radio_group, {\n \"model-value\": $props.uploadNameType,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => _ctx.$emit('update:uploadNameType', $event)),\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n label: \"default\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingDefault')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"index\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"hashtag\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingIndex')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"origin\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"file-signature\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingOrigin')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n label: \"short\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"compress-alt\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadSettings.namingShort')), 1)]),\n _: 1\n })]),\n _: 1\n }, 8, [\"model-value\"])])]), _createElementVNode(\"div\", _hoisted_17, [_createElementVNode(\"div\", _hoisted_18, [_createElementVNode(\"span\", _hoisted_19, _toDisplayString(_ctx.$t('uploadSettings.filePreprocess')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.filePreprocessTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_20, [_createElementVNode(\"div\", _hoisted_21, [_createElementVNode(\"span\", _hoisted_22, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.convertToWebp')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.convertToWebpTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createVNode(_component_el_switch, {\n \"model-value\": $props.convertToWebp,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => _ctx.$emit('update:convertToWebp', $event))\n }, null, 8, [\"model-value\"])]), _createElementVNode(\"div\", _hoisted_23, [_createElementVNode(\"span\", _hoisted_24, _toDisplayString(_ctx.$t('uploadSettings.fileCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.customerCompress,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => _ctx.$emit('update:customerCompress', $event))\n }, null, 8, [\"model-value\"])]), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_25, [_createElementVNode(\"span\", _hoisted_26, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.compressThreshold')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.compressThresholdTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_27, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => _ctx.$emit('update:compressBar', $event)),\n min: 1,\n max: 20,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"model-value\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_28, [_createVNode(_component_el_input_number, {\n \"model-value\": $props.compressBar,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => _ctx.$emit('update:compressBar', $event)),\n min: 1,\n max: 20,\n step: 1,\n \"value-on-clear\": 1,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\"]), _cache[19] || (_cache[19] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true), $props.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_29, [_createElementVNode(\"span\", _hoisted_30, [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.expectedSize')) + \" \", 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.expectedSizeTooltip'),\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"inline-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_31, [_createVNode(_component_el_slider, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => _ctx.$emit('update:compressQuality', $event)),\n min: 0.5,\n max: $props.compressBar,\n step: 0.1,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"model-value\", \"max\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_32, [_createVNode(_component_el_input_number, {\n \"model-value\": $props.compressQuality,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => _ctx.$emit('update:compressQuality', $event)),\n min: 0.5,\n max: $props.compressBar,\n step: 0.1,\n precision: 1,\n \"value-on-clear\": 0.5,\n class: \"slider-input\",\n \"controls-position\": \"right\"\n }, null, 8, [\"model-value\", \"max\"]), _cache[20] || (_cache[20] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true)])]), $props.uploadChannel === 'telegram' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [_createElementVNode(\"div\", _hoisted_34, [_createElementVNode(\"span\", _hoisted_35, _toDisplayString(_ctx.$t('uploadSettings.serverCompress')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('uploadSettings.serverCompressTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_36, [_createElementVNode(\"div\", _hoisted_37, [_createElementVNode(\"span\", _hoisted_38, _toDisplayString(_ctx.$t('uploadSettings.enableCompress')), 1), _createVNode(_component_el_switch, {\n \"model-value\": $props.serverCompress,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => _ctx.$emit('update:serverCompress', $event))\n }, null, 8, [\"model-value\"])])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_39, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[11] || (_cache[11] = $event => $options.visible = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('uploadSettings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]);\n}","import ChannelIcon from '@/components/icons/ChannelIcon.vue';\nexport default {\n name: 'UploadSettingsDialog',\n components: {\n ChannelIcon\n },\n methods: {\n handleUploadFolderInput(val) {\n // 自动补全前导 /\n if (val && !val.startsWith('/')) {\n val = '/' + val;\n }\n this.$emit('update:uploadFolder', val);\n }\n },\n props: {\n modelValue: {\n type: Boolean,\n default: false\n },\n uploadChannel: {\n type: String,\n default: 'telegram'\n },\n channelName: {\n type: String,\n default: ''\n },\n currentChannelList: {\n type: Array,\n default: () => []\n },\n uploadFolder: {\n type: String,\n default: ''\n },\n autoRetry: {\n type: Boolean,\n default: true\n },\n uploadNameType: {\n type: String,\n default: 'default'\n },\n convertToWebp: {\n type: Boolean,\n default: false\n },\n customerCompress: {\n type: Boolean,\n default: true\n },\n compressBar: {\n type: Number,\n default: 5\n },\n compressQuality: {\n type: Number,\n default: 4\n },\n serverCompress: {\n type: Boolean,\n default: true\n }\n },\n emits: ['update:modelValue', 'update:uploadChannel', 'update:channelName', 'update:uploadFolder', 'update:autoRetry', 'update:uploadNameType', 'update:convertToWebp', 'update:customerCompress', 'update:compressBar', 'update:compressQuality', 'update:serverCompress'],\n computed: {\n visible: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadSettingsDialog.vue?vue&type=template&id=1c6b8366\"\nimport script from \"./UploadSettingsDialog.vue?vue&type=script&lang=js\"\nexport * from \"./UploadSettingsDialog.vue?vue&type=script&lang=js\"\n\nimport \"@/styles/settings-dialog.css?vue&type=style&index=0&lang=css&external\"\nimport \"./UploadSettingsDialog.css?vue&type=style&index=1&lang=css&external\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, withCtx as _withCtx } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-list-item\"\n};\nconst _hoisted_2 = [\"href\"];\nconst _hoisted_3 = {\n key: 0,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n autoplay: \"\",\n muted: \"\",\n playsinline: \"\",\n loop: \"\"\n};\nconst _hoisted_4 = [\"src\"];\nconst _hoisted_5 = [\"src\"];\nconst _hoisted_6 = {\n key: 2,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n }\n};\nconst _hoisted_7 = {\n class: \"upload-list-item-content\"\n};\nconst _hoisted_8 = {\n class: \"upload-list-item-name-wrapper\"\n};\nconst _hoisted_9 = {\n key: 0,\n class: \"upload-list-item-url\"\n};\nconst _hoisted_10 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_11 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_12 = {\n key: 1,\n class: \"upload-list-item-progress\"\n};\nconst _hoisted_13 = {\n class: \"upload-list-item-action\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_text = _resolveComponent(\"el-text\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_progress = _resolveComponent(\"el-progress\");\n const _component_Link = _resolveComponent(\"Link\");\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_Delete = _resolveComponent(\"Delete\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"a\", {\n href: $props.file.url,\n target: \"_blank\",\n class: \"upload-list-item-preview\"\n }, [$options.isVideo($props.file.name) ? (_openBlock(), _createElementBlock(\"video\", _hoisted_3, [_createElementVNode(\"source\", {\n src: $props.file.url,\n type: \"video/mp4\"\n }, null, 8, _hoisted_4), _cache[7] || (_cache[7] = _createTextVNode(\" Your browser does not support the video tag. \", -1))])) : $options.isImage($props.file.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 1,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n src: $props.file.url,\n onError: _cache[0] || (_cache[0] = $event => _ctx.$emit('preview-error', $props.file))\n }, null, 40, _hoisted_5)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })]))], 8, _hoisted_2), _createElementVNode(\"div\", _hoisted_7, [_createElementVNode(\"div\", _hoisted_8, [_createVNode(_component_el_text, {\n class: \"upload-list-item-name\",\n truncated: \"\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.truncateFilename($props.file.name)), 1)]),\n _: 1\n })]), $props.file.status === 'done' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [_createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_input, {\n modelValue: $props.file.finalURL,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $props.file.finalURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[8] || (_cache[8] = [_createTextVNode(\"URL\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: $props.file.mdURL,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $props.file.mdURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[9] || (_cache[9] = [_createTextVNode(\"MarkDown\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"])]), _createElementVNode(\"div\", _hoisted_11, [_createVNode(_component_el_input, {\n modelValue: $props.file.htmlURL,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $props.file.htmlURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[10] || (_cache[10] = [_createTextVNode(\"HTML\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: $props.file.ubbURL,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => $props.file.ubbURL = $event),\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[11] || (_cache[11] = [_createTextVNode(\"BBCode\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onClick\", \"size\"])])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [_createVNode(_component_el_progress, {\n percentage: $props.file.progreess,\n status: $props.file.status,\n \"show-text\": false\n }, null, 8, [\"percentage\", \"status\"])]))]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-primary\",\n onClick: _cache[5] || (_cache[5] = $event => _ctx.$emit('copy', $props.file))\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Link)]),\n _: 1\n })]), _createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-danger\",\n onClick: _cache[6] || (_cache[6] = $event => _ctx.$emit('remove', $props.file))\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Delete)]),\n _: 1\n })])])]);\n}","import { Link, Delete } from '@element-plus/icons-vue';\nconst IMAGE_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp', 'raw', 'cr2', 'nef', 'dng', 'eps', 'ai', 'emf', 'wmf'];\nconst VIDEO_EXTENSIONS = ['mp4', 'webm', 'ogg', 'mkv'];\nexport default {\n name: 'UploadFileItem',\n components: {\n Link,\n Delete\n },\n props: {\n file: {\n type: Object,\n required: true\n }\n },\n emits: ['copy', 'remove', 'preview-error'],\n computed: {\n urlSize() {\n return window.innerWidth < 768 ? 'small' : 'default';\n }\n },\n methods: {\n isImage(fileName) {\n const ext = fileName.split('.').pop().toLowerCase();\n return IMAGE_EXTENSIONS.includes(ext);\n },\n isVideo(fileName) {\n const ext = fileName.split('.').pop().toLowerCase();\n return VIDEO_EXTENSIONS.includes(ext);\n },\n truncateFilename(filename, maxLength = 20) {\n if (!filename || filename.length <= maxLength) return filename;\n const lastDotIndex = filename.lastIndexOf('.');\n let name, ext;\n if (lastDotIndex > 0) {\n name = filename.substring(0, lastDotIndex);\n ext = filename.substring(lastDotIndex);\n } else {\n name = filename;\n ext = '';\n }\n const keepEnd = ext.length + 4;\n const keepStart = maxLength - keepEnd - 3;\n if (keepStart <= 0) return filename.substring(0, maxLength - 3) + '...';\n return name.substring(0, keepStart) + '...' + name.slice(-4) + ext;\n },\n selectAllText(event) {\n navigator.clipboard.writeText(event.target.value).then(() => {\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copySuccess')\n });\n }).catch(() => {\n this.$message({\n type: 'error',\n message: this.$t('uploadForm.copyFailed')\n });\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadFileItem.vue?vue&type=template&id=645a7810&scoped=true\"\nimport script from \"./UploadFileItem.vue?vue&type=script&lang=js\"\nexport * from \"./UploadFileItem.vue?vue&type=script&lang=js\"\n\nimport \"./UploadFileItem.vue?vue&type=style&index=0&id=645a7810&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-645a7810\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"upload-form\"\n};\nconst _hoisted_2 = {\n class: \"upload-card-glow\",\n ref: \"uploadCardGlow\"\n};\nconst _hoisted_3 = [\"innerHTML\"];\nconst _hoisted_4 = {\n key: 0,\n class: \"upload-card\"\n};\nconst _hoisted_5 = {\n class: \"paste-card-actions\"\n};\nconst _hoisted_6 = [\"aria-label\"];\nconst _hoisted_7 = [\"aria-pressed\"];\nconst _hoisted_8 = [\"aria-pressed\"];\nconst _hoisted_9 = {\n class: \"upload-list-container\"\n};\nconst _hoisted_10 = {\n class: \"upload-list-dashboard-action\"\n};\nconst _hoisted_11 = {\n class: \"modern-action-group\"\n};\nconst _hoisted_12 = {\n class: \"modern-dropdown-item-content\"\n};\nconst _hoisted_13 = {\n class: \"modern-action-btn modern-action-btn-danger\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_icon = _resolveComponent(\"el-icon\");\n const _component_el_upload = _resolveComponent(\"el-upload\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_card = _resolveComponent(\"el-card\");\n const _component_List = _resolveComponent(\"List\");\n const _component_Checked = _resolveComponent(\"Checked\");\n const _component_Failed = _resolveComponent(\"Failed\");\n const _component_el_text = _resolveComponent(\"el-text\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_UploadFileItem = _resolveComponent(\"UploadFileItem\");\n const _component_el_scrollbar = _resolveComponent(\"el-scrollbar\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", {\n class: \"upload-card-wrapper\",\n onMousemove: _cache[0] || (_cache[0] = (...args) => $options.handleUploadCardMouseMove && $options.handleUploadCardMouseMove(...args)),\n onMouseleave: _cache[1] || (_cache[1] = (...args) => $options.handleUploadCardMouseLeave && $options.handleUploadCardMouseLeave(...args))\n }, [_createElementVNode(\"div\", _hoisted_2, null, 512), $props.uploadMethod === 'default' ? (_openBlock(), _createBlock(_component_el_upload, {\n key: 0,\n class: _normalizeClass([\"upload-card\", {\n 'is-uploading': $data.uploading,\n 'upload-card-busy': $data.fileList.length\n }]),\n drag: \"\",\n multiple: \"\",\n \"http-request\": $options.uploadFile,\n onSuccess: $options.handleSuccess,\n \"on-error\": $options.handleError,\n \"before-upload\": $options.beforeUpload,\n \"on-progress\": $options.handleProgress,\n \"file-list\": $data.fileList,\n \"show-file-list\": false\n }, {\n default: _withCtx(() => [_createVNode(_component_el_icon, {\n class: _normalizeClass([\"el-icon--upload\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [...(_cache[9] || (_cache[9] = [_createElementVNode(\"svg\", {\n class: \"upload-plus-icon\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": \"1.25\",\n \"stroke-linecap\": \"round\",\n \"aria-hidden\": \"true\"\n }, [_createElementVNode(\"path\", {\n d: \"M12 7v10\"\n }), _createElementVNode(\"path\", {\n d: \"M7 12h10\"\n })], -1)]))]),\n _: 1\n }, 8, [\"class\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"el-upload__text\", {\n 'upload-list-busy': $data.fileList.length\n }]),\n innerHTML: _ctx.$t('upload.dragUploadText')\n }, null, 10, _hoisted_3)]),\n _: 1\n }, 8, [\"class\", \"http-request\", \"onSuccess\", \"on-error\", \"before-upload\", \"on-progress\", \"file-list\"])) : _createCommentVNode(\"\", true)], 32), $props.uploadMethod === 'paste' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [_createVNode(_component_el_card, {\n class: _normalizeClass([\"paste-card\", {\n 'is-uploading': $data.uploading,\n 'upload-card-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [_createVNode(_component_el_input, {\n modelValue: $data.pastedUrls,\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => $data.pastedUrls = $event),\n class: \"upload-card-textarea\",\n placeholder: _ctx.$t('upload.pasteUrlPlaceholder'),\n type: \"textarea\",\n rows: $data.fileList.length ? 4 : 14\n }, null, 8, [\"modelValue\", \"placeholder\", \"rows\"]), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_button, {\n class: \"paste-card-upload-button\",\n type: \"primary\",\n size: $options.pasteCardMethodButtonSize,\n onClick: $options.handleUploadPasteUrls\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.pasteUploadBtn')), 1)]),\n _: 1\n }, 8, [\"size\", \"onClick\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"paste-card-method-group\", {\n 'is-external': $data.pasteUploadMethod === 'external'\n }]),\n role: \"group\",\n \"aria-label\": _ctx.$t('upload.switchUploadMethod')\n }, [_createElementVNode(\"button\", {\n class: _normalizeClass([\"paste-card-method-button\", {\n 'is-active': $data.pasteUploadMethod === 'save'\n }]),\n type: \"button\",\n \"aria-pressed\": $data.pasteUploadMethod === 'save',\n onClick: _cache[3] || (_cache[3] = $event => $data.pasteUploadMethod = 'save')\n }, _toDisplayString(_ctx.$t('upload.pasteSave')), 11, _hoisted_7), _createElementVNode(\"button\", {\n class: _normalizeClass([\"paste-card-method-button\", {\n 'is-active': $data.pasteUploadMethod === 'external'\n }]),\n type: \"button\",\n \"aria-pressed\": $data.pasteUploadMethod === 'external',\n onClick: _cache[4] || (_cache[4] = $event => $data.pasteUploadMethod = 'external')\n }, _toDisplayString(_ctx.$t('upload.pasteExternal')), 11, _hoisted_8)], 10, _hoisted_6)])]),\n _: 1\n }, 8, [\"class\"])])) : _createCommentVNode(\"\", true), _createVNode(_component_el_card, {\n class: _normalizeClass([\"upload-list-card\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_9, [_createVNode(_component_el_scrollbar, {\n onScroll: $options.handleScroll,\n ref: \"scrollContainer\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-list-dashboard\", {\n 'list-scrolled': $data.listScrolled\n }])\n }, [_createVNode(_component_el_text, {\n class: \"upload-list-dashboard-title\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_List)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadingCount + $options.waitingCount) + \" \", 1), _createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Checked)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadSuccessCount) + \" \", 1), _createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Failed)]),\n _: 1\n }), _createTextVNode(_toDisplayString($options.uploadErrorCount), 1)]),\n _: 1\n }), _createElementVNode(\"div\", _hoisted_10, [_createElementVNode(\"div\", _hoisted_11, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.copyAll'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn modern-action-btn-copy\",\n onClick: _cache[5] || (_cache[5] = (...args) => $options.copyAll && $options.copyAll(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.retryFailed'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown, null, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"modern-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, null, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_12, [_createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('uploadForm.autoRetry')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.autoReUpload,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.autoReUpload = $event),\n onChange: $options.handleAutoRetryChange,\n size: \"small\"\n }, null, 8, [\"modelValue\", \"onChange\"])])]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn modern-action-btn-retry\",\n onClick: _cache[6] || (_cache[6] = (...args) => $options.retryError && $options.retryError(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.clearList'),\n placement: \"top\",\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown, null, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, {\n class: \"modern-dropdown-menu\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n onClick: $options.clearFileList\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.clearAll')), 1)]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_dropdown_item, {\n onClick: $options.clearSuccessList\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.clearUploaded')), 1)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", _hoisted_13, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])])], 2), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.fileList.slice().reverse(), file => {\n return _openBlock(), _createBlock(_component_UploadFileItem, {\n key: file.name,\n file: file,\n onCopy: $options.handleCopy,\n onRemove: $options.handleRemove,\n onPreviewError: _cache[8] || (_cache[8] = f => f.url = require('@/assets/404.png'))\n }, null, 8, [\"file\", \"onCopy\", \"onRemove\"]);\n }), 128))]),\n _: 1\n }, 8, [\"onScroll\"])])]),\n _: 1\n }, 8, [\"class\"])]);\n}","/**\r\n * URL 构建工具函数\r\n * 用于生成各种格式的文件链接(原始链接、Markdown、HTML、BBCode)\r\n */\r\n\r\n/**\r\n * 根据 srcID 和文件名生成所有格式的 URL\r\n * @param {string} srcID - 文件资源 ID\r\n * @param {string} name - 文件名\r\n * @param {string} rootUrl - 链接前缀\r\n * @returns {{ finalURL: string, mdURL: string, htmlURL: string, ubbURL: string }}\r\n */\r\nexport function buildFileUrls(srcID, name, rootUrl) {\r\n const url = rootUrl + srcID\r\n return {\r\n finalURL: url,\r\n mdURL: `![${name}](${url})`,\r\n htmlURL: `\"${name}\"`,\r\n ubbURL: `[img]${url}[/img]`\r\n }\r\n}\r\n\r\n/**\r\n * 根据 selectedUrlForm 获取对应格式的 URL 值\r\n * @param {object} file - 文件对象,包含 finalURL/mdURL/htmlURL/ubbURL\r\n * @param {string} format - 格式类型:'url' | 'md' | 'html' | 'ubb'\r\n * @returns {string}\r\n */\r\nexport function getUrlByFormat(file, format) {\r\n const map = {\r\n url: file.finalURL,\r\n md: file.mdURL,\r\n html: file.htmlURL,\r\n ubb: file.ubbURL\r\n }\r\n return map[format] || file.finalURL\r\n}\r\n\r\n/**\r\n * 批量更新文件列表中的 URL(当自定义链接前缀变化时)\r\n * @param {Array} fileList - 文件列表\r\n * @param {string} rootUrl - 新的链接前缀\r\n */\r\nexport function updateFileListUrls(fileList, rootUrl) {\r\n fileList.forEach(item => {\r\n if (item.uploadChannel === 'external') {\r\n return\r\n }\r\n const urls = buildFileUrls(item.srcID, item.name, rootUrl)\r\n Object.assign(item, urls)\r\n })\r\n}\r\n","/**\r\n * SHA256 计算工具\r\n * 纯 JavaScript 实现的增量 SHA256 哈希算法,支持任意大小文件\r\n */\r\n\r\n// SHA256 常量\r\nconst K = new Uint32Array([\r\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\r\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\r\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\r\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\r\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\r\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\r\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\r\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\r\n])\r\n\r\nconst rotr = (x, n) => (x >>> n) | (x << (32 - n))\r\n\r\nfunction processBlock(block, H) {\r\n const W = new Uint32Array(64)\r\n\r\n for (let i = 0; i < 16; i++) {\r\n W[i] = (block[i * 4] << 24) | (block[i * 4 + 1] << 16) | (block[i * 4 + 2] << 8) | block[i * 4 + 3]\r\n }\r\n\r\n for (let i = 16; i < 64; i++) {\r\n const s0 = rotr(W[i - 15], 7) ^ rotr(W[i - 15], 18) ^ (W[i - 15] >>> 3)\r\n const s1 = rotr(W[i - 2], 17) ^ rotr(W[i - 2], 19) ^ (W[i - 2] >>> 10)\r\n W[i] = (W[i - 16] + s0 + W[i - 7] + s1) >>> 0\r\n }\r\n\r\n let [a, b, c, d, e, f, g, h] = H\r\n\r\n for (let i = 0; i < 64; i++) {\r\n const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25)\r\n const ch = (e & f) ^ (~e & g)\r\n const temp1 = (h + S1 + ch + K[i] + W[i]) >>> 0\r\n const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)\r\n const maj = (a & b) ^ (a & c) ^ (b & c)\r\n const temp2 = (S0 + maj) >>> 0\r\n\r\n h = g; g = f; f = e\r\n e = (d + temp1) >>> 0\r\n d = c; c = b; b = a\r\n a = (temp1 + temp2) >>> 0\r\n }\r\n\r\n H[0] = (H[0] + a) >>> 0\r\n H[1] = (H[1] + b) >>> 0\r\n H[2] = (H[2] + c) >>> 0\r\n H[3] = (H[3] + d) >>> 0\r\n H[4] = (H[4] + e) >>> 0\r\n H[5] = (H[5] + f) >>> 0\r\n H[6] = (H[6] + g) >>> 0\r\n H[7] = (H[7] + h) >>> 0\r\n}\r\n\r\n/**\r\n * 创建增量 SHA256 哈希器\r\n * @returns {{ update: (data: Uint8Array) => void, digest: () => string }}\r\n */\r\nexport function createSha256() {\r\n let H = new Uint32Array([\r\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\r\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\r\n ])\r\n\r\n let buffer = new Uint8Array(64)\r\n let bufferLength = 0\r\n let totalLength = 0\r\n\r\n return {\r\n update(data) {\r\n totalLength += data.length\r\n let offset = 0\r\n\r\n if (bufferLength > 0) {\r\n const needed = 64 - bufferLength\r\n const toCopy = Math.min(needed, data.length)\r\n buffer.set(data.subarray(0, toCopy), bufferLength)\r\n bufferLength += toCopy\r\n offset = toCopy\r\n\r\n if (bufferLength === 64) {\r\n processBlock(buffer, H)\r\n bufferLength = 0\r\n }\r\n }\r\n\r\n while (offset + 64 <= data.length) {\r\n processBlock(data.subarray(offset, offset + 64), H)\r\n offset += 64\r\n }\r\n\r\n if (offset < data.length) {\r\n buffer.set(data.subarray(offset), 0)\r\n bufferLength = data.length - offset\r\n }\r\n },\r\n digest() {\r\n const bitLength = totalLength * 8\r\n\r\n // Padding\r\n buffer[bufferLength++] = 0x80\r\n\r\n if (bufferLength > 56) {\r\n buffer.fill(0, bufferLength, 64)\r\n processBlock(buffer, H)\r\n bufferLength = 0\r\n }\r\n\r\n buffer.fill(0, bufferLength, 56)\r\n\r\n // Length in bits (big-endian, 64-bit)\r\n const view = new DataView(buffer.buffer)\r\n view.setUint32(56, Math.floor(bitLength / 0x100000000), false)\r\n view.setUint32(60, bitLength >>> 0, false)\r\n\r\n processBlock(buffer, H)\r\n\r\n // Convert to hex\r\n let hex = ''\r\n for (let i = 0; i < 8; i++) {\r\n hex += H[i].toString(16).padStart(8, '0')\r\n }\r\n return hex\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 计算文件的 SHA256 哈希\r\n * 使用增量哈希算法,支持任意大小文件\r\n * @param {File} file - 要计算哈希的文件\r\n * @returns {Promise} SHA256 哈希值(十六进制字符串)\r\n */\r\nexport async function computeSha256(file) {\r\n const sha256 = createSha256()\r\n\r\n const CHUNK_SIZE = 4 * 1024 * 1024 // 4MB chunks\r\n let offset = 0\r\n\r\n while (offset < file.size) {\r\n const chunk = file.slice(offset, Math.min(offset + CHUNK_SIZE, file.size))\r\n const buffer = await chunk.arrayBuffer()\r\n sha256.update(new Uint8Array(buffer))\r\n offset += CHUNK_SIZE\r\n\r\n // 每处理 20MB 打印一次进度\r\n if (offset % (20 * 1024 * 1024) < CHUNK_SIZE) {\r\n console.log(`SHA256 progress: ${Math.min(100, Math.round(offset / file.size * 100))}%`)\r\n }\r\n }\r\n\r\n return sha256.digest()\r\n}\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.find.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport \"core-js/modules/es.iterator.reduce.js\";\nimport \"core-js/modules/es.typed-array.with.js\";\nimport \"core-js/modules/esnext.uint8-array.set-from-base64.js\";\nimport \"core-js/modules/esnext.uint8-array.set-from-hex.js\";\nimport \"core-js/modules/esnext.uint8-array.to-base64.js\";\nimport \"core-js/modules/esnext.uint8-array.to-hex.js\";\nimport \"core-js/modules/web.dom-exception.stack.js\";\nimport axios from '@/utils/axios';\nimport * as imageConversion from 'image-conversion';\nimport { mapGetters } from 'vuex';\nimport { buildFileUrls, updateFileListUrls, getUrlByFormat } from '@/utils/upload/urlBuilder';\nimport { computeSha256 } from '@/utils/upload/sha256';\nimport UploadFileItem from '@/components/upload/UploadFileItem.vue';\nexport default {\n name: 'UploadForm',\n components: {\n UploadFileItem\n },\n props: {\n selectedUrlForm: {\n type: String,\n default: 'url',\n required: false\n },\n customerCompress: {\n type: Boolean,\n default: true,\n required: false\n },\n compressQuality: {\n type: Number,\n default: 4,\n required: false\n },\n compressBar: {\n type: Number,\n default: 5,\n required: false\n },\n serverCompress: {\n type: Boolean,\n default: true,\n required: false\n },\n uploadChannel: {\n type: String,\n default: 'telegram',\n required: false\n },\n channelName: {\n type: String,\n default: '',\n required: false\n },\n uploadNameType: {\n type: String,\n default: 'default',\n required: false\n },\n useCustomUrl: {\n type: String,\n default: 'false',\n required: false\n },\n customUrlPrefix: {\n type: String,\n default: '',\n required: false\n },\n autoRetry: {\n type: Boolean,\n default: true,\n required: false\n },\n urlPrefix: {\n type: String,\n default: '',\n required: false\n },\n uploadMethod: {\n type: String,\n default: 'default',\n required: false\n },\n uploadFolder: {\n type: String,\n default: '',\n required: false\n },\n convertToWebp: {\n type: Boolean,\n default: false,\n required: false\n }\n },\n data() {\n return {\n fileList: [],\n uploading: false,\n maxUploading: 6,\n exceptionList: [],\n listScrolled: false,\n fileListLength: 0,\n uploadCount: 0,\n pastedUrls: '',\n pasteUploadMethod: 'save',\n // 失败文件自动重试相关\n autoReUpload: true,\n maxRetryCount: 10,\n // 最大重试次数\n retryTimer: null,\n // 自动重试定时器\n retryDelay: 12000,\n // 重试延迟时间(毫秒)\n // 批量上传并发控制\n uploadQueue: [],\n // 等待上传的文件队列\n activeUploads: 0,\n // 当前正在上传的文件数\n maxConcurrentUploads: 6,\n // 最大并发上传数\n // 取消上传控制\n abortControllers: new Map() // 存储每个文件的 AbortController\n };\n },\n watch: {\n fileList: {\n handler() {\n if (this.fileList.length > this.fileListLength) {\n this.$nextTick(() => {\n setTimeout(() => {\n if (this.$refs.scrollContainer) {\n // this.$refs.scrollContainer.setScrollTop(this.$refs.scrollContainer.wrapRef.scrollHeight) // 滚动到底部\n this.$refs.scrollContainer.setScrollTop(0); // 滚动到顶部\n }\n }, 100);\n });\n }\n this.fileListLength = this.fileList.length;\n },\n deep: true\n },\n useCustomUrl: {\n handler() {\n updateFileListUrls(this.fileList, this.rootUrl);\n },\n immediate: true\n },\n customUrlPrefix: {\n handler() {\n if (this.useCustomUrl === 'true') {\n updateFileListUrls(this.fileList, this.rootUrl);\n }\n },\n immediate: true\n },\n autoReUpload(val) {\n this.$store.commit('setStoreAutoReUpload', val);\n }\n },\n computed: {\n ...mapGetters(['storeAutoReUpload']),\n uploadSuccessCount() {\n return this.fileList.filter(item => item.status === 'done' || item.status === 'success').length;\n },\n uploadErrorCount() {\n return this.fileList.filter(item => item.status === 'exception').length;\n },\n uploadingCount() {\n return this.fileList.filter(item => item.status === 'uploading').length;\n },\n waitingCount() {\n return this.uploadQueue.length;\n },\n urlSize() {\n // 移动端为small\n return window.innerWidth < 768 ? 'small' : 'default';\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n rootUrl() {\n // 链接前缀,优先级:用户自定义 > urlPrefix > 默认\n return this.useCustomUrl === 'true' ? this.customUrlPrefix : this.urlPrefix || `${window.location.protocol}//${window.location.host}/file/`;\n },\n pasteCardMethodButtonSize() {\n if (this.fileList.length) {\n return 'small';\n } else {\n return window.innerWidth < 768 ? 'small' : 'medium';\n }\n }\n },\n mounted() {\n document.addEventListener('paste', this.handlePaste);\n this.autoReUpload = this.storeAutoReUpload;\n },\n beforeUnmount() {\n document.removeEventListener('paste', this.handlePaste);\n // 清理状态\n this.uploadQueue = [];\n this.fileList = [];\n this.activeUploads = 0;\n },\n methods: {\n // 文件名中间截断,保留前缀和扩展名\n truncateFilename(filename, maxLength = 20) {\n if (!filename || filename.length <= maxLength) {\n return filename;\n }\n const lastDotIndex = filename.lastIndexOf('.');\n let name, ext;\n if (lastDotIndex > 0) {\n name = filename.substring(0, lastDotIndex);\n ext = filename.substring(lastDotIndex);\n } else {\n name = filename;\n ext = '';\n }\n // 保留扩展名和部分前后缀\n const keepEnd = ext.length + 4; // 扩展名 + 4个字符\n const keepStart = maxLength - keepEnd - 3; // 3个字符留给...\n if (keepStart <= 0) {\n return filename.substring(0, maxLength - 3) + '...';\n }\n return name.substring(0, keepStart) + '...' + name.slice(-4) + ext;\n },\n uploadFile(file) {\n // 如果fileList中不存在该文件,说明已被删除,直接返回\n if (!this.fileList.find(item => item.uid === file.file.uid)) {\n return;\n }\n\n // 并发控制:如果当前上传数已达上限,加入队列等待\n if (this.activeUploads >= this.maxConcurrentUploads) {\n this.uploadQueue.push(file);\n const waitingItem = this.fileList.find(item => item.uid === file.file.uid);\n if (waitingItem) waitingItem.status = 'waiting';\n return;\n }\n\n // 开始上传,增加计数\n this.activeUploads++;\n const uploadingItem = this.fileList.find(item => item.uid === file.file.uid);\n if (uploadingItem) uploadingItem.status = 'uploading';\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n const uploadChannel = fileItem?.uploadChannel || this.uploadChannel;\n\n // 如果上传渠道为外链,直接使用外链上传\n if (uploadChannel === 'external') {\n this.uploadSingleFile(file);\n return;\n }\n\n // HuggingFace 渠道:根据文件大小选择上传方式\n // 小文件(<20MB):通过 CF Workers 代理上传\n // 大文件(>=20MB):前端直传到 HuggingFace S3,绕过 CF Workers 限制\n if (uploadChannel === 'huggingface') {\n const HF_DIRECT_THRESHOLD = 20 * 1024 * 1024; // 20MB\n if (file.file.size >= HF_DIRECT_THRESHOLD) {\n this.uploadToHuggingFaceDirect(file);\n } else {\n this.uploadSingleFile(file);\n }\n return;\n }\n\n // Discord 渠道:限制 10MB,超过 9MB 就用分块上传(留安全余量)\n if (uploadChannel === 'discord') {\n const DISCORD_CHUNK_THRESHOLD = 9 * 1024 * 1024; // 9MB\n if (file.file.size > DISCORD_CHUNK_THRESHOLD) {\n this.uploadFileInChunks(file);\n } else {\n this.uploadSingleFile(file);\n }\n return;\n }\n\n // 其他渠道,检查文件大小,决定是否使用分块上传\n const CHUNK_THRESHOLD = 20 * 1024 * 1024; // 20MB\n if (file.file.size > CHUNK_THRESHOLD) {\n this.uploadFileInChunks(file);\n } else {\n this.uploadSingleFile(file);\n }\n },\n // 处理上传队列中的下一个文件\n processUploadQueue() {\n // 如果队列为空或已达并发上限,不处理\n if (this.uploadQueue.length === 0 || this.activeUploads >= this.maxConcurrentUploads) {\n return;\n }\n\n // 从队列中取出下一个文件并上传\n const nextFile = this.uploadQueue.shift();\n if (nextFile && this.fileList.find(item => item.uid === nextFile.file.uid)) {\n this.uploadFile(nextFile);\n } else {\n // 如果文件已被删除,继续处理下一个\n this.processUploadQueue();\n }\n },\n // 上传完成后的清理工作(成功或失败都调用)\n onUploadComplete() {\n this.activeUploads = Math.max(0, this.activeUploads - 1);\n\n // 处理队列中的下一个文件\n this.processUploadQueue();\n\n // 更新上传状态\n if (this.activeUploads === 0 && this.uploadQueue.length === 0) {\n this.uploading = false;\n }\n },\n // 单文件上传\n async uploadSingleFile(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return; // 文件已被删除\n\n const needServerCompress = fileItem.serverCompress;\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n const autoRetry = this.autoRetry && uploadChannel !== 'external';\n const uploadNameType = uploadChannel === 'external' ? 'default' : this.uploadNameType;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n const formData = new FormData();\n formData.append('file', file.file);\n if (uploadChannel === 'external') {\n formData.append('url', file.file.url);\n }\n\n // HuggingFace 渠道:在前端预计算 SHA256,避免后端 CPU 超时\n if (uploadChannel === 'huggingface') {\n try {\n console.log('Computing SHA256 for HuggingFace upload...');\n const sha256 = await computeSha256(file.file);\n formData.append('sha256', sha256);\n console.log('SHA256 computed:', sha256);\n } catch (err) {\n console.error('Failed to compute SHA256:', err);\n // 继续上传,让后端计算(可能会超时)\n }\n }\n axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder),\n method: 'post',\n data: formData,\n withAuthCode: true,\n signal: abortController.signal,\n // 添加取消信号\n onUploadProgress: progressEvent => {\n const percentCompleted = Math.round(progressEvent.loaded / progressEvent.total * 100);\n file.onProgress({\n percent: percentCompleted,\n file: file.file\n });\n }\n }).then(res => {\n file.onSuccess(res, file.file);\n }).catch(err => {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n console.log('上传已取消:', file.file.name);\n return;\n }\n if (err.response && err.response.status !== 401) {\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } else if (!err.response) {\n // 网络错误(如 ERR_HTTP2_PROTOCOL_ERROR),也加入异常列表\n this.exceptionList.push(file);\n file.onError(err, file.file);\n }\n }).finally(() => {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n });\n },\n // 分块上传\n async uploadFileInChunks(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return; // 文件已被删除\n\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n\n // Discord 使用 9MB 分块(留安全余量,Discord 限制 10MB)\n // Telegram 使用 16MB 分块(TG Bot getFile 下载限制 20MB,留 4MB 安全余量)\n // 其他渠道使用 16MB 分块\n const CHUNK_SIZE = uploadChannel === 'discord' ? 9 * 1024 * 1024 // 9MB for Discord\n : 16 * 1024 * 1024; // 16MB for Telegram and others (TG getFile limit: 20MB)\n\n const fileSize = file.file.size;\n const fileType = file.file.type || 'application/octet-stream';\n const totalChunks = Math.ceil(fileSize / CHUNK_SIZE);\n const needServerCompress = fileItem.serverCompress;\n const autoRetry = this.autoRetry && uploadChannel !== 'external';\n const uploadNameType = uploadChannel === 'external' ? 'default' : this.uploadNameType;\n\n // HuggingFace 渠道:在前端预计算 SHA256\n let precomputedSha256 = null;\n if (uploadChannel === 'huggingface') {\n try {\n console.log('Computing SHA256 for HuggingFace chunked upload...');\n precomputedSha256 = await computeSha256(file.file);\n console.log('SHA256 computed:', precomputedSha256);\n } catch (err) {\n console.error('Failed to compute SHA256:', err);\n }\n }\n try {\n // 第一步:初始化分块上传,获取uploadId\n const initFormData = new FormData();\n initFormData.append('originalFileName', file.file.name);\n initFormData.append('originalFileType', fileType);\n initFormData.append('totalChunks', totalChunks.toString());\n const initResponse = await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder) + '&initChunked=true',\n method: 'post',\n data: initFormData,\n withAuthCode: true\n });\n if (!initResponse.data.success) {\n throw new Error(this.$t('uploadForm.chunkInitFailed') + ': ' + initResponse.data.message);\n }\n const uploadId = initResponse.data.uploadId;\n console.log('分块上传初始化成功,uploadId:', uploadId);\n\n // 记录 totalChunks 和 uploadId 到文件项,用于后续清理\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (fileItem) {\n fileItem.totalChunks = totalChunks;\n fileItem.uploadId = uploadId;\n }\n\n // 第二步:并发上传所有分块\n const maxConcurrency = 3; // 最大并发数\n const chunkProgress = new Array(totalChunks).fill(0);\n let nextChunkIndex = 0;\n let hasError = false;\n let errorMsg = '';\n let isCancelled = false; // 标记是否被取消\n\n const uploadChunk = async chunkIndex => {\n if (hasError || isCancelled) return;\n const start = chunkIndex * CHUNK_SIZE;\n const end = Math.min(start + CHUNK_SIZE, fileSize);\n const chunk = file.file.slice(start, end);\n const formData = new FormData();\n formData.append('file', chunk, `${file.file.name}.part${chunkIndex.toString().padStart(3, '0')}`);\n formData.append('chunkIndex', chunkIndex.toString());\n formData.append('totalChunks', totalChunks.toString());\n formData.append('uploadId', uploadId);\n formData.append('originalFileName', file.file.name);\n formData.append('originalFileType', fileType);\n let retryCount = 0;\n const maxRetries = 3;\n while (retryCount < maxRetries) {\n if (hasError || isCancelled) return;\n try {\n await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder) + '&chunked=true',\n method: 'post',\n data: formData,\n withAuthCode: true,\n signal: abortController.signal,\n // 添加取消信号\n onUploadProgress: progressEvent => {\n if (hasError || isCancelled) return;\n const percent = Math.round(progressEvent.loaded / progressEvent.total * 100);\n chunkProgress[chunkIndex] = percent;\n const totalPercent = Math.round(chunkProgress.reduce((a, b) => a + b, 0) / totalChunks);\n file.onProgress({\n percent: totalPercent,\n file: file.file\n });\n }\n });\n return; // Success\n } catch (err) {\n // 如果是取消操作,直接返回\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n isCancelled = true;\n console.log('分块上传已取消:', file.file.name);\n return;\n }\n retryCount++;\n console.warn(`分块 ${chunkIndex + 1}/${totalChunks} 上传失败 (重试 ${retryCount}/${maxRetries}):`, err);\n if (retryCount >= maxRetries) {\n hasError = true;\n errorMsg = `分块 ${chunkIndex + 1}/${totalChunks} 上传失败: ${err.message}`;\n throw new Error(errorMsg);\n }\n // 等待后重试\n await new Promise(resolve => setTimeout(resolve, 2000 * retryCount));\n }\n }\n };\n\n // 创建并发池\n const pool = [];\n for (let i = 0; i < maxConcurrency; i++) {\n pool.push((async () => {\n while (nextChunkIndex < totalChunks && !hasError && !isCancelled) {\n const currentIndex = nextChunkIndex++;\n try {\n await uploadChunk(currentIndex);\n } catch (e) {\n if (!isCancelled) {\n hasError = true;\n errorMsg = e.message;\n }\n break;\n }\n }\n })());\n }\n await Promise.all(pool);\n\n // 如果被取消,直接返回\n if (isCancelled) {\n console.log('分块上传已取消,跳过合并步骤');\n return;\n }\n if (hasError) {\n throw new Error(errorMsg || this.$t('uploadForm.uploadError'));\n }\n\n // 第三步:所有分块上传完成,发送合并请求\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.chunkMerging'),\n duration: 0 // 不自动关闭\n });\n const mergeFormData = new FormData();\n mergeFormData.append('uploadId', uploadId);\n mergeFormData.append('totalChunks', totalChunks.toString());\n mergeFormData.append('originalFileName', file.file.name);\n mergeFormData.append('originalFileType', fileType);\n // HuggingFace 渠道:传递预计算的 SHA256\n if (precomputedSha256) {\n mergeFormData.append('sha256', precomputedSha256);\n }\n const response = await axios({\n url: '/upload' + '?serverCompress=' + needServerCompress + '&uploadChannel=' + uploadChannel + (this.channelName ? '&channelName=' + encodeURIComponent(this.channelName) : '') + '&uploadNameType=' + uploadNameType + '&autoRetry=' + autoRetry + '&uploadFolder=' + encodeURIComponent(this.uploadFolder) + '&chunked=true&merge=true',\n method: 'post',\n data: mergeFormData,\n withAuthCode: true\n });\n\n // 关闭提示\n this.$message.closeAll();\n\n // 同步处理完成\n file.onSuccess(response, file.file);\n } catch (err) {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED') {\n console.log('分块上传已取消:', file.file.name);\n return;\n }\n console.error('分块上传失败:', err);\n\n // 如果有uploadId,清理相关资源\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (fileItem && fileItem.uploadId) {\n this.cleanupUploadResources(fileItem.uploadId, fileItem.totalChunks).then(() => {\n console.log(`已清理分块上传失败的资源: ${fileItem.uploadId}`);\n }).catch(cleanupError => {\n console.warn('清理分块上传失败资源时出错:', cleanupError);\n });\n }\n if (err.response && err.response.status !== 401) {\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } else if (!err.response) {\n // 网络错误,也加入异常列表\n this.exceptionList.push(file);\n file.onError(err, file.file);\n }\n } finally {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n }\n },\n handleRemove(file) {\n // 如果文件正在上传,取消上传\n if (this.abortControllers.has(file.uid)) {\n this.abortControllers.get(file.uid).abort();\n this.abortControllers.delete(file.uid);\n }\n // 从上传队列中移除(如果在等待中)\n this.uploadQueue = this.uploadQueue.filter(item => item.file.uid !== file.uid);\n // 从文件列表中移除\n this.fileList = this.fileList.filter(item => item.uid !== file.uid);\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.deleted', {\n name: this.truncateFilename(file.name)\n })\n });\n },\n // 清理上传资源\n async cleanupUploadResources(uploadId, totalChunks = 0) {\n try {\n await axios({\n url: `/upload?cleanup=true&uploadId=${uploadId}&totalChunks=${totalChunks}`,\n method: 'get',\n withAuthCode: true,\n timeout: 5000\n });\n console.log(`清理上传资源成功: ${uploadId}`);\n } catch (error) {\n console.warn('清理上传资源失败:', error);\n }\n },\n handleSuccess(response, file) {\n const fileItem = this.fileList.find(item => item.uid === file.uid);\n if (!fileItem) return; // 文件已被删除\n\n try {\n // 对上传渠道为外链的,不修改链接\n const uploadChannel = fileItem.uploadChannel || this.uploadChannel;\n if (uploadChannel !== 'external') {\n // 从response.data[0].src中去除/file/前缀\n const srcID = response.data[0].src.replace('/file/', '');\n fileItem.url = `${window.location.protocol}//${window.location.host}/file/` + srcID;\n const urls = buildFileUrls(srcID, file.name, this.rootUrl);\n Object.assign(fileItem, urls);\n fileItem.srcID = srcID;\n }\n fileItem.progreess = 100;\n fileItem.status = 'success';\n\n // Save to history\n this.saveToHistory(fileItem);\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.uploadSuccess', {\n name: this.truncateFilename(file.name)\n })\n });\n setTimeout(() => {\n const item = this.fileList.find(item => item.uid === file.uid);\n if (item) item.status = 'done';\n }, 1000);\n } catch (error) {\n this.$message.error(this.$t('uploadForm.uploadFailed', {\n name: this.truncateFilename(file.name)\n }));\n fileItem.status = 'exception';\n }\n // 注意:并发控制的 onUploadComplete 已在各上传方法的 finally 中调用\n },\n saveToHistory(fileItem) {\n try {\n const history = JSON.parse(localStorage.getItem('uploadHistory') || '[]');\n const newRecord = {\n name: fileItem.name,\n url: fileItem.finalURL,\n time: Date.now(),\n type: fileItem.name.split('.').pop().toLowerCase()\n };\n history.push(newRecord);\n localStorage.setItem('uploadHistory', JSON.stringify(history));\n } catch (e) {\n console.error('Failed to save history', e);\n }\n },\n handleError(err, file) {\n const fileItem = this.fileList.find(item => item.uid === file.uid);\n if (!fileItem) return; // 文件已被删除\n\n this.$message.error(this.$t('uploadForm.uploadFailed', {\n name: this.truncateFilename(file.name)\n }));\n fileItem.status = 'exception';\n\n // 如果开启了自动重试,安排自动重试\n if (this.autoReUpload) {\n this.scheduleAutoRetry();\n }\n // 注意:并发控制的 onUploadComplete 已在各上传方法的 finally 中调用\n },\n handleCopy(file) {\n const status = this.fileList.find(item => item.uid === file.uid).status;\n if (status !== 'done' && status !== 'success') {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.fileNotUploaded')\n });\n return;\n }\n navigator.clipboard.writeText(getUrlByFormat(file, this.selectedUrlForm));\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copySuccess')\n });\n },\n beforeUpload(file) {\n return new Promise(async (resolve, reject) => {\n let processedFile = file;\n\n // WebP 转换:在压缩之前进行\n // 条件:1.开启WebP转换 2.文件类型为图片 3.不是WebP/GIF/SVG格式\n const canConvertToWebp = this.convertToWebp && file.type.includes('image') && !file.type.includes('webp') && !file.type.includes('gif') && !file.type.includes('svg');\n if (canConvertToWebp) {\n try {\n const convertedFile = await this.convertImageToWebp(file);\n if (convertedFile) {\n processedFile = convertedFile;\n console.log(`WebP转换成功: ${file.name} -> ${convertedFile.name}, 大小: ${(file.size / 1024).toFixed(1)}KB -> ${(convertedFile.size / 1024).toFixed(1)}KB`);\n }\n } catch (err) {\n console.warn('WebP转换失败,使用原文件:', err);\n // 转换失败,继续使用原文件\n }\n }\n\n // 客户端压缩条件:1.文件类型为图片 2.开启客户端压缩,且文件大小大于压缩阈值\n const needCustomCompress = processedFile.type.includes('image') && this.customerCompress && processedFile.size / 1024 / 1024 > this.compressBar;\n const isLtLim = processedFile.size / 1024 / 1024 <= 1024 || this.uploadChannel !== 'telegram';\n const pushFileToQueue = (file, serverCompress) => {\n const fileUrl = URL.createObjectURL(file);\n this.fileList.push({\n uid: file.uid,\n name: file.name,\n url: fileUrl,\n finalURL: '',\n mdURL: '',\n htmlURL: '',\n ubbURL: '',\n srcID: '',\n status: 'uploading',\n progreess: 0,\n serverCompress: serverCompress,\n retryCount: 0\n });\n resolve(file);\n };\n if (needCustomCompress) {\n //尝试压缩图片\n imageConversion.compressAccurately(processedFile, 1024 * this.compressQuality).then(res => {\n //如果压缩后大于1024MB,且上传渠道为telegram,则不上传\n if (res.size / 1024 / 1024 > 1024 && this.uploadChannel === 'telegram') {\n this.$message.error(this.$t('uploadForm.compressedFileTooLarge', {\n name: processedFile.name\n }));\n reject(this.$t('uploadForm.fileSizeTooLarge'));\n }\n this.uploading = true;\n //将res包装成新的file\n const newFile = new File([res], processedFile.name, {\n type: res.type\n });\n newFile.uid = file.uid;\n const myUploadCount = this.uploadCount++;\n\n //开启服务端压缩条件:1.开启服务端压缩 2.文件大小小于10MB 3.上传渠道为Telegram\n const needServerCompress = this.serverCompress && newFile.size / 1024 / 1024 < 10 && this.uploadChannel === 'telegram';\n if (myUploadCount === 0) {\n pushFileToQueue(newFile, needServerCompress);\n } else {\n setTimeout(() => {\n pushFileToQueue(newFile, needServerCompress);\n this.uploadCount--;\n }, 300 * myUploadCount);\n }\n }).catch(err => {\n this.$message.error(this.$t('uploadForm.compressFailedCannotUpload', {\n name: processedFile.name\n }));\n reject(err);\n });\n } else if (isLtLim) {\n this.uploading = true;\n const myUploadCount = this.uploadCount++;\n\n // 开启服务端压缩条件:1.上传渠道为Telegram 2.开启服务端压缩 3.如果为图片,则文件大小小于10MB,否则不限制大小\n const needServerCompress = this.uploadChannel === 'telegram' && this.serverCompress && (processedFile.type.includes('image') ? processedFile.size / 1024 / 1024 < 10 : true);\n if (myUploadCount === 0) {\n pushFileToQueue(processedFile, needServerCompress);\n } else {\n setTimeout(() => {\n pushFileToQueue(processedFile, needServerCompress);\n this.uploadCount--;\n }, 300 * myUploadCount);\n }\n } else {\n this.$message.error(this.$t('uploadForm.fileTooLarge', {\n name: processedFile.name\n }));\n reject(this.$t('uploadForm.fileSizeTooLarge'));\n }\n });\n },\n handleProgress(event) {\n const fileItem = this.fileList.find(item => item.uid === event.file.uid);\n if (fileItem) {\n fileItem.progreess = event.percent;\n }\n },\n copyAll() {\n const urls = this.fileList.filter(item => item.status === 'done' || item.status === 'success').map(item => getUrlByFormat(item, this.selectedUrlForm)).join('\\n');\n navigator.clipboard.writeText(urls);\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.copyAllSuccess')\n });\n },\n clearFileList() {\n if (this.fileList.length > 0) {\n // 取消所有正在上传的文件\n this.abortControllers.forEach((controller, uid) => {\n controller.abort();\n });\n this.abortControllers.clear();\n // 清空上传队列\n this.uploadQueue = [];\n // 清空文件列表\n this.fileList = [];\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.fileListCleared')\n });\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.fileListEmpty')\n });\n }\n },\n clearSuccessList() {\n if (this.uploadSuccessCount > 0) {\n this.fileList = this.fileList.filter(item => item.status !== 'done' && item.status !== 'success');\n this.$message({\n type: 'success',\n message: this.$t('uploadForm.successFilesCleared')\n });\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.successFilesEmpty')\n });\n }\n },\n handlePaste(event) {\n // 当粘贴位置是文本框时,不执行该操作\n if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') {\n return;\n }\n const items = event.clipboardData.items;\n if (items.length > 0) {\n this.uploadFromUrl(items);\n }\n },\n handleUploadPasteUrls() {\n // 用于上传在上传文本框中粘贴的外链\n const urls = this.pastedUrls.split('\\n');\n // 处理空行和首尾空字符,链接须符合URL规范\n const validUrls = urls.map(url => url.trim()).filter(url => url !== '').filter(url => /^(https?:\\/\\/[^\\s$.?#].[^\\s]*)$/.test(url));\n\n // 根据粘贴上传方式进行上传\n if (this.pasteUploadMethod === 'save') {\n // 正常上传\n this.uploadFromUrl(validUrls.map(url => {\n return {\n kind: 'string',\n getAsString: callback => {\n callback(url);\n }\n };\n }));\n } else if (this.pasteUploadMethod === 'external') {\n // 仅保存外链,使用 external 渠道上传\n for (let i = 0; i < validUrls.length; i++) {\n const url = validUrls[i];\n const fileName = url.split('/').pop();\n const mdUrl = `![${fileName}](${url})`;\n const htmlUrl = `\"${fileName}\"`;\n const ubbUrl = `[img]${url}[/img]`;\n // 将 url 作为文件内容,文件名为 URL 的最后一部分\n const file = new File([], url.split('/').pop(), {\n type: 'text/plain'\n });\n file.uid = Date.now() + i;\n file.url = url;\n this.fileList.push({\n uid: file.uid,\n name: file.name,\n url: url,\n finalURL: url,\n mdURL: mdUrl,\n htmlURL: htmlUrl,\n ubbURL: ubbUrl,\n srcID: url,\n status: 'uploading',\n progreess: 0,\n serverCompress: false,\n uploadChannel: 'external',\n retryCount: 0\n });\n // 上传\n this.uploadFile({\n file: file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }\n },\n uploadFromUrl(items) {\n for (let i = 0; i < items.length; i++) {\n if (items[i].kind === 'file') {\n const file = items[i].getAsFile();\n // 允许上传任意类型的文件\n file.uid = Date.now() + i;\n //接收beforeUpload的Promise对象\n const checkResult = this.beforeUpload(file);\n if (checkResult instanceof Promise) {\n checkResult.then(newFile => {\n if (newFile instanceof File) {\n this.uploadFile({\n file: newFile,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }).catch(err => {\n console.log(err);\n });\n }\n } else if (items[i].kind === 'string') {\n items[i].getAsString(text => {\n const urlPattern = /^(https?:\\/\\/[^\\s$.?#].[^\\s]*)$/;\n let fileName = '';\n if (urlPattern.test(text)) {\n axios.post('/api/fetchRes', {\n url: text\n }, {\n responseType: 'blob',\n withAuthCode: true\n }).then(response => {\n const contentType = response.headers['content-type'];\n if (response.status == 200) {\n // 提取文件名\n const disposition = response.headers['content-disposition'];\n if (disposition) {\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n const filenameStarRegex = /filename\\*\\s*=\\s*UTF-8''([^;\\n]*)/; // 处理 filename*\n\n let matches = filenameRegex.exec(disposition);\n if (matches != null && matches[1]) {\n fileName = matches[1].replace(/['\"]/g, '');\n // 尝试解码\n try {\n fileName = decodeURIComponent(fileName);\n } catch (e) {\n fileName = '';\n }\n }\n if (fileName === '') {\n matches = filenameStarRegex.exec(disposition); // 尝试匹配 filename*\n if (matches != null && matches[1]) {\n fileName = decodeURIComponent(matches[1]);\n }\n }\n }\n // 尝试从URL中提取文件名\n if (fileName === '') {\n const url = new URL(text);\n fileName = url.pathname.split('/').pop();\n }\n // 未提取到文件名,使用默认文件名\n if (fileName === '') {\n // 获取文件后缀\n const url = new URL(text);\n let extension = url.pathname.split('.').pop();\n // 未能从URL提取有效后缀,使用bin作为默认后缀\n if (!extension || extension === '' || extension.length > 10) {\n extension = 'bin';\n }\n fileName = 'PastedFile' + Date.now() + i + '.' + extension;\n }\n\n // 读取文件内容\n const blob = response.data;\n const file = new File([blob], fileName, {\n type: blob.type\n });\n file.uid = Date.now() + i;\n // 接收beforeUpload的Promise对象\n const checkResult = this.beforeUpload(file);\n if (checkResult instanceof Promise) {\n checkResult.then(newFile => {\n if (newFile instanceof File) {\n this.uploadFile({\n file: newFile,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n }\n }).catch(err => {\n console.log(err);\n });\n }\n } else {\n throw new Error('URL地址请求失败');\n }\n }).catch(error => {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.urlRequestFailed')\n });\n });\n }\n });\n }\n }\n },\n handleScroll(event) {\n this.listScrolled = event.scrollTop > 0 && this.fileList.length > 0;\n },\n retryError() {\n if (this.exceptionList.length > 0) {\n this.retryFailedFiles(this.exceptionList);\n this.exceptionList = [];\n } else {\n this.$message({\n type: 'info',\n message: this.$t('uploadForm.noFailedFiles')\n });\n }\n },\n handleAutoRetryChange(val) {\n this.$message({\n type: val ? 'success' : 'info',\n message: val ? this.$t('uploadForm.autoRetryOn') : this.$t('uploadForm.autoRetryOff')\n });\n\n // 如果开启自动重试且有失败文件,立即开始重试\n if (val && this.exceptionList.length > 0) {\n this.scheduleAutoRetry();\n }\n },\n retryFailedFiles(files) {\n files.forEach(file => {\n const retryCount = file.retryCount || 0;\n if (retryCount < this.maxRetryCount) {\n file.retryCount = retryCount + 1;\n this.uploadFile({\n file: file.file,\n onProgress: evt => this.handleProgress(evt),\n onSuccess: (response, file) => this.handleSuccess(response, file),\n onError: (error, file) => this.handleError(error, file)\n });\n } else {\n this.$message({\n type: 'warning',\n message: this.$t('uploadForm.maxRetryReached', {\n name: file.name,\n max: this.maxRetryCount\n })\n });\n }\n });\n },\n scheduleAutoRetry() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n this.retryTimer = setTimeout(() => {\n if (this.autoReUpload && this.exceptionList.length > 0) {\n const filesToRetry = [...this.exceptionList];\n this.exceptionList = [];\n this.retryFailedFiles(filesToRetry);\n }\n }, this.retryDelay);\n },\n // HuggingFace 大文件直传(绕过 CF Workers 限制)\n // 流程:前端计算 SHA256 → 获取 S3 上传 URL → 直传到 S3 → 提交文件引用\n async uploadToHuggingFaceDirect(file) {\n const fileItem = this.fileList.find(item => item.uid === file.file.uid);\n if (!fileItem) return;\n\n // 创建 AbortController 用于取消上传\n const abortController = new AbortController();\n this.abortControllers.set(file.file.uid, abortController);\n try {\n console.log('=== HuggingFace Direct Upload ===');\n console.log('File:', file.file.name, 'Size:', file.file.size);\n\n // 1. 计算 SHA256\n file.onProgress({\n percent: 5,\n file: file.file\n });\n console.log('Computing SHA256...');\n const sha256 = await computeSha256(file.file);\n console.log('SHA256:', sha256);\n\n // 检查是否已取消\n if (abortController.signal.aborted) {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n\n // 2. 获取文件样本(前512字节的base64)\n const sampleBytes = new Uint8Array(await file.file.slice(0, 512).arrayBuffer());\n const fileSample = btoa(String.fromCharCode(...sampleBytes));\n\n // 3. 获取 LFS 上传 URL\n file.onProgress({\n percent: 10,\n file: file.file\n });\n console.log('Getting LFS upload URL...');\n const uploadInfoRes = await axios({\n url: '/upload/huggingface/getUploadUrl',\n method: 'post',\n data: {\n fileSize: file.file.size,\n fileName: file.file.name,\n fileType: file.file.type,\n sha256,\n fileSample,\n channelName: this.channelName,\n // 传递指定的渠道名称\n uploadNameType: this.uploadNameType,\n uploadFolder: this.uploadFolder\n },\n withAuthCode: true,\n signal: abortController.signal\n });\n if (!uploadInfoRes.data.success) {\n throw new Error(uploadInfoRes.data.error || 'Failed to get upload URL');\n }\n const uploadInfo = uploadInfoRes.data;\n console.log('Upload info:', uploadInfo);\n\n // 检查文件是否已存在\n if (uploadInfo.alreadyExists) {\n console.log('File already exists in LFS, skipping upload');\n file.onProgress({\n percent: 90,\n file: file.file\n });\n } else if (uploadInfo.needsLfs && uploadInfo.uploadAction) {\n // 4. 直接上传到 S3\n const {\n href,\n header\n } = uploadInfo.uploadAction;\n if (header?.chunk_size) {\n // 分片上传\n await this.uploadToHuggingFaceMultipart(file, uploadInfo, abortController);\n } else {\n // 基本上传\n console.log('Uploading to S3 (basic)...');\n const uploadRes = await fetch(href, {\n method: 'PUT',\n headers: header || {},\n body: file.file,\n signal: abortController.signal\n });\n if (!uploadRes.ok) {\n const error = await uploadRes.text();\n throw new Error(`S3 upload failed: ${uploadRes.status} - ${error}`);\n }\n console.log('S3 upload complete');\n }\n }\n\n // 检查是否已取消\n if (abortController.signal.aborted) {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n\n // 5. 提交文件引用\n file.onProgress({\n percent: 95,\n file: file.file\n });\n console.log('Committing file...');\n const commitRes = await axios({\n url: '/upload/huggingface/commitUpload',\n method: 'post',\n data: {\n fullId: uploadInfo.fullId,\n filePath: uploadInfo.filePath,\n sha256,\n fileSize: file.file.size,\n fileName: file.file.name,\n fileType: file.file.type,\n channelName: uploadInfo.channelName\n },\n withAuthCode: true,\n signal: abortController.signal\n });\n if (!commitRes.data.success) {\n throw new Error(commitRes.data.error || 'Failed to commit file');\n }\n console.log('Upload complete:', commitRes.data);\n // 转换响应格式以匹配 handleSuccess 期望的格式\n const formattedResponse = {\n data: [{\n src: commitRes.data.src\n }]\n };\n file.onSuccess(formattedResponse, file.file);\n } catch (err) {\n // 如果是取消操作,不加入异常列表\n if (err.name === 'CanceledError' || err.code === 'ERR_CANCELED' || err.name === 'AbortError') {\n console.log('HuggingFace 上传已取消:', file.file.name);\n return;\n }\n console.error('HuggingFace direct upload error:', err);\n this.exceptionList.push(file);\n file.onError(err, file.file);\n } finally {\n // 清理 AbortController\n this.abortControllers.delete(file.file.uid);\n // 调用并发控制的完成回调\n this.onUploadComplete();\n }\n },\n // HuggingFace 分片上传到 S3\n async uploadToHuggingFaceMultipart(file, uploadInfo, abortController) {\n const {\n uploadAction\n } = uploadInfo;\n const {\n href: completionUrl,\n header\n } = uploadAction;\n const chunkSize = parseInt(header.chunk_size);\n\n // 获取所有分片的上传 URL\n const parts = Object.keys(header).filter(key => /^[0-9]+$/.test(key));\n console.log(`Multipart upload: ${parts.length} parts, chunk size: ${chunkSize}`);\n const completeParts = [];\n const totalParts = parts.length;\n for (const part of parts) {\n // 检查是否已取消\n if (abortController && abortController.signal.aborted) {\n console.log('HuggingFace 分片上传已取消');\n throw new DOMException('Upload cancelled', 'AbortError');\n }\n const index = parseInt(part) - 1;\n const start = index * chunkSize;\n const end = Math.min(start + chunkSize, file.file.size);\n const chunk = file.file.slice(start, end);\n console.log(`Uploading part ${part}/${totalParts}`);\n const response = await fetch(header[part], {\n method: 'PUT',\n body: chunk,\n signal: abortController ? abortController.signal : undefined\n });\n if (!response.ok) {\n throw new Error(`Failed to upload part ${part}: ${response.status}`);\n }\n const etag = response.headers.get('ETag');\n if (!etag) {\n throw new Error(`No ETag for part ${part}`);\n }\n completeParts.push({\n partNumber: parseInt(part),\n etag\n });\n\n // 更新进度(10% - 90%)\n const progress = 10 + Math.round(parseInt(part) / totalParts * 80);\n file.onProgress({\n percent: progress,\n file: file.file\n });\n }\n\n // 检查是否已取消\n if (abortController && abortController.signal.aborted) {\n console.log('HuggingFace 分片上传已取消');\n throw new DOMException('Upload cancelled', 'AbortError');\n }\n\n // 完成分片上传\n console.log('Completing multipart upload...');\n const completeResponse = await fetch(completionUrl, {\n method: 'POST',\n headers: {\n 'Accept': 'application/vnd.git-lfs+json',\n 'Content-Type': 'application/vnd.git-lfs+json'\n },\n body: JSON.stringify({\n oid: uploadInfo.oid,\n parts: completeParts\n }),\n signal: abortController ? abortController.signal : undefined\n });\n if (!completeResponse.ok) {\n const error = await completeResponse.text();\n throw new Error(`Multipart complete failed: ${completeResponse.status} - ${error}`);\n }\n console.log('Multipart upload complete');\n },\n // 将图片转换为 WebP 格式\n async convertImageToWebp(file) {\n return new Promise((resolve, reject) => {\n // 不支持转换的格式直接返回 null\n if (file.type.includes('gif') || file.type.includes('svg') || file.type.includes('webp')) {\n resolve(null);\n return;\n }\n const img = new Image();\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n img.onload = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n canvas.toBlob(blob => {\n if (blob) {\n // 修改文件名:将原扩展名替换为 .webp\n const originalName = file.name;\n const lastDotIndex = originalName.lastIndexOf('.');\n const newName = lastDotIndex > 0 ? originalName.substring(0, lastDotIndex) + '.webp' : originalName + '.webp';\n const webpFile = new File([blob], newName, {\n type: 'image/webp'\n });\n webpFile.uid = file.uid;\n resolve(webpFile);\n } else {\n reject(new Error('WebP 转换失败'));\n }\n\n // 清理\n URL.revokeObjectURL(img.src);\n }, 'image/webp', 0.92); // 0.92 质量参数,平衡质量和大小\n };\n img.onerror = () => {\n URL.revokeObjectURL(img.src);\n reject(new Error(this.$t('uploadForm.imageLoadFailed')));\n };\n img.src = URL.createObjectURL(file);\n });\n },\n // 拖拽上传卡片鼠标移动事件 - 悬浮光斑效果\n handleUploadCardMouseMove(e) {\n const glow = this.$refs.uploadCardGlow;\n if (!glow) return;\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n glow.style.opacity = '1';\n glow.style.left = x + 'px';\n glow.style.top = y + 'px';\n },\n // 拖拽上传卡片鼠标离开事件\n handleUploadCardMouseLeave() {\n const glow = this.$refs.uploadCardGlow;\n if (!glow) return;\n glow.style.opacity = '0';\n }\n },\n beforeDestroy() {\n // 清理定时器\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadForm.vue?vue&type=template&id=fe1ea9cc&scoped=true\"\nimport script from \"./UploadForm.vue?vue&type=script&lang=js\"\nexport * from \"./UploadForm.vue?vue&type=script&lang=js\"\n\nimport \"./UploadForm.vue?vue&type=style&index=0&id=fe1ea9cc&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-fe1ea9cc\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createElementVNode as _createElementVNode, vShow as _vShow, withDirectives as _withDirectives } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-suggestion-input\",\n ref: \"wrapperRef\"\n};\nconst _hoisted_2 = {\n class: \"suggestion-dropdown\"\n};\nconst _hoisted_3 = {\n class: \"suggestion-list\"\n};\nconst _hoisted_4 = [\"title\", \"onMousedown\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_el_input = _resolveComponent(\"el-input\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createVNode(_component_el_input, {\n ref: \"inputRef\",\n modelValue: $options.inputValue,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $options.inputValue = $event),\n placeholder: $props.placeholder,\n onFocus: $options.handleFocus,\n onBlur: $options.handleBlur,\n onInput: $options.handleInput\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\", \"onInput\"]), _withDirectives(_createElementVNode(\"div\", _hoisted_2, [_createElementVNode(\"ul\", _hoisted_3, [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.suggestions, (item, index) => {\n return _openBlock(), _createElementBlock(\"li\", {\n key: index,\n class: \"suggestion-item\",\n title: item.value,\n onMousedown: _withModifiers($event => $options.selectItem(item), [\"prevent\"])\n }, _toDisplayString(item.value), 41, _hoisted_4);\n }), 128))])], 512), [[_vShow, $data.dropdownVisible && $data.suggestions.length > 0]])], 512);\n}","import \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.filter.js\";\nimport \"core-js/modules/es.iterator.for-each.js\";\nimport \"core-js/modules/es.iterator.map.js\";\nimport axios from '@/utils/axios';\nexport default {\n name: 'DirectorySuggestionInput',\n props: {\n modelValue: {\n type: String,\n default: ''\n },\n placeholder: {\n type: String,\n default: ''\n }\n },\n emits: ['update:modelValue', 'focus', 'blur', 'select'],\n data() {\n return {\n directoryTreeRoot: null,\n directoryTreeLoaded: false,\n directoryTreeLoading: false,\n directoryChildrenMap: {},\n focusTime: null,\n dropdownVisible: false,\n isFocused: false,\n suggestions: []\n };\n },\n computed: {\n inputValue: {\n get() {\n return this.modelValue;\n },\n set(val) {\n this.$emit('update:modelValue', val);\n }\n }\n },\n watch: {\n modelValue() {\n // 外部修改 modelValue 时也刷新建议\n if (this.isFocused) {\n this.refreshSuggestions();\n }\n }\n },\n methods: {\n handleFocus() {\n this.isFocused = true;\n this.focusTime = Date.now();\n this.ensureDirectoryTreeLoaded();\n this.$emit('focus');\n setTimeout(() => {\n if (this.isFocused) {\n this.refreshSuggestions();\n this.dropdownVisible = true;\n }\n }, 500);\n },\n handleBlur() {\n this.isFocused = false;\n this.dropdownVisible = false;\n this.$emit('blur');\n },\n handleInput(val) {\n // val 是 el-input @input 事件传来的最新值\n this.$nextTick(() => {\n this.refreshSuggestions();\n if (this.isFocused) {\n this.dropdownVisible = true;\n }\n });\n },\n selectItem(item) {\n const path = item.value;\n this.inputValue = path;\n this.$emit('select', path);\n const normalizedPath = this.normalizeDirectoryPath(path);\n const children = this.directoryChildrenMap[normalizedPath];\n if (children && children.length > 0) {\n this.$nextTick(() => {\n this.refreshSuggestions();\n this.dropdownVisible = true;\n this.$refs.inputRef?.focus();\n });\n } else {\n this.dropdownVisible = false;\n }\n },\n refreshSuggestions() {\n this.suggestions = this.getDirectorySuggestions(this.modelValue || '');\n },\n normalizeDirectoryPath(path) {\n if (!path) return '/';\n let normalized = path;\n if (!normalized.startsWith('/')) normalized = '/' + normalized;\n if (normalized !== '/' && !normalized.endsWith('/')) normalized += '/';\n return normalized;\n },\n buildDirectoryChildrenMap(treeRoot) {\n const map = {};\n const walk = node => {\n const parentPath = this.normalizeDirectoryPath(node.path);\n const children = Array.isArray(node.children) ? node.children : [];\n map[parentPath] = children.map(child => ({\n name: child.name,\n path: this.normalizeDirectoryPath(child.path)\n }));\n children.forEach(walk);\n };\n walk(treeRoot);\n this.directoryChildrenMap = map;\n },\n async ensureDirectoryTreeLoaded() {\n if (this.directoryTreeLoaded || this.directoryTreeLoading) return;\n this.directoryTreeLoading = true;\n try {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n const tree = response?.data?.tree;\n if (tree) {\n this.directoryTreeRoot = tree;\n this.buildDirectoryChildrenMap(tree);\n this.directoryTreeLoaded = true;\n }\n } catch (error) {\n console.error('Failed to load directory tree for autocomplete:', error);\n } finally {\n this.directoryTreeLoading = false;\n }\n },\n parseDirectoryQuery(value) {\n const normalizedInput = value && value.startsWith('/') ? value : `/${value || ''}`;\n const raw = normalizedInput.slice(1);\n const parts = raw.split('/');\n const segmentInput = parts[parts.length - 1] || '';\n const parentSegments = parts.slice(0, -1).filter(Boolean);\n const parentPath = parentSegments.length > 0 ? `/${parentSegments.join('/')}/` : '/';\n return {\n segmentInput,\n parentPath\n };\n },\n getDirectorySuggestions(queryString) {\n const {\n segmentInput,\n parentPath\n } = this.parseDirectoryQuery(queryString);\n const parentChildren = this.directoryChildrenMap[parentPath] || [];\n if (!segmentInput) {\n return parentChildren.slice(0, 10).map(item => ({\n value: item.path\n }));\n }\n const keyword = segmentInput.toLowerCase();\n return parentChildren.filter(item => item.name.toLowerCase().startsWith(keyword)).slice(0, 10).map(item => ({\n value: item.path\n }));\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectorySuggestionInput.vue?vue&type=template&id=28b8eda7&scoped=true\"\nimport script from \"./DirectorySuggestionInput.vue?vue&type=script&lang=js\"\nexport * from \"./DirectorySuggestionInput.vue?vue&type=script&lang=js\"\n\nimport \"./DirectorySuggestionInput.vue?vue&type=style&index=0&id=28b8eda7&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-28b8eda7\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"upload-home\"\n};\nconst _hoisted_3 = {\n class: \"quick-toolbar-actions\"\n};\nconst _hoisted_4 = {\n class: \"quick-toolbar-actions-inner\"\n};\nconst _hoisted_5 = {\n class: \"header\"\n};\nconst _hoisted_6 = {\n class: \"title\"\n};\nconst _hoisted_7 = {\n class: \"title-crayon-text\",\n \"aria-hidden\": \"true\"\n};\nconst _hoisted_8 = {\n class: \"main-title\",\n href: \"https://github.com/MarSeventh/CloudFlare-ImgBed\",\n target: \"_blank\"\n};\nconst _hoisted_9 = {\n class: \"dialog-section\"\n};\nconst _hoisted_10 = {\n class: \"section-header\"\n};\nconst _hoisted_11 = {\n class: \"section-title\"\n};\nconst _hoisted_12 = {\n class: \"section-content\"\n};\nconst _hoisted_13 = {\n class: \"dialog-section\"\n};\nconst _hoisted_14 = {\n class: \"section-header\"\n};\nconst _hoisted_15 = {\n class: \"section-title\"\n};\nconst _hoisted_16 = {\n class: \"section-content\"\n};\nconst _hoisted_17 = {\n class: \"setting-item\"\n};\nconst _hoisted_18 = {\n class: \"setting-label\"\n};\nconst _hoisted_19 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_20 = {\n class: \"setting-label\"\n};\nconst _hoisted_21 = {\n class: \"dialog-action\"\n};\nconst _hoisted_22 = [\"innerHTML\"];\nconst _hoisted_23 = {\n class: \"dialog-footer\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_ToggleDark = _resolveComponent(\"ToggleDark\");\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_dropdown_item = _resolveComponent(\"el-dropdown-item\");\n const _component_el_dropdown_menu = _resolveComponent(\"el-dropdown-menu\");\n const _component_el_dropdown = _resolveComponent(\"el-dropdown\");\n const _component_DirectorySuggestionInput = _resolveComponent(\"DirectorySuggestionInput\");\n const _component_el_input = _resolveComponent(\"el-input\");\n const _component_DirectoryTreePicker = _resolveComponent(\"DirectoryTreePicker\");\n const _component_el_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_Logo = _resolveComponent(\"Logo\");\n const _component_UploadForm = _resolveComponent(\"UploadForm\");\n const _component_el_radio = _resolveComponent(\"el-radio\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\n const _component_el_switch = _resolveComponent(\"el-switch\");\n const _component_el_dialog = _resolveComponent(\"el-dialog\");\n const _component_UploadSettingsDialog = _resolveComponent(\"UploadSettingsDialog\");\n const _component_Footer = _resolveComponent(\"Footer\");\n const _component_UploadHistory = _resolveComponent(\"UploadHistory\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"div\", _hoisted_2, [_createVNode(_component_ToggleDark, {\n class: \"toggle-dark-button desktop-only\"\n }), _createVNode(_component_el_dropdown, {\n class: \"more-dropdown desktop-only\",\n trigger: \"click\",\n onCommand: $options.handleDesktopMenuCommand\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"showHistory\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.history')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showAnnouncement\",\n disabled: !$options.announcementAvailable\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.announcement')), 1)]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_dropdown_item, {\n command: \"toggleLanguage\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$i18n.locale === 'zh-CN' ? 'English' : '简体中文'), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"viewDocs\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.viewDocs')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"more-button\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ellipsis-v\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-folder-container\", {\n 'no-announcement': !$options.announcementAvailable\n }])\n }, [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-folder\", {\n 'active': $data.isFolderInputActive\n }])\n }, [$options.showDirectorySuggestions ? (_openBlock(), _createBlock(_component_DirectorySuggestionInput, {\n key: 0,\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.uploadFolder = $event),\n class: \"inner-folder-input\",\n placeholder: _ctx.$t('upload.folderPlaceholder'),\n onFocus: $options.handleFolderInputFocus,\n onBlur: $options.handleFolderInputBlur,\n onSelect: $options.handleDirectorySelect\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\", \"onSelect\"])) : (_openBlock(), _createBlock(_component_el_input, {\n key: 1,\n class: \"inner-folder-input\",\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => $data.uploadFolder = $event),\n placeholder: _ctx.$t('upload.folderPlaceholder'),\n onFocus: $options.handleFolderInputFocus,\n onBlur: $options.handleFolderInputBlur\n }, null, 8, [\"modelValue\", \"placeholder\", \"onFocus\", \"onBlur\"]))], 2), $options.showDirectorySuggestions ? (_openBlock(), _createBlock(_component_DirectoryTreePicker, {\n key: 0,\n \"current-directory\": $data.uploadFolder,\n source: \"upload\",\n onSelect: $options.handleDirectorySelect\n }, {\n trigger: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"directory-tree-trigger\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"folder-tree\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"current-directory\", \"onSelect\"])) : _createCommentVNode(\"\", true)], 2), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('upload.switchUploadMethod'),\n placement: \"bottom\",\n disabled: $options.disableTooltip,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"upload-method-button desktop-only\",\n onClick: $options.handleChangeUploadMethod\n }, {\n default: _withCtx(() => [$data.uploadMethod === 'default' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"folder-open\",\n class: \"upload-method-icon\",\n size: \"lg\"\n })) : $data.uploadMethod === 'paste' ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"paste\",\n class: \"upload-method-icon\",\n size: \"lg\"\n })) : _createCommentVNode(\"\", true)]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"content\", \"disabled\"]), _createVNode(_component_el_dropdown, {\n class: \"mobile-more-dropdown mobile-only\",\n trigger: \"click\",\n onCommand: $options.handleMobileMenuCommand\n }, {\n dropdown: _withCtx(() => [_createVNode(_component_el_dropdown_menu, null, {\n default: _withCtx(() => [_createVNode(_component_el_dropdown_item, {\n command: \"toggleTheme\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $options.getThemeIcon(),\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($options.getThemeText()), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"toggleUploadMethod\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: $data.uploadMethod === 'default' ? 'paste' : 'folder-open',\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($data.uploadMethod === 'default' ? _ctx.$t('upload.pasteUpload') : _ctx.$t('upload.fileUpload')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showHistory\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.history')), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"showAnnouncement\",\n disabled: !$options.announcementAvailable\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.announcement')), 1)]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_dropdown_item, {\n command: \"toggleLanguage\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"globe\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$i18n.locale === 'zh-CN' ? 'English' : '简体中文'), 1)]),\n _: 1\n }), _createVNode(_component_el_dropdown_item, {\n command: \"viewDocs\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n style: {\n \"width\": \"16px\",\n \"margin-right\": \"8px\",\n \"text-align\": \"center\"\n }\n }), _createTextVNode(\" \" + _toDisplayString(_ctx.$t('upload.viewDocs')), 1)]),\n _: 1\n })]),\n _: 1\n })]),\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"mobile-more-button\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"ellipsis-v\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"onCommand\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"quick-toolbar\", {\n 'is-expanded': $data.isQuickToolbarOpen\n }]),\n onMouseleave: _cache[5] || (_cache[5] = (...args) => $options.handleQuickToolbarLeave && $options.handleQuickToolbarLeave(...args))\n }, [_createElementVNode(\"div\", _hoisted_3, [_createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip || !$data.isQuickToolbarOpen,\n content: _ctx.$t('upload.logout'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[2] || (_cache[2] = $event => $options.handleQuickToolbarCommand('logout'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip || !$data.isQuickToolbarOpen,\n content: _ctx.$t('upload.manage'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[3] || (_cache[3] = $event => $options.handleQuickToolbarCommand('manage'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip || !$data.isQuickToolbarOpen,\n content: _ctx.$t('upload.linkFormat'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: _cache[4] || (_cache[4] = $event => $options.handleQuickToolbarCommand('linkFormat'))\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\", \"content\"])])]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: _ctx.$t('upload.settings'),\n placement: \"left\",\n \"hide-after\": 0,\n \"show-after\": 1000\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"quick-toolbar-button\",\n onClick: $options.openCompressDialog\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud-upload\",\n class: \"quick-toolbar-icon\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\", \"content\"]), _createVNode(_component_el_button, {\n class: _normalizeClass([\"quick-toolbar-button quick-toolbar-more\", {\n 'is-active': $data.isQuickToolbarOpen\n }]),\n \"aria-expanded\": $data.isQuickToolbarOpen,\n onMouseenter: $options.handleQuickToolbarMoreEnter,\n onClick: $options.toggleQuickToolbar\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"chevron-down\",\n class: \"quick-toolbar-icon quick-toolbar-toggle-icon\"\n })]),\n _: 1\n }, 8, [\"class\", \"aria-expanded\", \"onMouseenter\", \"onClick\"])], 34), _createVNode(_component_Logo, {\n useConfigLink: true\n }), _createElementVNode(\"div\", _hoisted_5, [_createElementVNode(\"h1\", _hoisted_6, [_createElementVNode(\"span\", _hoisted_7, _toDisplayString($options.ownerName) + \" ImgHub\", 1), _createElementVNode(\"a\", _hoisted_8, _toDisplayString($options.ownerName), 1), _cache[24] || (_cache[24] = _createTextVNode(\" ImgHub \", -1))])]), _createVNode(_component_UploadForm, {\n selectedUrlForm: $data.selectedUrlForm,\n customerCompress: $data.customerCompress,\n compressQuality: $data.compressQuality,\n compressBar: $data.compressBar,\n serverCompress: $data.serverCompress,\n uploadChannel: $data.uploadChannel,\n channelName: $data.channelName,\n uploadNameType: $data.uploadNameType,\n useCustomUrl: $data.useCustomUrl,\n customUrlPrefix: $data.customUrlPrefix,\n autoRetry: $data.autoRetry,\n urlPrefix: $options.urlPrefix,\n uploadMethod: $data.uploadMethod,\n uploadFolder: $data.uploadFolder,\n convertToWebp: $data.convertToWebp,\n class: \"upload\"\n }, null, 8, [\"selectedUrlForm\", \"customerCompress\", \"compressQuality\", \"compressBar\", \"serverCompress\", \"uploadChannel\", \"channelName\", \"uploadNameType\", \"useCustomUrl\", \"customUrlPrefix\", \"autoRetry\", \"urlPrefix\", \"uploadMethod\", \"uploadFolder\", \"convertToWebp\"]), _createVNode(_component_el_dialog, {\n title: _ctx.$t('settings.linkFormatTitle'),\n modelValue: $data.showUrlDialog,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.showUrlDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog settings-dialog-scope\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_9, [_createElementVNode(\"div\", _hoisted_10, [_createElementVNode(\"span\", _hoisted_11, _toDisplayString(_ctx.$t('settings.defaultCopyLink')), 1)]), _createElementVNode(\"div\", _hoisted_12, [_createVNode(_component_el_radio_group, {\n modelValue: $data.selectedUrlForm,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.selectedUrlForm = $event),\n onChange: $options.changeUrlForm,\n class: \"radio-card-group grid-2x2\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio, {\n value: \"url\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"radio-icon\"\n }), _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t('settings.rawLink')), 1)]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"md\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code\",\n class: \"radio-icon\"\n }), _cache[25] || (_cache[25] = _createElementVNode(\"span\", null, \"MarkDown\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"html\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"code-branch\",\n class: \"radio-icon\"\n }), _cache[26] || (_cache[26] = _createElementVNode(\"span\", null, \"HTML\", -1))]),\n _: 1\n }), _createVNode(_component_el_radio, {\n value: \"ubb\",\n class: \"radio-card\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"quote-right\",\n class: \"radio-icon\"\n }), _cache[27] || (_cache[27] = _createElementVNode(\"span\", null, \"BBCode\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])])]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"span\", _hoisted_15, _toDisplayString(_ctx.$t('settings.customLink')), 1), _createVNode(_component_el_tooltip, {\n content: _ctx.$t('settings.customLinkTooltip'),\n placement: \"top\",\n \"raw-content\": \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"question-circle\",\n class: \"section-help-icon\"\n })]),\n _: 1\n }, 8, [\"content\"])]), _createElementVNode(\"div\", _hoisted_16, [_createElementVNode(\"div\", _hoisted_17, [_createElementVNode(\"span\", _hoisted_18, _toDisplayString(_ctx.$t('settings.enableCustom')), 1), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [_createElementVNode(\"span\", _hoisted_20, _toDisplayString(_ctx.$t('settings.customPrefix')), 1), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.customUrlPrefix = $event),\n placeholder: _ctx.$t('settings.customPrefixPlaceholder'),\n class: \"setting-input\"\n }, null, 8, [\"modelValue\", \"placeholder\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_21, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[9] || (_cache[9] = $event => $data.showUrlDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('settings.confirm')), 1)]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_UploadSettingsDialog, {\n modelValue: $data.showCompressDialog,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.showCompressDialog = $event),\n uploadChannel: $data.uploadChannel,\n \"onUpdate:uploadChannel\": _cache[12] || (_cache[12] = $event => $data.uploadChannel = $event),\n channelName: $data.channelName,\n \"onUpdate:channelName\": _cache[13] || (_cache[13] = $event => $data.channelName = $event),\n currentChannelList: $options.currentChannelList,\n uploadFolder: $data.uploadFolder,\n \"onUpdate:uploadFolder\": _cache[14] || (_cache[14] = $event => $data.uploadFolder = $event),\n autoRetry: $data.autoRetry,\n \"onUpdate:autoRetry\": _cache[15] || (_cache[15] = $event => $data.autoRetry = $event),\n uploadNameType: $data.uploadNameType,\n \"onUpdate:uploadNameType\": _cache[16] || (_cache[16] = $event => $data.uploadNameType = $event),\n convertToWebp: $data.convertToWebp,\n \"onUpdate:convertToWebp\": _cache[17] || (_cache[17] = $event => $data.convertToWebp = $event),\n customerCompress: $data.customerCompress,\n \"onUpdate:customerCompress\": _cache[18] || (_cache[18] = $event => $data.customerCompress = $event),\n compressBar: $data.compressBar,\n \"onUpdate:compressBar\": _cache[19] || (_cache[19] = $event => $data.compressBar = $event),\n compressQuality: $data.compressQuality,\n \"onUpdate:compressQuality\": _cache[20] || (_cache[20] = $event => $data.compressQuality = $event),\n serverCompress: $data.serverCompress,\n \"onUpdate:serverCompress\": _cache[21] || (_cache[21] = $event => $data.serverCompress = $event)\n }, null, 8, [\"modelValue\", \"uploadChannel\", \"channelName\", \"currentChannelList\", \"uploadFolder\", \"autoRetry\", \"uploadNameType\", \"convertToWebp\", \"customerCompress\", \"compressBar\", \"compressQuality\", \"serverCompress\"])]), _createVNode(_component_Footer, {\n class: \"footer\"\n }), _createVNode(_component_el_dialog, {\n title: _ctx.$t('upload.announcementTitle'),\n modelValue: $data.showAnnouncementDialog,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.showAnnouncementDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n \"close-on-click-modal\": false,\n \"close-on-press-escape\": false,\n center: \"\"\n }, {\n footer: _withCtx(() => [_createElementVNode(\"span\", _hoisted_23, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: $options.acknowledgeAnnouncement\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('upload.announcementAck')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])]),\n default: _withCtx(() => [_createElementVNode(\"div\", {\n innerHTML: $data.announcementContent\n }, null, 8, _hoisted_22)]),\n _: 1\n }, 8, [\"title\", \"modelValue\", \"width\"]), _createVNode(_component_UploadHistory, {\n show: $data.showHistory,\n onClose: _cache[23] || (_cache[23] = $event => $data.showHistory = false)\n }, null, 8, [\"show\"])]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport UploadForm from '@/components/upload/UploadForm.vue';\nimport Footer from '@/components/Footer.vue';\nimport ToggleDark from '@/components/ToggleDark.vue';\nimport Logo from '@/components/Logo.vue';\nimport { setLocale } from '@/locales';\nimport UploadHistory from '@/components/upload/UploadHistory.vue';\nimport UploadSettingsDialog from '@/components/upload/UploadSettingsDialog.vue';\nimport DirectoryTreePicker from '@/components/DirectoryTreePicker.vue';\nimport DirectorySuggestionInput from '@/components/DirectorySuggestionInput.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nimport axios from '@/utils/axios';\nimport { ref } from 'vue';\nimport { mapGetters } from 'vuex';\nimport { validateFolderPath } from '@/utils/pathValidator';\nexport default {\n name: 'UploadHome',\n mixins: [backgroundManager],\n data() {\n return {\n selectedUrlForm: ref(''),\n showUrlDialog: false,\n showCompressDialog: false,\n customerCompress: true,\n //上传前压缩\n compressQuality: 4,\n //压缩后大小\n compressBar: 5,\n //压缩阈值\n convertToWebp: false,\n //转换为WebP格式\n serverCompress: true,\n //服务器端压缩\n uploadChannel: '',\n //上传渠道\n channelName: '',\n //指定的渠道名称\n availableChannels: {},\n //可用渠道列表\n uploadNameType: '',\n //上传文件命名方式\n customUrlPrefix: '',\n //自定义链接前缀\n useCustomUrl: 'false',\n //是否启用自定义链接格式\n autoRetry: true,\n //失败自动切换\n useDefaultWallPaper: false,\n uploadMethod: 'default',\n //上传方式\n uploadFolder: '',\n // 上传文件夹\n isFolderInputActive: false,\n isQuickToolbarOpen: false,\n isQuickToolbarPinned: false,\n showAnnouncementDialog: false,\n // 控制公告弹窗的显示\n announcementContent: '',\n // 公告内容\n displayedAnnouncementRefreshAt: null,\n // 当前弹窗所展示的公告版本\n showHistory: false,\n themeMode: 'auto' // 主题模式:light, dark, auto\n };\n },\n watch: {\n customerCompress(val) {\n this.updateCompressConfig('customerCompress', val);\n },\n compressQuality(val) {\n this.updateCompressConfig('compressQuality', val);\n },\n compressBar(val) {\n // 确保值在有效范围内\n if (val === null || val === undefined || val < 1) {\n this.compressBar = 1;\n return;\n }\n // 确保期望大小不超过压缩阈值\n if (this.compressQuality > val) {\n this.compressQuality = val;\n }\n this.updateCompressConfig('compressBar', val);\n },\n serverCompress(val) {\n this.updateCompressConfig('serverCompress', val);\n },\n convertToWebp(val) {\n this.updateCompressConfig('convertToWebp', val);\n },\n uploadChannel(val) {\n this.updateStoreUploadChannel(val);\n // 切换渠道类型时,检查持久化的渠道名是否在新渠道列表中\n const newChannelList = this.availableChannels[val] || [];\n const savedChannelName = this.storeChannelName;\n if (savedChannelName && newChannelList.some(ch => ch.name === savedChannelName)) {\n // 持久化的渠道名在新渠道列表中,恢复它\n this.channelName = savedChannelName;\n } else {\n // 否则清空\n this.channelName = '';\n }\n },\n channelName(val) {\n // 确保清空时保存空字符串而不是null\n this.$store.commit('setStoreChannelName', val || '');\n },\n uploadNameType(val) {\n this.updateStoreUploadNameType(val);\n },\n customUrlPrefix(val) {\n this.$store.commit('setCustomUrlSettings', {\n key: 'customUrlPrefix',\n value: val\n });\n },\n useCustomUrl(val) {\n this.$store.commit('setCustomUrlSettings', {\n key: 'useCustomUrl',\n value: val\n });\n },\n autoRetry(val) {\n this.$store.commit('setStoreAutoRetry', val);\n },\n uploadFolder(val) {\n // 实时输入时用非 strict 模式,不检查末尾的单独 . 以允许继续输入如 .123\n if (this.validateUploadFolder(val, false)) {\n // 非 strict 通过后,再用 strict 模式静默检查,只有完全合法才更新 store\n const strictResult = validateFolderPath(val, {\n strict: true\n });\n if (strictResult.valid) {\n this.$store.commit('setStoreUploadFolder', val);\n }\n // strict 不通过时不更新 store,等失焦时提示并回滚\n } else {\n this.$nextTick(() => {\n this.uploadFolder = this.storeUploadFolder;\n });\n }\n }\n },\n computed: {\n ...mapGetters(['userConfig', 'uploadCopyUrlForm', 'compressConfig', 'storeUploadChannel', 'storeChannelName', 'storeUploadNameType', 'customUrlSettings', 'storeAutoRetry', 'storeUploadMethod', 'storeUploadFolder']),\n ownerName() {\n return this.userConfig?.ownerName || 'Sanyue';\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n urlPrefix() {\n // 全局自定义链接前缀\n return this.userConfig?.urlPrefix || `${window.location.protocol}//${window.location.host}/file/`;\n },\n announcementAvailable() {\n return !!this.userConfig?.announcement;\n },\n // 是否显示目录候选项(从 userConfig 获取)\n showDirectorySuggestions() {\n return this.userConfig?.showDirectorySuggestions ?? false;\n },\n // 当前渠道类型对应的渠道列表\n currentChannelList() {\n return this.availableChannels[this.uploadChannel] || [];\n }\n },\n mounted() {\n // 初始化背景图,启用自动创建元素\n this.initializeBackground('uploadBkImg', '.container', true, true);\n\n // 读取用户选择的链接格式\n this.selectedUrlForm = this.uploadCopyUrlForm || 'url';\n // 读取用户选择的压缩设置(优先用户设置,其次系统默认配置)\n this.customerCompress = this.compressConfig.customerCompress ?? this.parseBoolean(this.userConfig?.defaultCustomerCompress, true);\n this.compressQuality = this.compressConfig.compressQuality ?? this.parseNumber(this.userConfig?.defaultCompressQuality, 4);\n this.compressBar = this.compressConfig.compressBar ?? this.parseNumber(this.userConfig?.defaultCompressBar, 5);\n this.serverCompress = this.compressConfig.serverCompress ?? true;\n this.convertToWebp = this.compressConfig.convertToWebp ?? this.parseBoolean(this.userConfig?.defaultConvertToWebp, false);\n // 读取用户选择的上传渠道\n this.uploadChannel = this.storeUploadChannel || this.userConfig?.defaultUploadChannel || 'telegram';\n // 用户定义的失败自动切换\n this.autoRetry = this.storeAutoRetry;\n // 读取用户选择的上传文件命名方式\n this.uploadNameType = this.storeUploadNameType || this.userConfig?.defaultUploadNameType || 'default';\n // 读取用户自定义链接格式\n this.customUrlPrefix = this.customUrlSettings.customUrlPrefix;\n this.useCustomUrl = this.customUrlSettings.useCustomUrl;\n // 读取用户偏好的上传方式\n this.uploadMethod = this.storeUploadMethod;\n // 获取可用渠道列表\n this.fetchAvailableChannels();\n // 读取用户设置的上传文件夹\n this.uploadFolder = this.storeUploadFolder || this.userConfig?.defaultUploadFolder || '';\n\n // 从 Vuex store 读取主题模式状态\n const cusDarkMode = this.$store.getters.cusDarkMode;\n const useDarkMode = this.$store.getters.useDarkMode;\n if (!cusDarkMode) {\n this.themeMode = 'auto';\n } else if (useDarkMode) {\n this.themeMode = 'dark';\n } else {\n this.themeMode = 'light';\n }\n this.showAnnouncementIfNeeded();\n },\n components: {\n UploadForm,\n Footer,\n ToggleDark,\n Logo,\n UploadHistory,\n UploadSettingsDialog,\n DirectoryTreePicker,\n DirectorySuggestionInput\n },\n methods: {\n // 获取可用渠道列表\n async fetchAvailableChannels() {\n try {\n const response = await axios.get('/api/channels', {\n withAuthCode: true\n });\n if (response.data) {\n this.availableChannels = response.data;\n // 恢复渠道名称:优先持久化的值,其次系统默认配置\n const savedChannelName = this.storeChannelName;\n const defaultChannelName = this.userConfig?.defaultChannelName;\n const currentChannelList = this.availableChannels[this.uploadChannel] || [];\n\n // 如果用户主动清空过(savedChannelName === ''),则保持为空\n // 如果从未选择过(savedChannelName === null/undefined),则使用默认值\n if (savedChannelName && currentChannelList.some(ch => ch.name === savedChannelName)) {\n this.channelName = savedChannelName;\n } else if (savedChannelName === '' || savedChannelName === null || savedChannelName === undefined) {\n // 用户主动清空或从未选择,检查是否使用默认值\n if (savedChannelName !== '' && defaultChannelName && currentChannelList.some(ch => ch.name === defaultChannelName)) {\n this.channelName = defaultChannelName;\n }\n // 如果 savedChannelName === '',说明用户主动清空,保持为空\n }\n }\n } catch (error) {\n console.error('Failed to fetch available channels:', error);\n }\n },\n // 验证上传文件夹路径的合法性\n validateUploadFolder(path, strict = true) {\n // 自动补全前导 /\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n this.uploadFolder = path;\n }\n const result = validateFolderPath(path, {\n strict\n });\n if (!result.valid) {\n this.$message.error(result.error);\n return false;\n }\n return true;\n },\n handleFolderInputFocus() {\n this.isFolderInputActive = true;\n },\n handleFolderInputBlur() {\n this.isFolderInputActive = false;\n // 失焦时自动补全前导 /\n if (this.uploadFolder && !this.uploadFolder.startsWith('/')) {\n this.uploadFolder = '/' + this.uploadFolder;\n }\n // 失焦时做完整校验(包括末尾单独的 .)\n if (!this.validateUploadFolder(this.uploadFolder, true)) {\n this.$nextTick(() => {\n this.uploadFolder = this.storeUploadFolder;\n });\n }\n },\n handleManage() {\n this.$router.push('/dashboard');\n },\n // 解析布尔值\n parseBoolean(value, defaultValue) {\n if (value === undefined || value === null) return defaultValue;\n if (typeof value === 'boolean') return value;\n if (typeof value === 'string') return value === 'true';\n return defaultValue;\n },\n // 解析数字\n parseNumber(value, defaultValue) {\n if (value === undefined || value === null) return defaultValue;\n const num = parseFloat(value);\n return isNaN(num) ? defaultValue : num;\n },\n openUrlDialog() {\n this.showUrlDialog = true;\n },\n handleLogout() {\n axios.post('/api/auth/logout', {\n authType: 'user'\n }, {\n withCredentials: true\n }).finally(() => {\n this.$store.commit('setUserLoggedIn', false);\n this.$router.push('/login');\n this.$message.success(this.$t('upload.logoutSuccess'));\n });\n },\n changeUrlForm() {\n this.$store.commit('setUploadCopyUrlForm', this.selectedUrlForm);\n },\n openCompressDialog() {\n this.showCompressDialog = true;\n },\n updateCompressConfig(key, value) {\n this.$store.commit('setCompressConfig', {\n key,\n value\n });\n },\n updateStoreUploadChannel(value) {\n this.$store.commit('setStoreUploadChannel', value);\n },\n updateStoreUploadNameType(value) {\n this.$store.commit('setStoreUploadNameType', value);\n },\n handleQuickToolbarMoreEnter() {\n this.isQuickToolbarOpen = true;\n },\n handleQuickToolbarLeave() {\n if (!this.isQuickToolbarPinned) {\n this.isQuickToolbarOpen = false;\n }\n },\n toggleQuickToolbar() {\n this.isQuickToolbarPinned = !this.isQuickToolbarPinned;\n this.isQuickToolbarOpen = this.isQuickToolbarPinned;\n },\n closeQuickToolbar() {\n this.isQuickToolbarPinned = false;\n this.isQuickToolbarOpen = false;\n },\n handleQuickToolbarCommand(command) {\n this.closeQuickToolbar();\n if (command === 'linkFormat') {\n this.openUrlDialog();\n } else if (command === 'manage') {\n this.handleManage();\n } else if (command === 'logout') {\n this.handleLogout();\n }\n },\n handleChangeUploadMethod() {\n this.uploadMethod = this.uploadMethod === 'default' ? 'paste' : 'default';\n this.$store.commit('setUploadMethod', this.uploadMethod);\n },\n handleMobileMenuCommand(command) {\n if (command === 'toggleTheme') {\n // 循环切换:auto -> light -> dark -> auto\n if (this.themeMode === 'auto') {\n // 切换到亮色\n this.themeMode = 'light';\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (this.themeMode === 'light') {\n // 切换到暗色\n this.themeMode = 'dark';\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 切换到自动\n this.themeMode = 'auto';\n this.$store.commit('setCusDarkMode', false);\n }\n } else if (command === 'toggleUploadMethod') {\n this.handleChangeUploadMethod();\n } else if (command === 'viewDocs') {\n window.open('https://cfbed.sanyue.de/qa/', '_blank');\n } else if (command === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\n } else if (command === 'toggleLanguage') {\n const next = this.$i18n.locale === 'zh-CN' ? 'en' : 'zh-CN';\n setLocale(next);\n }\n },\n handleDesktopMenuCommand(command) {\n if (command === 'viewDocs') {\n window.open('https://cfbed.sanyue.de/qa/', '_blank');\n } else if (command === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\n } else if (command === 'toggleLanguage') {\n const next = this.$i18n.locale === 'zh-CN' ? 'en' : 'zh-CN';\n setLocale(next);\n }\n },\n getThemeIcon() {\n // 显示下一个模式的图标\n if (this.themeMode === 'auto') return 'sun'; // auto -> light\n if (this.themeMode === 'light') return 'moon'; // light -> dark\n return 'adjust'; // dark -> auto\n },\n getThemeText() {\n // 显示下一个模式的文字\n if (this.themeMode === 'auto') return this.$t('theme.lightMode');\n if (this.themeMode === 'light') return this.$t('theme.darkMode');\n return this.$t('theme.autoMode');\n },\n handleShowAnnouncement() {\n const announcement = this.userConfig?.announcement;\n if (announcement) {\n this.openAnnouncement(announcement);\n } else {\n this.$message.info(this.$t('upload.noAnnouncement'));\n }\n },\n getAnnouncementRefreshAt() {\n const refreshAt = Number(this.userConfig?.announcementRefreshAt);\n return Number.isFinite(refreshAt) && refreshAt > 0 ? refreshAt : null;\n },\n openAnnouncement(announcement) {\n this.announcementContent = announcement;\n this.displayedAnnouncementRefreshAt = this.getAnnouncementRefreshAt();\n this.showAnnouncementDialog = true;\n },\n showAnnouncementIfNeeded() {\n const announcement = this.userConfig?.announcement;\n if (!announcement) return;\n const refreshAt = this.getAnnouncementRefreshAt();\n if (refreshAt) {\n const acknowledgedRefreshAt = Number(localStorage.getItem('announcementAcknowledgedRefreshAt'));\n if (!Number.isFinite(acknowledgedRefreshAt) || refreshAt > acknowledgedRefreshAt) {\n this.openAnnouncement(announcement);\n }\n return;\n }\n\n // 尚未产生刷新时间的旧公告在升级后再展示一次,确认后使用新版时间标记。\n if (!localStorage.getItem('announcementAcknowledgedAt')) {\n this.openAnnouncement(announcement);\n }\n },\n acknowledgeAnnouncement() {\n localStorage.setItem('announcementAcknowledgedAt', String(Date.now()));\n if (this.displayedAnnouncementRefreshAt) {\n localStorage.setItem('announcementAcknowledgedRefreshAt', String(this.displayedAnnouncementRefreshAt));\n }\n this.showAnnouncementDialog = false;\n },\n // 处理目录选择\n handleDirectorySelect(path) {\n // 填入选择的目录路径\n this.uploadFolder = path;\n // 触发路径验证逻辑\n if (this.validateUploadFolder(path, true)) {\n this.$store.commit('setStoreUploadFolder', path);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHome.vue?vue&type=template&id=06705292&scoped=true\"\nimport script from \"./UploadHome.vue?vue&type=script&lang=js\"\nexport * from \"./UploadHome.vue?vue&type=script&lang=js\"\n\nimport \"./UploadHome.vue?vue&type=style&index=0&id=06705292&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-06705292\"]])\n\nexport default __exports__","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.imageConversion=e():t.imageConversion=e()}(this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=0)}([function(t,e,n){\"use strict\";var r;function o(t){return[\"image/png\",\"image/jpeg\",\"image/gif\"].some(e=>e===t)}n.r(e),n.d(e,\"canvastoDataURL\",(function(){return a})),n.d(e,\"canvastoFile\",(function(){return c})),n.d(e,\"dataURLtoFile\",(function(){return s})),n.d(e,\"dataURLtoImage\",(function(){return l})),n.d(e,\"downloadFile\",(function(){return d})),n.d(e,\"filetoDataURL\",(function(){return f})),n.d(e,\"imagetoCanvas\",(function(){return g})),n.d(e,\"urltoBlob\",(function(){return w})),n.d(e,\"urltoImage\",(function(){return m})),n.d(e,\"compress\",(function(){return p})),n.d(e,\"compressAccurately\",(function(){return b})),n.d(e,\"EImageType\",(function(){return r})),function(t){t.PNG=\"image/png\",t.JPEG=\"image/jpeg\",t.GIF=\"image/gif\"}(r||(r={}));var i=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function a(t,e=.92,n=r.JPEG){return i(this,void 0,void 0,(function*(){return o(n)||(n=r.JPEG),t.toDataURL(n,e)}))}function c(t,e=.92,n=r.JPEG){return new Promise(r=>t.toBlob(t=>r(t),n,e))}var u=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function s(t,e){return u(this,void 0,void 0,(function*(){const n=t.split(\",\");let r=n[0].match(/:(.*?);/)[1];const i=atob(n[1]);let a=i.length;const c=new Uint8Array(a);for(;a--;)c[a]=i.charCodeAt(a);return o(e)&&(r=e),new Blob([c],{type:r})}))}function l(t){return new Promise((e,n)=>{const r=new Image;r.onload=()=>e(r),r.onerror=()=>n(new Error(\"dataURLtoImage(): dataURL is illegal\")),r.src=t})}function d(t,e){const n=document.createElement(\"a\");n.href=window.URL.createObjectURL(t),n.download=e||Date.now().toString(36),document.body.appendChild(n);const r=document.createEvent(\"MouseEvents\");r.initEvent(\"click\",!1,!1),n.dispatchEvent(r),document.body.removeChild(n)}function f(t){return new Promise(e=>{const n=new FileReader;n.onloadend=t=>e(t.target.result),n.readAsDataURL(t)})}var h=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function g(t,e={}){return h(this,void 0,void 0,(function*(){const n=Object.assign({},e),r=document.createElement(\"canvas\"),o=r.getContext(\"2d\");let i,a;for(const t in n)Object.prototype.hasOwnProperty.call(n,t)&&(n[t]=Number(n[t]));if(n.scale){const e=n.scale>0&&n.scale<10?n.scale:1;a=t.width*e,i=t.height*e}else a=n.width||n.height*t.width/t.height||t.width,i=n.height||n.width*t.height/t.width||t.height;switch([5,6,7,8].some(t=>t===n.orientation)?(r.height=a,r.width=i):(r.height=i,r.width=a),n.orientation){case 3:o.rotate(180*Math.PI/180),o.drawImage(t,-r.width,-r.height,r.width,r.height);break;case 6:o.rotate(90*Math.PI/180),o.drawImage(t,0,-r.width,r.height,r.width);break;case 8:o.rotate(270*Math.PI/180),o.drawImage(t,-r.height,0,r.height,r.width);break;case 2:o.translate(r.width,0),o.scale(-1,1),o.drawImage(t,0,0,r.width,r.height);break;case 4:o.translate(r.width,0),o.scale(-1,1),o.rotate(180*Math.PI/180),o.drawImage(t,-r.width,-r.height,r.width,r.height);break;case 5:o.translate(r.width,0),o.scale(-1,1),o.rotate(90*Math.PI/180),o.drawImage(t,0,-r.width,r.height,r.width);break;case 7:o.translate(r.width,0),o.scale(-1,1),o.rotate(270*Math.PI/180),o.drawImage(t,-r.height,0,r.height,r.width);break;default:o.drawImage(t,0,0,r.width,r.height)}return r}))}function w(t){return fetch(t).then(t=>t.blob())}function m(t){return new Promise((e,n)=>{const r=new Image;r.onload=()=>e(r),r.onerror=()=>n(new Error(\"urltoImage(): Image failed to load, please check the image URL\")),r.src=t})}var y=function(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,c)}u((r=r.apply(t,e||[])).next())}))};function p(t,e={}){return y(this,void 0,void 0,(function*(){if(!(t instanceof Blob))throw new Error(\"compress(): First arg must be a Blob object or a File object.\");if(\"object\"!=typeof e&&(e=Object.assign({quality:e})),e.quality=Number(e.quality),Number.isNaN(e.quality))return t;const n=yield f(t);let i=n.split(\",\")[0].match(/:(.*?);/)[1],c=r.JPEG;o(e.type)&&(c=e.type,i=e.type);const u=yield l(n),d=yield g(u,Object.assign({},e)),h=yield a(d,e.quality,c),w=yield s(h,i);return w.size>t.size?t:w}))}function b(t,e={}){return y(this,void 0,void 0,(function*(){if(!(t instanceof Blob))throw new Error(\"compressAccurately(): First arg must be a Blob object or a File object.\");if(\"object\"!=typeof e&&(e=Object.assign({size:e})),e.size=Number(e.size),Number.isNaN(e.size))return t;if(1024*e.size>t.size)return t;e.accuracy=Number(e.accuracy),(!e.accuracy||e.accuracy<.8||e.accuracy>.99)&&(e.accuracy=.95);const n=e.size*(2-e.accuracy)*1024,i=1024*e.size,c=e.size*e.accuracy*1024,u=yield f(t);let d=u.split(\",\")[0].match(/:(.*?);/)[1],h=r.JPEG;o(e.type)&&(h=e.type,d=e.type);const w=yield l(u),m=yield g(w,Object.assign({},e));let y,p=.5;const b=[null,null];for(let t=1;t<=7;t++){y=yield a(m,p,h);const e=.75*y.length;if(7===t){(ne)&&(y=[y,...b].filter(t=>t).sort((t,e)=>Math.abs(.75*t.length-i)-Math.abs(.75*e.length-i))[0]);break}if(ne))break;b[0]=y,p+=Math.pow(.5,t+1)}}const v=yield s(y,d);return v.size>t.size?t:v}))}}])}));","import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode } from \"vue\";\nconst _hoisted_1 = {\n id: \"themeMask\"\n};\nconst _hoisted_2 = [\"cx\", \"cy\", \"r\"];\nconst _hoisted_3 = [\"r\"];\nconst _hoisted_4 = [\"opacity\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"div\", {\n id: \"themeToggle\",\n onClick: _cache[0] || (_cache[0] = (...args) => $options.handleToggleClick && $options.handleToggleClick(...args))\n }, [_createVNode(_Transition, {\n name: \"icon-fade\",\n mode: \"out-in\"\n }, {\n default: _withCtx(() => [!$data.isAuto ? (_openBlock(), _createElementBlock(\"svg\", {\n key: \"sun-moon\",\n class: _normalizeClass([\"theme_toggle_svg\", {\n 'dark': $data.isDark\n }]),\n width: \"1.5em\",\n height: \"1.5em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n stroke: \"currentColor\"\n }, [_createElementVNode(\"mask\", _hoisted_1, [_cache[1] || (_cache[1] = _createElementVNode(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"100%\",\n height: \"100%\",\n fill: \"white\"\n }, null, -1)), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle1\",\n fill: \"black\",\n cx: $data.isDark ? '50%' : '100%',\n cy: $data.isDark ? '23%' : '0%',\n r: $data.isDark ? '9' : '5'\n }, null, 8, _hoisted_2)]), _createElementVNode(\"circle\", {\n class: \"theme_toggle_circle2\",\n cx: \"12\",\n cy: \"12\",\n r: $data.isDark ? '9' : '5',\n mask: \"url(#themeMask)\"\n }, null, 8, _hoisted_3), _createElementVNode(\"g\", {\n class: \"theme_toggle_g\",\n stroke: \"currentColor\",\n opacity: $data.isDark ? 0 : 1\n }, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"1\",\n x2: \"12\",\n y2: \"3\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"12\",\n y1: \"21\",\n x2: \"12\",\n y2: \"23\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"4.22\",\n x2: \"5.64\",\n y2: \"5.64\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"18.36\",\n x2: \"19.78\",\n y2: \"19.78\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"1\",\n y1: \"12\",\n x2: \"3\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"21\",\n y1: \"12\",\n x2: \"23\",\n y2: \"12\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"4.22\",\n y1: \"19.78\",\n x2: \"5.64\",\n y2: \"18.36\"\n }, null, -1), _createElementVNode(\"line\", {\n x1: \"18.36\",\n y1: \"5.64\",\n x2: \"19.78\",\n y2: \"4.22\"\n }, null, -1)]))], 8, _hoisted_4)], 2)) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: \"auto-mode\",\n icon: \"circle-half-stroke\",\n class: \"auto-icon\",\n style: {\n \"font-size\": \"1.5em\",\n \"color\": \"var(--theme-toggle-color)\"\n }\n }))]),\n _: 1\n })]);\n}","export default {\n name: 'ToggleDark',\n data() {\n return {\n isDark: this.$store.getters.useDarkMode,\n isAuto: !this.$store.getters.cusDarkMode\n };\n },\n methods: {\n handleToggleClick() {\n // 三种状态循环:亮色 -> 暗色 -> 跟随系统 -> 亮色\n if (this.isAuto) {\n // 当前是自动模式,切换到亮色\n this.isDark = false;\n this.isAuto = false;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', false);\n } else if (!this.isDark) {\n // 当前是亮色,切换到暗色\n this.isDark = true;\n this.$store.commit('setCusDarkMode', true);\n this.$store.commit('setUseDarkMode', true);\n } else {\n // 当前是暗色,切换到跟随系统\n this.isAuto = true;\n this.$store.commit('setCusDarkMode', false);\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./ToggleDark.vue?vue&type=template&id=2122c62a&scoped=true\"\nimport script from \"./ToggleDark.vue?vue&type=script&lang=js\"\nexport * from \"./ToggleDark.vue?vue&type=script&lang=js\"\n\nimport \"./ToggleDark.vue?vue&type=style&index=0&id=2122c62a&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2122c62a\"]])\n\nexport default __exports__","import { renderSlot as _renderSlot, withModifiers as _withModifiers, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createBlock as _createBlock, resolveDirective as _resolveDirective, withDirectives as _withDirectives, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"directory-tree-picker\"\n};\nconst _hoisted_2 = {\n class: \"tree-container\"\n};\nconst _hoisted_3 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_4 = {\n class: \"error-text\"\n};\nconst _hoisted_5 = {\n class: \"node-label\"\n};\nconst _hoisted_6 = {\n class: \"tree-container\"\n};\nconst _hoisted_7 = {\n key: 0,\n class: \"error-state\"\n};\nconst _hoisted_8 = {\n class: \"error-text\"\n};\nconst _hoisted_9 = {\n class: \"node-label\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n const _component_el_button = _resolveComponent(\"el-button\");\n const _component_el_tree = _resolveComponent(\"el-tree\");\n const _component_el_popover = _resolveComponent(\"el-popover\");\n const _component_el_drawer = _resolveComponent(\"el-drawer\");\n const _directive_loading = _resolveDirective(\"loading\");\n return _openBlock(), _createElementBlock(\"div\", _hoisted_1, [$options.isDesktop ? (_openBlock(), _createBlock(_component_el_popover, {\n key: 0,\n visible: $data.popoverVisible,\n \"onUpdate:visible\": _cache[1] || (_cache[1] = $event => $data.popoverVisible = $event),\n placement: \"bottom-start\",\n width: 320,\n trigger: \"click\",\n \"popper-class\": \"directory-tree-popover\",\n \"show-arrow\": true,\n \"hide-after\": 0,\n \"show-after\": 50,\n transition: \"el-zoom-in-top\"\n }, {\n reference: _withCtx(() => [_createElementVNode(\"span\", {\n class: \"popover-trigger-wrapper\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)])]),\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_2, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_4, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRef\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_5, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 3\n }, 8, [\"visible\"])) : (_openBlock(), _createElementBlock(_Fragment, {\n key: 1\n }, [_createElementVNode(\"span\", {\n class: \"drawer-trigger-wrapper\",\n onClick: _cache[2] || (_cache[2] = (...args) => $options.openDrawer && $options.openDrawer(...args))\n }, [_renderSlot(_ctx.$slots, \"trigger\", {}, undefined, true)]), _createVNode(_component_el_drawer, {\n modelValue: $data.drawerVisible,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.drawerVisible = $event),\n direction: \"btt\",\n size: \"60%\",\n \"show-close\": true,\n \"with-header\": true,\n \"z-index\": 3000,\n title: _ctx.$t('directoryTree.selectDirectory'),\n class: \"directory-tree-drawer\"\n }, {\n default: _withCtx(() => [_withDirectives((_openBlock(), _createElementBlock(\"div\", _hoisted_6, [$data.error ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [_createVNode(_component_font_awesome_icon, {\n icon: \"exclamation-circle\",\n class: \"error-icon\"\n }), _createElementVNode(\"span\", _hoisted_8, _toDisplayString($data.error), 1), _createVNode(_component_el_button, {\n type: \"primary\",\n size: \"small\",\n onClick: $options.fetchDirectoryTree\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString(_ctx.$t('directoryTree.retry')), 1)]),\n _: 1\n }, 8, [\"onClick\"])])) : (_openBlock(), _createBlock(_component_el_tree, {\n key: 1,\n ref: \"treeRefMobile\",\n data: $data.treeData,\n props: $data.treeProps,\n \"node-key\": \"path\",\n \"default-expand-all\": false,\n \"expand-on-click-node\": false,\n \"highlight-current\": true,\n \"current-node-key\": $props.currentDirectory,\n class: \"directory-tree mobile-tree\",\n onNodeClick: $options.handleNodeClick\n }, {\n default: _withCtx(({\n node,\n data\n }) => [_createElementVNode(\"span\", {\n class: _normalizeClass([\"tree-node\", {\n 'is-current': data.path === $props.currentDirectory\n }])\n }, [_createVNode(_component_font_awesome_icon, {\n icon: node.expanded ? 'folder-open' : 'folder',\n class: \"folder-icon\"\n }, null, 8, [\"icon\"]), _createElementVNode(\"span\", _hoisted_9, _toDisplayString(data.name), 1)], 2)]),\n _: 1\n }, 8, [\"data\", \"props\", \"current-node-key\", \"onNodeClick\"]))])), [[_directive_loading, $data.loading]])]),\n _: 1\n }, 8, [\"modelValue\", \"title\"])], 64))]);\n}","import axios from '@/utils/axios';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nexport default {\n name: 'DirectoryTreePicker',\n props: {\n currentDirectory: {\n type: String,\n default: ''\n },\n source: {\n type: String,\n default: 'upload',\n validator: value => ['upload', 'admin'].includes(value)\n }\n },\n data() {\n return {\n popoverVisible: false,\n drawerVisible: false,\n treeData: [],\n loading: false,\n error: '',\n treeProps: {\n children: 'children',\n label: 'name'\n },\n windowWidth: window.innerWidth\n };\n },\n computed: {\n isDesktop() {\n return this.windowWidth >= 769;\n }\n },\n watch: {\n popoverVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 弹窗关闭后延迟折叠所有节点,避免下次打开时出现折叠动画\n setTimeout(() => {\n if (!this.popoverVisible && this.$refs.treeRef) {\n const store = this.$refs.treeRef.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 200);\n }\n },\n drawerVisible(newVal) {\n if (newVal) {\n this.fetchDirectoryTree();\n } else {\n // 抽屉关闭后延迟折叠所有节点\n setTimeout(() => {\n if (!this.drawerVisible && this.$refs.treeRefMobile) {\n const store = this.$refs.treeRefMobile.store;\n for (const key in store.nodesMap) {\n store.nodesMap[key].expanded = false;\n }\n }\n }, 300);\n }\n },\n currentDirectory(newVal) {\n this.$nextTick(() => {\n if (this.$refs.treeRef && newVal) {\n this.$refs.treeRef.setCurrentKey(newVal);\n }\n if (this.$refs.treeRefMobile && newVal) {\n this.$refs.treeRefMobile.setCurrentKey(newVal);\n }\n });\n }\n },\n mounted() {\n window.addEventListener('resize', this.handleResize);\n },\n beforeUnmount() {\n window.removeEventListener('resize', this.handleResize);\n },\n methods: {\n handleResize() {\n this.windowWidth = window.innerWidth;\n },\n openDrawer() {\n this.drawerVisible = true;\n },\n async fetchDirectoryTree() {\n this.loading = true;\n this.error = '';\n try {\n let data;\n if (this.source === 'admin') {\n const response = await fetchWithAuth('/api/directoryTree', {\n method: 'GET'\n });\n if (!response.ok) {\n if (response.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.serverError');\n }\n return;\n }\n data = await response.json();\n } else {\n const response = await axios.get('/api/directoryTree', {\n withAuthCode: true\n });\n data = response.data;\n }\n if (data.tree) {\n this.treeData = [data.tree];\n } else {\n this.treeData = [];\n }\n } catch (err) {\n console.error('Failed to fetch directory tree:', err);\n if (err.response?.status === 401) {\n this.error = this.$t('directoryTree.authFailed');\n } else {\n this.error = this.$t('directoryTree.loadFailed');\n }\n } finally {\n this.loading = false;\n }\n },\n handleNodeClick(data) {\n let path = data.path;\n if (path && !path.startsWith('/')) {\n path = '/' + path;\n } else if (!path) {\n path = '/';\n }\n this.$emit('select', path);\n this.popoverVisible = false;\n this.drawerVisible = false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./DirectoryTreePicker.vue?vue&type=template&id=62eab69a&scoped=true\"\nimport script from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\nexport * from \"./DirectoryTreePicker.vue?vue&type=script&lang=js\"\n\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=0&id=62eab69a&scoped=true&lang=css\"\nimport \"./DirectoryTreePicker.vue?vue&type=style&index=1&id=62eab69a&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-62eab69a\"]])\n\nexport default __exports__","/**\r\n * 路径验证器模块\r\n * 提供共享的文件夹路径验证功能,供 AdminDashBoard 和 UploadHome 共同使用\r\n */\r\nimport i18n from '@/locales'\r\n\r\n/**\r\n * 验证文件夹路径的合法性\r\n * @param {string} path - 要验证的路径\r\n * @param {{ strict?: boolean }} options - 选项,strict 为 true 时检查末尾单独的 \".\"(默认 true)\r\n * @returns {{ valid: boolean, error?: string }} 验证结果\r\n */\r\nexport function validateFolderPath(path, { strict = true } = {}) {\r\n // 如果路径为空或仅为空白字符,返回有效(表示根目录)\r\n if (!path || path.trim() === '') {\r\n return { valid: true };\r\n }\r\n \r\n // 如果路径仅为 \"/\",返回有效(表示根目录)\r\n if (path === '/') {\r\n return { valid: true };\r\n }\r\n \r\n // 检查路径是否以 \"/\" 开头\r\n if (!path.startsWith('/')) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.pathMustStartWithSlash') \r\n };\r\n }\r\n\r\n // 检查路径穿越:包含 .. 的路径段\r\n if (/(?:^|\\/)\\.\\.(\\/|$)/.test(path) || path.includes('..')) {\r\n return {\r\n valid: false,\r\n error: i18n.global.t('validation.pathTraversalNotAllowed')\r\n };\r\n }\r\n\r\n // 检查路径中单独的 . 段\r\n // strict 模式检查 /./ 和末尾 /.,非 strict 模式仅检查 /./ 以允许用户继续输入如 /.123\r\n const dotPattern = strict ? /\\/\\.(\\/|$)/ : /\\/\\.\\//;\r\n if (dotPattern.test(path)) {\r\n return {\r\n valid: false,\r\n error: i18n.global.t('validation.singleDotNotAllowed')\r\n };\r\n }\r\n\r\n // 检查路径是否包含连续的斜杠\r\n if (path.includes('//')) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.consecutiveSlashNotAllowed') \r\n };\r\n }\r\n \r\n // 检查路径是否包含非法字符\r\n // 非法字符包括: \\ : * ? \" ' < > | 空格 ( ) [ ] { } # % ^ ` ~ ; @ & = + $ ,\r\n const invalidChars = /[\\\\:\\*\\?\"'<>\\| \\(\\)\\[\\]\\{\\}#%\\^`~;@&=\\+\\$,]/;\r\n if (invalidChars.test(path)) {\r\n return { \r\n valid: false, \r\n error: i18n.global.t('validation.invalidCharacters') \r\n };\r\n }\r\n \r\n return { valid: true };\r\n}\r\n","import store from '@/store'\r\nimport router from '@/router'\r\n\r\nlet isRedirecting = false;\r\n\r\nexport default async function fetchWithAuth(url, options = {}) {\r\n // 开发环境下添加 /api 前缀\r\n url = process.env.NODE_ENV === 'production' ? url : `/api${url}`;\r\n\r\n // 确保包含凭据(HttpOnly Cookie 会自动携带)\r\n options.credentials = 'include';\r\n\r\n options.headers = {\r\n ...options.headers,\r\n };\r\n\r\n const response = await fetch(url, options);\r\n\r\n if (response.status === 401 && !isRedirecting) {\r\n isRedirecting = true;\r\n store.commit('setAdminLoggedIn', false);\r\n // 静默跳转登录页,不弹出错误提示(路由守卫负责认证 UX)\r\n router.push('/adminLogin').finally(() => {\r\n isRedirecting = false;\r\n });\r\n }\r\n\r\n return response;\r\n}\r\n","module.exports = require(\"./build/conversion.js\");\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"page-footer\"\n};\nconst _hoisted_2 = [\"href\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return !$options.disableFooter ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [_createElementVNode(\"p\", null, [_createTextVNode(\"© 2024-\" + _toDisplayString($options.thisYear) + \" Designed by \", 1), _cache[0] || (_cache[0] = _createElementVNode(\"a\", {\n class: \"footer-name\",\n href: \"https://github.com/MarSeventh\",\n target: \"_blank\"\n }, \"SanyueQi\", -1)), _cache[1] || (_cache[1] = _createTextVNode(\" for You! \", -1)), _createElementVNode(\"a\", {\n href: $options.footerLink,\n target: \"_blank\"\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"paper-plane\",\n class: \"footer-link-icon\"\n })], 8, _hoisted_2)])])) : _createCommentVNode(\"\", true);\n}","import { mapGetters } from 'vuex';\nexport default {\n name: 'Footer',\n computed: {\n ...mapGetters(['userConfig']),\n footerLink() {\n return this.userConfig?.footerLink || 'https://github.com/MarSeventh';\n },\n thisYear() {\n return new Date().getFullYear();\n },\n disableFooter() {\n return this.userConfig?.disableFooter || false;\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./Footer.vue?vue&type=template&id=08acbaa9&scoped=true\"\nimport script from \"./Footer.vue?vue&type=script&lang=js\"\nexport * from \"./Footer.vue?vue&type=script&lang=js\"\n\nimport \"./Footer.vue?vue&type=style&index=0&id=08acbaa9&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-08acbaa9\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createBlock as _createBlock, mergeProps as _mergeProps, createStaticVNode as _createStaticVNode } from \"vue\";\nconst _hoisted_1 = {\n key: 0,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = {\n key: 1,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_3 = {\n key: 2,\n class: \"channel-svg-icon\",\n viewBox: \"0 0 1024 1024\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_font_awesome_icon = _resolveComponent(\"font-awesome-icon\");\n return _openBlock(), _createElementBlock(\"span\", _mergeProps(_ctx.$attrs, {\n class: ['channel-icon-wrapper', `channel-brand-${$props.type}`]\n }), [$props.type === 'telegram' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, [...(_cache[0] || (_cache[0] = [_createElementVNode(\"path\", {\n d: \"M417.28 795.733333 429.226667 615.253333 756.906667 320C771.413333 306.773333 753.92 300.373333 734.72 311.893333L330.24 567.466667 155.306667 512C117.76 501.333333 117.333333 475.306667 163.84 456.533333L845.226667 193.706667C876.373333 179.626667 906.24 201.386667 894.293333 249.173333L778.24 795.733333C770.133333 834.56 746.666667 843.946667 714.24 826.026667L537.6 695.466667 452.693333 777.813333C442.88 787.626667 434.773333 795.733333 417.28 795.733333Z\"\n }, null, -1)]))])) : $props.type === 'huggingface' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, [...(_cache[1] || (_cache[1] = [_createStaticVNode(\"\", 9)]))])) : $props.type === 'webdav' ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_3, [...(_cache[2] || (_cache[2] = [_createElementVNode(\"path\", {\n d: \"M446.293333 810.666667C384 898.986667 262.4 921.173333 174.506667 859.733333c-87.466667-61.44-107.946667-183.893333-46.506667-273.066666a195.626667 195.626667 0 0 1 152.746667-84.48l2.133333 61.013333c-38.826667 2.986667-76.373333 23.04-100.693333 58.026667-42.666667 61.44-29.44 144.213333 29.013333 185.6 58.88 40.96 141.226667 25.173333 183.893333-35.84 13.226667-19.2 20.906667-40.106667 23.893334-61.44v-43.093334l238.08-1.706666 2.986666-4.693334c22.613333-39.253333 71.68-52.906667 110.08-30.72a81.066667 81.066667 0 0 1 29.013334 110.933334c-22.613333 38.826667-72.106667 52.48-110.506667 30.293333-17.493333-9.813333-29.866667-25.6-35.413333-43.52l-173.653334 0.853333a211.626667 211.626667 0 0 1-33.28 82.773334m310.613334-304.64c107.946667 13.226667 184.746667 110.08 171.52 216.32-13.226667 106.666667-111.36 182.186667-219.306667 168.96a197.504 197.504 0 0 1-146.346667-94.293334l52.906667-30.72a137.386667 137.386667 0 0 0 98.986667 61.866667c74.666667 8.96 140.8-41.813333 149.76-113.066667 8.96-71.253333-43.946667-136.533333-117.76-145.493333-23.04-2.56-45.226667 0.426667-65.28 7.68l-36.266667 18.773333-110.08-203.52h-9.386667a81.322667 81.322667 0 0 1-78.933333-83.2c1.28-44.373333 39.68-78.933333 84.48-77.226666 44.8 2.56 80.213333 38.826667 78.933333 83.2-0.853333 18.773333-8.106667 35.84-19.626666 49.066666l81.066666 149.76c26.453333-8.533333 55.466667-11.52 85.333334-8.106666M352 389.973333c-42.666667-100.266667 2.56-215.04 101.12-256.853333 98.986667-41.813333 213.333333 5.546667 256 105.813333 25.173333 58.453333 20.053333 122.453333-8.533333 173.653334l-52.906667-30.72c17.92-34.56 20.906667-76.8 3.84-116.48-29.013333-68.266667-106.24-101.12-172.373333-73.386667-66.56 28.16-96.426667 106.666667-67.413334 174.933333 11.946667 28.16 32 49.92 56.32 64.426667l16.64 8.96-130.986666 212.906667c1.28 2.133333 2.986667 4.693333 4.266666 8.106666 20.906667 38.826667 6.4 87.893333-32.853333 108.8-38.826667 20.906667-87.893333 5.546667-109.226667-34.56-20.906667-39.68-6.4-88.746667 32.853334-109.653333 16.64-8.96 34.986667-11.093333 52.48-7.253333l98.56-160.853334c-20.053333-18.346667-37.12-41.386667-47.786667-67.84z\"\n }, null, -1)]))])) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 3,\n icon: $options.fontAwesomeIcon\n }, null, 8, [\"icon\"]))], 16);\n}","export default {\n name: 'ChannelIcon',\n inheritAttrs: false,\n props: {\n type: {\n type: String,\n required: true\n }\n },\n computed: {\n fontAwesomeIcon() {\n const icons = {\n cfr2: ['fab', 'cloudflare'],\n s3: ['fab', 'aws'],\n discord: ['fab', 'discord']\n };\n return icons[this.type] || 'server';\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./ChannelIcon.vue?vue&type=template&id=ce6ff2ce&scoped=true\"\nimport script from \"./ChannelIcon.vue?vue&type=script&lang=js\"\nexport * from \"./ChannelIcon.vue?vue&type=script&lang=js\"\n\nimport \"./ChannelIcon.vue?vue&type=style&index=0&id=ce6ff2ce&scoped=true&lang=css\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ce6ff2ce\"]])\n\nexport default __exports__"],"names":["_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","href","logoHref","target","class","logo","link","logoClasses","alt","src","logoUrl","name","props","type","String","default","validator","value","includes","customSrc","position","size","enableHover","Boolean","useConfigLink","computed","this","userConfig","logoLink","__exports__","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","key","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_component_font_awesome_icon","_component_el_button","_component_el_tooltip","show","$t","count","totalCount","content","placement","circle","onClick","toggleViewMode","icon","viewMode","_","clearHistory","$event","$emit","historyList","length","ref","onScroll","args","handleScroll","groupedHistory","group","date","items","item","time","isImage","url","loading","onError","handleImageError","isVideo","muted","copyLink","openLink","deleteItem","title","formatTime","hasMore","loadingMore","spin","data","allHistory","pageSize","currentPage","watch","val","resetAndLoad","groups","forEach","Date","dateStr","getFullYear","getMonth","padStart","getDate","push","Object","keys","sort","a","b","map","mounted","savedMode","localStorage","getItem","methods","loadAllHistory","loadMore","history","JSON","parse","e","console","error","setTimeout","start","end","newItems","slice","container","scrollTop","scrollHeight","clientHeight","setItem","$confirm","confirmButtonText","cancelButtonText","then","removeItem","$message","success","catch","filter","i","stringify","fileName","imageExtensions","extension","split","pop","toLowerCase","videoExtensions","timestamp","year","month","day","hours","getHours","minutes","getMinutes","seconds","getSeconds","navigator","clipboard","writeText","window","open","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_component_ChannelIcon","_component_el_radio","_component_el_radio_group","_component_el_option","_component_el_select","_component_el_input","_component_el_switch","_component_el_slider","_component_el_input_number","_component_el_dialog","modelValue","visible","width","dialogWidth","uploadChannel","label","currentChannelList","channelName","placeholder","clearable","ch","uploadFolder","handleUploadFolderInput","autoRetry","uploadNameType","convertToWebp","customerCompress","compressBar","min","max","step","compressQuality","precision","serverCompress","components","ChannelIcon","startsWith","Array","Number","emits","get","set","innerWidth","style","autoplay","playsinline","loop","_component_el_text","_component_el_progress","_component_Link","_component_el_icon","_component_Delete","file","truncated","truncateFilename","status","finalURL","readonly","selectAllText","urlSize","prepend","mdURL","htmlURL","ubbURL","percentage","progreess","IMAGE_EXTENSIONS","VIDEO_EXTENSIONS","Link","Delete","required","ext","filename","maxLength","lastDotIndex","lastIndexOf","substring","keepEnd","keepStart","event","message","_component_el_upload","_component_el_card","_component_List","_component_Checked","_component_Failed","_component_el_dropdown_item","_component_el_dropdown_menu","_component_el_dropdown","_component_UploadFileItem","_component_el_scrollbar","onMousemove","handleUploadCardMouseMove","onMouseleave","handleUploadCardMouseLeave","uploadMethod","uploading","fileList","drag","multiple","uploadFile","onSuccess","handleSuccess","handleError","beforeUpload","handleProgress","viewBox","fill","stroke","d","innerHTML","pastedUrls","rows","pasteCardMethodButtonSize","handleUploadPasteUrls","pasteUploadMethod","role","listScrolled","uploadingCount","waitingCount","uploadSuccessCount","uploadErrorCount","disabled","disableTooltip","copyAll","dropdown","autoReUpload","onChange","handleAutoRetryChange","retryError","clearFileList","clearSuccessList","reverse","onCopy","handleCopy","onRemove","handleRemove","onPreviewError","f","buildFileUrls","srcID","rootUrl","getUrlByFormat","format","md","html","ubb","updateFileListUrls","urls","assign","K","Uint32Array","rotr","x","n","processBlock","block","H","W","s0","s1","c","g","h","S1","temp1","S0","maj","temp2","createSha256","buffer","Uint8Array","bufferLength","totalLength","update","offset","needed","toCopy","Math","subarray","digest","bitLength","view","DataView","setUint32","floor","hex","toString","async","computeSha256","sha256","CHUNK_SIZE","chunk","arrayBuffer","log","round","UploadFileItem","selectedUrlForm","useCustomUrl","customUrlPrefix","urlPrefix","maxUploading","exceptionList","fileListLength","uploadCount","maxRetryCount","retryTimer","retryDelay","uploadQueue","activeUploads","maxConcurrentUploads","abortControllers","Map","handler","$nextTick","$refs","scrollContainer","setScrollTop","deep","immediate","$store","commit","location","protocol","host","document","addEventListener","handlePaste","storeAutoReUpload","beforeUnmount","removeEventListener","find","uid","waitingItem","uploadingItem","fileItem","uploadSingleFile","HF_DIRECT_THRESHOLD","uploadToHuggingFaceDirect","DISCORD_CHUNK_THRESHOLD","uploadFileInChunks","CHUNK_THRESHOLD","processUploadQueue","nextFile","shift","onUploadComplete","needServerCompress","abortController","AbortController","formData","FormData","append","err","axios","encodeURIComponent","method","withAuthCode","signal","onUploadProgress","progressEvent","percentCompleted","loaded","total","onProgress","percent","res","code","response","finally","delete","fileSize","fileType","totalChunks","ceil","precomputedSha256","initFormData","initResponse","Error","uploadId","maxConcurrency","chunkProgress","nextChunkIndex","hasError","errorMsg","isCancelled","uploadChunk","chunkIndex","retryCount","maxRetries","totalPercent","reduce","warn","Promise","resolve","pool","currentIndex","all","duration","mergeFormData","closeAll","cleanupUploadResources","cleanupError","has","abort","timeout","replace","saveToHistory","newRecord","now","scheduleAutoRetry","reject","processedFile","canConvertToWebp","convertedFile","convertImageToWebp","toFixed","needCustomCompress","isLtLim","pushFileToQueue","fileUrl","URL","createObjectURL","newFile","File","myUploadCount","join","controller","clear","tagName","clipboardData","uploadFromUrl","validUrls","trim","test","kind","getAsString","callback","mdUrl","htmlUrl","ubbUrl","evt","getAsFile","checkResult","text","urlPattern","post","responseType","headers","disposition","filenameRegex","filenameStarRegex","matches","exec","decodeURIComponent","pathname","blob","retryFailedFiles","files","clearTimeout","filesToRetry","aborted","sampleBytes","fileSample","btoa","fromCharCode","uploadInfoRes","uploadInfo","alreadyExists","needsLfs","uploadAction","header","chunk_size","uploadToHuggingFaceMultipart","uploadRes","fetch","body","ok","commitRes","fullId","filePath","formattedResponse","completionUrl","chunkSize","parseInt","parts","completeParts","totalParts","part","DOMException","index","undefined","etag","partNumber","progress","completeResponse","oid","img","Image","canvas","createElement","ctx","getContext","onload","height","drawImage","toBlob","originalName","newName","webpFile","revokeObjectURL","onerror","glow","uploadCardGlow","rect","currentTarget","getBoundingClientRect","clientX","left","y","clientY","top","opacity","beforeDestroy","inputValue","onFocus","handleFocus","onBlur","handleBlur","onInput","handleInput","suggestions","onMousedown","selectItem","dropdownVisible","directoryTreeRoot","directoryTreeLoaded","directoryTreeLoading","directoryChildrenMap","focusTime","isFocused","refreshSuggestions","ensureDirectoryTreeLoaded","path","normalizedPath","normalizeDirectoryPath","children","inputRef","focus","getDirectorySuggestions","normalized","endsWith","buildDirectoryChildrenMap","treeRoot","walk","node","parentPath","isArray","child","tree","parseDirectoryQuery","normalizedInput","raw","segmentInput","parentSegments","queryString","parentChildren","keyword","_component_ToggleDark","_component_DirectorySuggestionInput","_component_DirectoryTreePicker","_component_Logo","_component_UploadForm","_component_UploadSettingsDialog","_component_Footer","_component_UploadHistory","trigger","onCommand","handleDesktopMenuCommand","command","announcementAvailable","$i18n","locale","isFolderInputActive","showDirectorySuggestions","handleFolderInputFocus","handleFolderInputBlur","onSelect","handleDirectorySelect","source","handleChangeUploadMethod","handleMobileMenuCommand","getThemeIcon","getThemeText","isQuickToolbarOpen","handleQuickToolbarLeave","handleQuickToolbarCommand","openCompressDialog","onMouseenter","handleQuickToolbarMoreEnter","toggleQuickToolbar","ownerName","showUrlDialog","changeUrlForm","showCompressDialog","showAnnouncementDialog","center","footer","acknowledgeAnnouncement","announcementContent","showHistory","onClose","mixins","backgroundManager","availableChannels","useDefaultWallPaper","isQuickToolbarPinned","displayedAnnouncementRefreshAt","themeMode","updateCompressConfig","updateStoreUploadChannel","newChannelList","savedChannelName","storeChannelName","some","updateStoreUploadNameType","validateUploadFolder","strictResult","strict","valid","storeUploadFolder","announcement","initializeBackground","uploadCopyUrlForm","compressConfig","parseBoolean","defaultCustomerCompress","parseNumber","defaultCompressQuality","defaultCompressBar","defaultConvertToWebp","storeUploadChannel","defaultUploadChannel","storeAutoRetry","storeUploadNameType","defaultUploadNameType","customUrlSettings","storeUploadMethod","fetchAvailableChannels","defaultUploadFolder","cusDarkMode","getters","useDarkMode","showAnnouncementIfNeeded","UploadForm","Footer","ToggleDark","Logo","UploadHistory","UploadSettingsDialog","DirectoryTreePicker","DirectorySuggestionInput","defaultChannelName","result","handleManage","$router","defaultValue","num","parseFloat","isNaN","openUrlDialog","handleLogout","authType","withCredentials","closeQuickToolbar","handleShowAnnouncement","next","openAnnouncement","info","getAnnouncementRefreshAt","refreshAt","announcementRefreshAt","isFinite","acknowledgedRefreshAt","t","module","exports","r","o","l","call","m","defineProperty","enumerable","Symbol","toStringTag","__esModule","create","bind","prototype","hasOwnProperty","p","s","w","PNG","JPEG","GIF","u","throw","done","apply","toDataURL","match","atob","charCodeAt","Blob","download","appendChild","createEvent","initEvent","dispatchEvent","removeChild","FileReader","onloadend","readAsDataURL","scale","orientation","rotate","PI","translate","quality","accuracy","abs","pow","v","id","handleToggleClick","mode","isAuto","isDark","cx","cy","mask","x1","y1","x2","y2","_component_el_tree","_component_el_popover","_component_el_drawer","_directive_loading","isDesktop","popoverVisible","transition","reference","$slots","fetchDirectoryTree","treeData","treeProps","currentDirectory","onNodeClick","handleNodeClick","expanded","openDrawer","drawerVisible","direction","windowWidth","newVal","treeRef","store","nodesMap","treeRefMobile","setCurrentKey","handleResize","fetchWithAuth","json","validateFolderPath","i18n","global","dotPattern","invalidChars","isRedirecting","options","credentials","router","disableFooter","thisYear","footerLink","xmlns","$attrs","fontAwesomeIcon","inheritAttrs","icons","cfr2","s3","discord"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/36.1f3c2bdf.js.map.gz b/frontend-dist/js/36.1f3c2bdf.js.map.gz deleted file mode 100644 index ae0568d8f6eedaf32ea9ac5bea35587a50f0e013..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78791 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 diff --git a/frontend-dist/js/app.33af96b9.js b/frontend-dist/js/app.33af96b9.js new file mode 100644 index 00000000..ec4e37b9 --- /dev/null +++ b/frontend-dist/js/app.33af96b9.js @@ -0,0 +1,2 @@ +(function(){"use strict";var e={457:function(e,a,t){var o=t(94373);const n=o.A.create({baseURL:"/",withCredentials:!0});a.A=n},16915:function(e,a,t){var o=t(48512),n=t(51219),l=t(25507),i=t(457),r=t(46638);const s=(e,a,t)=>{i.A.get("/api/auth/sessionCheck",{withCredentials:!0}).then(a=>{const o=a.data||{};if(!o.adminRequired)return l.A.commit("setAdminLoggedIn",!0),t();if(o.valid&&"admin"===o.authType)return l.A.commit("setAdminLoggedIn",!0),t();const i=l.A.state.adminLoggedIn;l.A.commit("setAdminLoggedIn",!1),"adminLogin"!==e.name?(i&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"adminLogin"})):t()}).catch(()=>{const a=l.A.state.adminLoggedIn;l.A.commit("setAdminLoggedIn",!1),"adminLogin"!==e.name?(a&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"adminLogin"})):t()})},d=(e,a,t)=>{i.A.get("/api/auth/sessionCheck",{withCredentials:!0}).then(a=>{const o=a.data||{};if(!o.userRequired)return l.A.commit("setUserLoggedIn",!0),t();if(o.valid)return l.A.commit("setUserLoggedIn",!0),t();const i=l.A.state.userLoggedIn;l.A.commit("setUserLoggedIn",!1),"login"!==e.name?(i&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"login"})):t()}).catch(()=>{const a=l.A.state.userLoggedIn;l.A.commit("setUserLoggedIn",!1),"login"!==e.name?(a&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"login"})):t()})},c=[{path:"/",name:"home",component:()=>Promise.all([t.e(903),t.e(173),t.e(30),t.e(24)]).then(t.bind(t,62024)),beforeEnter:d},{path:"/login",name:"login",component:()=>Promise.all([t.e(903),t.e(380),t.e(63)]).then(t.bind(t,61880))},{path:"/dashboard",name:"dashboard",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(30),t.e(549)]).then(t.bind(t,11017)),beforeEnter:s},{path:"/customerConfig",name:"customerConfig",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(322),t.e(5)]).then(t.bind(t,27005)),beforeEnter:s},{path:"/systemConfig",name:"systemConfig",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(322),t.e(645)]).then(t.bind(t,37645)),beforeEnter:s},{path:"/adminLogin",name:"adminLogin",component:()=>Promise.all([t.e(903),t.e(380),t.e(803)]).then(t.bind(t,16556))},{path:"/blockimg",name:"blockimg",component:()=>Promise.all([t.e(903),t.e(711)]).then(t.bind(t,5215))},{path:"/whiteliston",name:"whiteliston",component:()=>Promise.all([t.e(903),t.e(773)]).then(t.bind(t,86569))},{path:"/browse/:dir*",name:"publicBrowse",component:()=>t.e(743).then(t.bind(t,92743))},{path:"/:pathMatch(.*)*",name:"notFound",component:()=>Promise.all([t.e(903),t.e(787)]).then(t.bind(t,75875))}],u=(0,o.aE)({history:(0,o.LA)("/"),routes:c});a.A=u},25507:function(e,a,t){t(18111),t(61701);var o=t(60782),n=t(457),l=t(55131);a.A=(0,o.y$)({state:{userConfig:null,bingWallPapers:[],adminLoggedIn:!1,userLoggedIn:!1,uploadMethod:"default",uploadCopyUrlForm:"",compressConfig:{customerCompress:void 0,compressQuality:void 0,compressBar:void 0,serverCompress:void 0,convertToWebp:void 0},storeUploadChannel:"",storeChannelName:null,storeAutoRetry:!0,storeUploadNameType:"",uploadFolder:"",customUrlSettings:{useCustomUrl:"false",customUrlPrefix:""},adminUrlSettings:{useCustomUrl:"false",customUrlPrefix:""},autoReUpload:!0,useDarkMode:null,cusDarkMode:!1},getters:{userConfig:e=>e.userConfig,bingWallPapers:e=>e.bingWallPapers,adminLoggedIn:e=>e.adminLoggedIn,userLoggedIn:e=>e.userLoggedIn,storeUploadMethod:e=>e.uploadMethod,uploadCopyUrlForm:e=>e.uploadCopyUrlForm,compressConfig:e=>e.compressConfig,storeUploadChannel:e=>e.storeUploadChannel,storeChannelName:e=>e.storeChannelName,storeUploadNameType:e=>e.storeUploadNameType,customUrlSettings:e=>e.customUrlSettings,storeAutoRetry:e=>e.storeAutoRetry,adminUrlSettings:e=>e.adminUrlSettings,storeUploadFolder:e=>e.uploadFolder||localStorage.getItem("uploadFolder")||"",useDarkMode:e=>e.useDarkMode,cusDarkMode:e=>e.cusDarkMode,storeAutoReUpload:e=>e.autoReUpload},mutations:{setUserConfig(e,a){e.userConfig=a},setBingWallPapers(e,a){e.bingWallPapers=a},setAdminLoggedIn(e,a){e.adminLoggedIn=a},setUserLoggedIn(e,a){e.userLoggedIn=a},setUploadMethod(e,a){e.uploadMethod=a},setUploadCopyUrlForm(e,a){e.uploadCopyUrlForm=a},setCompressConfig(e,{key:a,value:t}){e.compressConfig[a]=t},setStoreUploadChannel(e,a){e.storeUploadChannel=a},setStoreChannelName(e,a){e.storeChannelName=a},setStoreUploadNameType(e,a){e.storeUploadNameType=a},setCustomUrlSettings(e,{key:a,value:t}){e.customUrlSettings[a]=t},setStoreAutoRetry(e,a){e.storeAutoRetry=a},setAdminUrlSettings(e,{key:a,value:t}){e.adminUrlSettings[a]=t},setUseDarkMode(e,a){e.useDarkMode=a},setCusDarkMode(e,a){e.cusDarkMode=a},setStoreUploadFolder(e,a){e.uploadFolder=a,localStorage.setItem("uploadFolder",a)},setStoreAutoReUpload(e,a){e.autoReUpload=a}},actions:{async fetchUserConfig({commit:e}){try{const a=await n.A.get("/api/userConfig");e("setUserConfig",a.data)}catch(a){console.log(a)}},async fetchBingWallPapers({commit:e}){try{const a=await n.A.get("/api/bing/wallpaper"),t=a.data.data,o=t.map(e=>({url:"https://www.bing.com"+e.url}));await Promise.all(o.map(e=>new Promise((a,t)=>{const o=new Image;o.onload=a,o.onerror=t,o.src=e.url}))),e("setBingWallPapers",o)}catch(a){console.log(a)}}},modules:{},plugins:[(0,l.A)({paths:["userConfig","uploadMethod","uploadCopyUrlForm","compressConfig","storeUploadChannel","storeChannelName","storeAutoRetry","storeUploadNameType","uploadFolder","customUrlSettings","adminUrlSettings","autoReUpload","useDarkMode","cusDarkMode"]})]})},46638:function(e,a,t){t.d(a,{Ay:function(){return c},xS:function(){return d}});var o=t(85384),n=JSON.parse('{"login":{"title":"登录到 {owner} 图床","adminTitle":"管理端登录","password":"密码","username":"用户名","passwordPlaceholder":"请输入认证码","usernamePlaceholder":"请输入用户名","adminPasswordPlaceholder":"请输入密码","submit":"登录","success":"登录成功","failed":"登录失败,请检查密码是否正确","adminFailed":"用户名或密码错误","serverError":"服务器错误","systemError":"系统错误","authRequired":"请先认证!","authFailed":"认证失败!"},"upload":{"folderPlaceholder":"上传目录","pasteUpload":"粘贴上传","fileUpload":"文件上传","dragUploadText":"拖拽 点击Ctrl + V 粘贴上传","pasteUrlPlaceholder":"粘贴外链上传,多个外链用换行分隔","pasteUploadBtn":"上 传","pasteSave":"转存","pasteExternal":"外链","history":"上传记录","announcement":"查看公告","noAnnouncement":"暂无公告","announcementTitle":"公告","announcementAck":"我已知晓!","settings":"上传设置","linkFormat":"链接格式","manage":"系统管理","logout":"退出登录","logoutSuccess":"已退出登录","viewDocs":"查看文档","switchUploadMethod":"切换上传方式","copyAll":"整体复制","retryFailed":"失败重试","clearList":"清空列表","clearAll":"清空全部","clearUploaded":"清空已上传"},"uploadForm":{"deleted":"{name}已删除","uploadSuccess":"{name}上传成功","uploadFailed":"{name}上传失败","compressFailedCannotUpload":"{name}压缩失败,无法上传!","fileTooLarge":"{name}文件过大,无法上传!","compressedFileTooLarge":"{name}压缩后文件过大,无法上传!","copySuccess":"复制成功","copyFailed":"复制失败","copyAllSuccess":"整体复制成功","fileNotUploaded":"文件未上传成功,无法复制链接","fileListCleared":"文件列表已清空","fileListEmpty":"文件列表为空","successFilesCleared":"成功上传文件已清空","successFilesEmpty":"成功上传文件为空","noFailedFiles":"无上传失败文件","autoRetryOn":"自动重试已开启","autoRetryOff":"自动重试已关闭","autoRetry":"自动重试","maxRetryReached":"{name} 已达到最大重试次数({max}),停止重试","urlRequestFailed":"粘贴板中的URL地址请求失败","chunkMerging":"分块上传完成,正在合并文件,请耐心等待...","fileSizeTooLarge":"文件过大","chunkInitFailed":"初始化分块上传失败","uploadError":"上传过程中发生错误","imageLoadFailed":"图片加载失败"},"uploadSettings":{"title":"上传设置","uploadChannel":"上传渠道","channelType":"渠道类型","channelName":"渠道名称","channelNameTooltip":"选择具体的渠道名称,不选择则使用负载均衡或默认渠道","autoSelect":"自动选择","uploadDirectory":"上传目录","uploadDirectoryPlaceholder":"请输入上传目录路径","autoSwitch":"自动切换","autoSwitchTooltip":"对于非分块上传文件,上传失败自动切换到其他渠道上传","fileNaming":"文件命名方式","namingDefault":"默认","namingIndex":"仅前缀","namingOrigin":"仅原名","namingShort":"短链接","filePreprocess":"文件预处理","filePreprocessTooltip":"上传前在本地进行格式转换和压缩,仅对图片文件生效","convertToWebp":"转换为WebP","convertToWebpTooltip":"上传前将图片转换为WebP格式,可有效减小文件体积。转换失败时保持原格式上传","fileCompress":"文件压缩","compressThreshold":"压缩阈值","compressThresholdTooltip":"设置图片大小阈值,超过此值将自动压缩,单位MB","expectedSize":"期望大小","expectedSizeTooltip":"设置压缩后图片大小期望值,单位MB","serverCompress":"服务端压缩","serverCompressTooltip":"1. 在 Telegram 端进行压缩,仅对上传渠道为 Telegram 的图片文件生效
2. 若图片大小(本地压缩后大小)大于10MB,本设置自动失效
3. 若上传分辨率过大、透明背景等图片,建议关闭服务端压缩,否则可能出现未知问题","enableCompress":"开启压缩","confirm":"确定"},"uploadHistory":{"title":"历史记录","totalRecords":"共 {count} 条","switchView":"切换视图","clearRecords":"清空记录","loading":"加载中...","pullToLoadMore":"下拉加载更多","noMoreRecords":"没有更多记录了","emptyHistory":"暂无上传记录","linkCopied":"链接已复制","copyFailed":"复制失败","clearConfirmTitle":"提示","clearConfirmMessage":"确定要清空所有上传记录吗?","clearConfirmOk":"确定","clearConfirmCancel":"取消","recordsCleared":"记录已清空","deleteConfirmMessage":"确定要删除这条记录吗?","recordDeleted":"记录已删除"},"settings":{"linkFormatTitle":"链接格式设置","defaultCopyLink":"默认复制链接","rawLink":"原始链接","customLink":"自定义链接","customLinkTooltip":"默认链接为https://your.domain/file/xxx.jpg
如果启用自定义链接格式,只保留xxx.jpg部分,其他部分请自行输入","enableCustom":"启用自定义","customPrefix":"自定义前缀","customPrefixPlaceholder":"请输入自定义链接前缀","confirm":"确定","s3Link":"S3链接"},"dashboard":{"searchPlaceholder":"搜索:#标签 -#排除标签","sortByDateDesc":"按时间倒序","sortByNameAsc":"按名称升序","selectedItems":"项已选","clearSelection":"清除选择","copy":"复制","delete":"删除","download":"下载","move":"移动","tagManagement":"标签管理","addToBlacklist":"加入黑名单","addToWhitelist":"加入白名单","linkFormat":"链接格式","listView":"列表视图","cardView":"卡片视图","logout":"退出登录","rootDirectory":"根目录","totalFiles":"共 {count} 个文件","noMatchingFiles":"未找到匹配的文件或文件夹","currentDirEmpty":"当前目录为空","adjustSearchHint":"尝试调整搜索条件或筛选器","uploadHint":"上传文件后将显示在这里","loadMore":"加载更多","totalPages":"共 {count} 页","jumpTo":"跳至","preview":"预览","fileName":"文件名","tags":"标签","channelType":"渠道类型","channelNameCol":"渠道名称","uploadAddress":"上传地址","fileSize":"大小","uploadTime":"上传时间","actions":"操作","externalTag":"外链","unknownTag":"未知","detail":"详情","copyLink":"复制链接","moveFile":"移动","downloadFile":"下载","loadFailed":"加载失败","copySuccess":"复制成功","copyFailed":"复制失败","deleteConfirm":"此操作将永久删除该文件, 是否继续?","deleteConfirmTitle":"提示","deleteConfirmOk":"确定","deleteConfirmCancel":"取消","deleteSuccess":"删除成功","deleteFailed":"删除失败","blockConfirm":"此操作将把该文件加入黑名单, 是否继续?","blockSuccess":"加入黑名单成功","blockFailed":"加入黑名单失败","whiteConfirm":"此操作将把该文件加入白名单, 是否继续?","whiteSuccess":"加入白名单成功","whiteFailed":"加入白名单失败","deleteFolderConfirm":"此操作将永久删除文件夹, 是否继续?","deleteFileConfirm":"此操作将永久删除该文件, 是否继续?","batchDeleteConfirm":"此操作将永久删除选中的文件及文件夹, 是否继续?","batchDeleteSuccess":"批量删除成功","batchDeleteFailed":"批量删除失败","batchBlockConfirm":"此操作将把选中的文件加入黑名单, 是否继续?","batchBlockSuccess":"批量加入黑名单成功","batchBlockFailed":"批量加入黑名单失败","batchWhiteConfirm":"此操作将把选中的文件加入白名单, 是否继续?","batchWhiteSuccess":"批量加入白名单成功","batchWhiteFailed":"批量加入白名单失败","noLinksAvailable":"没有可复制的链接","batchCopySuccess":"批量复制 {count} 个链接成功","batchCopyFailed":"批量复制链接失败,请重试","batchCopyLinksSuccess":"批量复制链接成功","copyFileLinkSuccess":"复制文件链接成功","fileListMemoryCacheWarning":"文件列表较大,已切换为内存缓存;刷新页面后需要重新加载列表。","indexingWarning":"索引构建中,当前搜索和排序结果可能不准确,请稍后再试。","loadMoreFailed":"加载更多文件失败,请检查网络连接","moveSuccess":"移动成功","moveFailed":"移动失败","moveTargetSameAsCurrent":"目标文件夹不能是当前文件夹","invalidPageNumber":"请输入有效的页码","pageExceedsMax":"页码不能超过 {max}","loadingData":"正在加载数据,请稍候...","loadDataFailed":"加载数据失败,请检查网络连接","fetchFileListFailed":"获取文件列表失败","refreshFailed":"刷新失败,请重试","selectFilesFirst":"请先选择文件","syncDataError":"同步数据时出错,请检查网络连接","fetchingFileList":"正在获取文件列表...","folderEmptyNoLinks":"文件夹为空,没有可复制的链接","copiedFileLinks":"已复制 {count} 个文件链接","copyFolderLinksFailed":"复制文件夹链接失败,请重试"},"dashboardTabs":{"fileManagement":"文件管理","userManagement":"用户管理","systemSettings":"系统设置","fileUpload":"文件上传"},"fileDetail":{"title":"文件详情","download":"下载","tags":"标签","blacklist":"黑名单","whitelist":"白名单","deleteBtn":"删除","edit":"编辑","rename":"重命名","save":"保存","cancel":"取消","originUrl":"原始链接","fileNameLabel":"文件名","fileNamePlaceholder":"请输入文件名","fileType":"文件类型","fileTypePlaceholder":"如 image/jpeg","fileSizeLabel":"文件大小","imageDimensions":"图片尺寸","noDimensions":"无","uploadTimeLabel":"上传时间","channelTypeAndName":"渠道类型/名称","accessStatusAndReview":"访问状态/审查","uploadIP":"上传IP","uploadAddressLabel":"上传地址","fileTags":"文件标签","noTags":"暂无标签","unknown":"未知","accessNormal":"正常","accessNormalWhitelist":"正常(白名单)","accessBlockedBlacklist":"已屏蔽(黑名单)","accessBlockedReview":"已屏蔽(审查不通过)","orientationLandscape":"横","orientationPortrait":"竖","orientationSquare":"方","linkCopied":"链接已复制","metadataSaved":"元数据保存成功","metadataSaveFailed":"保存元数据失败","renameTitle":"重命名 File ID","renameLabel":"新 File ID","renamePlaceholder":"请输入新的 File ID","renameCancel":"取消","renameConfirm":"确认重命名","renameSuccess":"文件重命名成功","renameConflict":"目标文件名已存在","renameFailed":"重命名失败"},"filter":{"accessStatus":"访问状态","normal":"正常","blocked":"已屏蔽","blackWhiteList":"黑白名单","whiteList":"白名单","blackList":"黑名单","notSet":"未设置","reviewResult":"审查结果","teenContent":"12+内容","adultContent":"成人内容","fileType":"文件类型","image":"图片","video":"视频","audio":"音频","other":"其他","channelType":"渠道类型","externalLink":"外链","channelName":"渠道名称","clearFilters":"清除筛选"},"moveFile":{"title":"移动文件","batchTitle":"批量移动文件","targetDirectory":"目标目录","targetPlaceholder":"请输入目标目录路径","hint":"提示:路径以 / 开头表示根目录,如 /photos/2024/","hintMobile":"提示:路径以 / 开头表示根目录","selectDirectory":"选择目录","cancel":"取消","confirm":"确定","retry":"重试","authFailed":"认证失败,请重新登录","serverError":"服务器错误,请稍后重试","loadTreeFailed":"加载目录树失败,请检查网络连接"},"batchTag":{"title":"批量标签管理","addTab":"添加","removeTab":"移除","clearTab":"清空","addDescription":"为选中的 {count} 个文件添加标签","inputPlaceholder":"输入标签名称","pendingTags":"待添加的标签","noPendingTags":"暂无待添加标签","addToAllFiles":"添加到所有文件","removeDescription":"移除选中文件的共有标签","commonTags":"共有标签","noCommonTags":"选中的文件没有共有标签","clearDescription":"清空选中的 {count} 个文件的所有标签","clearWarningTitle":"⚠️警告","clearWarningDesc":"此操作将清空所有选中文件的标签,且不可恢复","confirmClearAll":"确认清空所有标签","tagAlreadyInList":"标签已在列表中","pleaseAddTags":"请先添加要批量添加的标签","addSuccess":"成功为 {count} 个文件添加标签","addFailed":"批量添加标签失败","removeSuccess":"成功从 {count} 个文件中移除标签","removeFailed":"移除标签失败","clearConfirmMessage":"确定要清空选中的 {count} 个文件的所有标签吗?此操作不可恢复。","clearConfirmTitle":"确认清空","clearConfirmOk":"确定","clearConfirmCancel":"取消","clearCancelled":"已取消清空操作","clearSuccess":"成功清空 {count} 个文件的标签","clearFailed":"清空标签失败","loadCommonTagsFailed":"加载共有标签失败"},"tagManagement":{"title":"标签管理","inputPlaceholder":"输入标签名称","currentTags":"当前标签","noTags":"暂无标签","popularTags":"常用标签","loading":"加载中...","noPopularTags":"暂无常用标签","close":"关闭","tagExists":"标签已存在","addSuccess":"标签添加成功","addFailed":"添加标签失败","removeSuccess":"标签删除成功","removeFailed":"删除标签失败","loadFailed":"加载标签失败"},"mobileAction":{"viewDetail":"查看详情","copyLink":"复制链接","downloadFile":"下载文件","moveFile":"移动文件","tagManagement":"标签管理","moveFolder":"移动文件夹","deleteFile":"删除文件","deleteFolder":"删除文件夹"},"mobileDirectory":{"title":"目录导航","rootDirectory":"根目录","goBack":"返回上一级"},"sysConfig":{"logout":"退出登录"},"sysConfigTabs":{"systemStatus":"系统状态","uploadSettings":"上传设置","securitySettings":"安全设置","pageSettings":"网页设置","otherSettings":"其他设置"},"dateRangeCalendar":{"previousMonth":"上个月","nextMonth":"下个月","startDate":"起始日期","endDate":"结束日期","rangeSeparator":"至","monthTitle":"{year}-{month}","weekdaySun":"日","weekdayMon":"一","weekdayTue":"二","weekdayWed":"三","weekdayThu":"四","weekdayFri":"五","weekdaySat":"六"},"sysStatus":{"totalFiles":"文件总数","clickToRefresh":"点击刷新","indexUpdateTime":"索引更新时间","systemVersion":"系统版本","clickToViewChangelog":"点击查看更新日志","channelDistribution":"上传渠道分布","fileStatusDistribution":"文件状态分布","uploadTrend":"上传趋势","uploadTrendGroupBy":"上传趋势分组方式","totalUploads":"上传总数","byChannelType":"渠道类型","byChannelName":"渠道名称","selectDateRange":"选择日期范围","otherChannels":"其他","uploadsUnit":"次","noData":"暂无数据","totalFilesLabel":"文件总数","statusTypes":"状态类型","systemMaintenance":"系统维护","rebuildIndex":"重建索引","rebuilding":"重建中...","rebuildTooltip":"重新扫描所有文件并更新索引数据,适用于数据不一致时的修复","backupData":"备份数据","backingUp":"备份中...","backupTooltip":"备份所有文件元数据和系统设置到JSON文件","restoreData":"恢复数据","restoring":"恢复中...","restoreTooltip":"从备份文件恢复数据,将覆盖现有的文件元数据和系统设置","cancelOperation":"取消操作","retry":"重试","close":"关闭","records":"条记录","aboutToComplete":"即将完成","seconds":"约 {count} 秒","minutes":"约 {count} 分钟","hoursMinutes":"约 {hours} 小时 {minutes} 分钟","phaseFetching":"正在获取数据","phaseSorting":"正在排序","phaseUploading":"正在上传","phaseFinalizing":"正在完成","phaseBuilding":"正在构建备份","phaseDownloading":"正在生成下载","phaseRestoringFiles":"正在恢复文件","phaseRestoringSettings":"正在恢复设置","phaseCompleted":"已完成","phaseRetrying":"正在重试","rebuildSuccess":"索引重建完成!共处理 {count} 个文件","backupSuccess":"备份完成!共备份 {count} 个文件","backupSuccessWithSettings":"备份完成!共备份 {fileCount} 个文件,{settingsCount} 个设置项","operationInProgress":"已有操作正在进行中","selectJsonFile":"请选择JSON格式的备份文件","restoreConfirmMessage":"恢复操作将覆盖现有的文件元数据和系统设置,此操作不可逆。确定要继续吗?","restoreConfirmTitle":"确认恢复","restoreConfirmOk":"确定恢复","restoreConfirmCancel":"取消","invalidBackupFile":"备份文件格式无效,请选择有效的 JSON 文件","restoreSuccess":"恢复完成!已恢复 {files} 个文件和 {settings} 个设置项,正在重建索引...","restoreFailed":"恢复数据失败","fetchIndexFailed":"获取索引信息失败","unknown":"未知","blocked":"已屏蔽","normalStatus":"正常","latestUpload":"最近上传","earliestUpload":"最早上传","daysAgo":"{count}天前","hoursAgo":"{count}小时前","minutesAgo":"{count}分钟前","justNow":"刚刚","cancellingRebuild":"正在取消索引重建..."},"sysUpload":{"title":"上传渠道管理","titleTooltip":"管理所有上传渠道的配置,点击卡片查看详情或编辑","filterPlaceholder":"筛选渠道类型","addChannel":"添加渠道","loadBalance":"负载均衡","unnamedChannel":"未命名渠道","envVariable":"环境变量","noChannels":"暂无 {type} 渠道","detail":"详情","editBtn":"编辑","deleteBtn":"删除","addDialogTitle":"添加新渠道","channelTypeLabel":"渠道类型","channelTypePlaceholder":"请选择渠道类型","channelNameLabel":"渠道名称","channelNamePlaceholder":"请输入渠道名称","channelNameImmutableTip":"添加后将作为文件关联渠道的唯一标识,不支持修改","channelNameEditDisabledTip":"渠道名称用于关联已上传文件,不支持修改","botTokenLabel":"Bot Token","botTokenPlaceholder":"请输入 Bot Token","chatIdLabel":"Chat ID","chatIdPlaceholder":"请输入 Chat ID","proxyDomain":"代理域名","proxyDomainPlaceholder":"可选,例如: your-proxy.example.com","endpointLabel":"Endpoint","endpointPlaceholder":"例如: https://s3.us-east-005.backblazeb2.com","cdnDomain":"CDN 域名","cdnDomainPlaceholder":"可选,请填写完整 CDN 访问地址前缀,例如:https://cdn.example.com","cdnDomainTip":"可选配置。可用于生成和展示文件访问链接,服务端读取文件内容时也会优先尝试通过 CDN 读取。","bucketName":"存储桶名称","bucketNamePlaceholder":"请输入存储桶名称","bucketRegion":"存储桶区域","bucketRegionPlaceholder":"默认填写 auto","accessKeyId":"访问密钥 ID","accessKeyIdPlaceholder":"请输入访问密钥 ID","secretAccessKey":"机密访问密钥","secretAccessKeyPlaceholder":"请输入机密访问密钥","pathStyle":"路径风格","pathStyleTip":"使用 OpenList 等不兼容主机风格服务时需开启","quotaLimit":"容量限制","quotaLimitGB":"容量上限 (GB)","quotaThreshold":"停用阈值 (%)","channelIdLabel":"Channel ID","channelIdPlaceholder":"请输入 Channel ID","nitroMember":"Nitro 会员","nitroTip":"会员单文件限制 25MB,否则为 10MB","discordWarning":"Discord 有接口频率限制,不建议将其用作大规模并发场景","repoName":"仓库名","repoNamePlaceholder":"格式: username/repo-name","accessToken":"Access Token","accessTokenPlaceholder":"请输入 Access Token","privateRepo":"私有仓库","privateRepoTip":"私有仓库限制 100GB","webdavBaseUrl":"WebDAV 基础地址","webdavBaseUrlPlaceholder":"例如: https://dav.example.com/remote.php/dav/files/user/imgbed/","webdavUsername":"用户名","webdavUsernamePlaceholder":"可选用户名","webdavPassword":"密码","webdavPasswordPlaceholder":"可选密码","webdavPublicUrlPlaceholder":"可选,请填写完整公开访问地址前缀,例如:https://cdn.example.com/imgbed","webdavPublicUrlTip":"可选配置。服务端读取文件内容时会优先尝试通过该公开地址读取,失败后回退 WebDAV API。","webdavHeaders":"自定义请求头","webdavHeadersPlaceholder":"可选 JSON 对象,例如: {\'{\\"X-Api-Key\\":\\"value\\"}\'}","webdavHeadersInvalid":"自定义请求头必须是有效的 JSON 对象","webdavCreateDirectory":"自动创建目录","webdavCreateDirectoryTip":"上传文件前自动创建父级目录","cancel":"取消","confirmAdd":"确认添加","detailDialogTitle":"渠道详情 - {name}","channelNameDetail":"渠道名称","channelTypeDetail":"渠道类型","statusLabel":"状态","enabled":"已启用","disabled":"已禁用","configSource":"配置来源","publicUrl":"公开访问链接","notSet":"未设置","isPathStyle":"是","isNotPathStyle":"否","currentUsage":"当前用量","closeBtn":"关闭","editDialogTitle":"编辑渠道 - {name}","enableChannel":"启用渠道","saveChanges":"保存修改","r2ConfigNote":"请按照
配置 R2 渠道 文档说明添加 R2 渠道","reservedName":"该名称为系统保留名称,请使用其他名称","duplicateName":"该类型下已存在同名渠道,请使用其他名称","fixedChannelCannotDelete":"环境变量配置的渠道无法删除","deleteChannelConfirm":"确定要删除该渠道吗?删除后,仍关联该渠道的文件可能无法访问。","quotaInitConfirm":"首次启用容量限制需要统计现有文件容量,这可能需要一些时间。是否立即统计?","quotaInitTitle":"初始化容量统计","quotaInitConfirmBtn":"立即统计","quotaInitCancelBtn":"稍后手动统计","quotaInitLater":"您可以稍后点击刷新按钮手动统计","quotaCalculating":"正在统计容量,请稍候...","quotaCalculateSuccess":"容量统计完成","quotaCalculateFailed":"统计失败","quotaCalculateError":"统计失败: "},"sysSecurity":{"authManagement":"认证管理","userAuth":"用户端认证","adminAuth":"管理端认证","uploadPassword":"上传密码","confirmPassword":"确认密码","adminUsername":"用户名","adminPassword":"密码","apiTokenManagement":"API Token 管理","imageReview":"图像审查","imageReviewTooltip":"仅对非分块上传文件生效,支持 nsfwjs 和 moderatecontent.com 渠道","enableReview":"开启审查","reviewChannel":"审查渠道","reviewChannelPlaceholder":"请选择审查渠道","apiKey":"API Key","apiPath":"API 路径","ipQuery":"IP 归属地查询","ipQueryTooltip":"上传时按配置调用自定义 API 查询上传 IP 归属地,参数值支持 {\'{ip}\'} 占位符","enableIpQuery":"开启查询","ipQueryChannel":"查询渠道","ipQueryChannelPlaceholder":"请选择查询渠道","customApi":"自定义 API","queryParams":"查询参数","paramNamePlaceholder":"参数名","paramValuePlaceholder":"参数值,如 {\'{ip}\'}","addQueryParam":"添加参数","responseFields":"响应字段","responseFieldsTip":"最终显示内容会按照字段顺序拼接","responseFieldPathPlaceholder":"JSON 路径,如 country.name","addResponseField":"添加字段","uploadManagement":"上传管理","accessManagement":"访问管理","domainFilter":"域名过滤","allowedDomains":"放行域名","allowedDomainsTooltip":"1.针对访问域名设置权限
2.留空默认全部放行,多个域名请用英文逗号分隔","whiteListMode":"白名单模式","enableWhiteList":"是否开启","enableWhiteListTooltip":"1.针对文件设置权限
2.开启后,仅被加入白名单的文件可被访问","settingsSaved":"设置已保存","tokenName":"名称","tokenValue":"Token","permissions":"权限","createdAt":"创建时间","status":"状态","expiresAt":"过期时间","operation":"操作","editBtn":"编辑","deleteBtn":"删除","permUpload":"上传","permDelete":"删除","permList":"列出","permManage":"管理","createTokenTitle":"创建新 API Token","tokenNameLabel":"Token 名称","tokenNamePlaceholder":"请输入Token名称","permissionsLabel":"权限","neverExpire":"永不过期","validPeriod":"有效期","autoDeleteOnExpire":"过期自动删除","createBtn":"创建","editTokenTitle":"编辑 API Token","updateBtn":"更新","tokenCreatedTitle":"Token 创建成功","tokenCreatedWarning":"请妥善保存以下Token,关闭此窗口后将无法再次查看完整Token!","fullToken":"完整Token","copyBtn":"复制","savedBtn":"我已保存","tokenCopied":"Token已复制到剪贴板","copyFailed":"复制失败,请手动复制","tokenCreateSuccess":"Token创建成功","tokenCreateFailed":"Token创建失败","tokenUpdateSuccess":"Token更新成功","tokenUpdateFailed":"Token更新失败","tokenDeleteConfirm":"此操作将永久删除该Token,是否继续?","tokenDeleteConfirmTitle":"提示","tokenDeleteConfirmOk":"确定","tokenDeleteConfirmCancel":"取消","tokenDeleteSuccess":"Token删除成功","tokenDeleteFailed":"Token删除失败","tokenListFailed":"获取Token列表失败","passwordUrlReserved":"密码不能包含部分URL保留字符: % & ? # /","confirmUploadPassword":"请再次输入上传密码","confirmAdminPassword":"请再次输入管理密码","passwordMismatch":"两次输入密码不一致","passwordUnchanged":"未修改(留空保持原密码)","adminPasswordChangedRelogin":"管理端密码已修改,即将跳转到登录页","clearPassword":"清除认证信息","tokenNameRequired":"请输入Token名称","permissionsRequired":"请选择权限","validPeriodRequired":"有效期数值必须大于 0","timeUnitSeconds":"秒","timeUnitMinutes":"分钟","timeUnitHours":"小时","timeUnitDays":"天","timeUnitMonths":"月","timeUnitYears":"年","sessionSecurityPolicy":"会话安全策略","secureMode":"Secure 模式","secureModeTooltip":"开启后,Cookie 仅通过 HTTPS 连接传输,请确保您的站点已启用 HTTPS","userSessionMaxAge":"用户端会话有效期","adminSessionMaxAge":"管理端会话有效期","sessionMaxAgeUnit":"天","sessionMaxAgeInvalid":"会话有效期必须为 1-3650 的正整数"},"sysPage":{"settingsSaved":"设置已保存","refreshAnnouncement":"刷新公告已读状态","otherSettings":"其他设置","channelSelectPlaceholder":"请先选择上传渠道"},"sysOthers":{"remoteTelemetry":"远端遥测","remoteTelemetryTooltip":"便于问题查找和定位,建议开启","enable":"启用","cloudflareApiToken":"CloudFlare API Token","cloudflareApiTokenTooltip":"设置后可以使后端拉黑、删除等操作不受CDN缓存限制
建议设置,设置方式请查阅文档","zoneId":"区域ID","accountEmail":"账户邮箱","randomImageApi":"随机图像API","randomImageApiTooltip":"API具体用法请查阅文档","directory":"目录","directoryTooltip":"1. 开放随机图权限的目录,默认为根目录,多个目录用逗号分隔
2. 目录均采用绝对路径,例如/img/cover,表示该目录及其所有子目录的文件可被随机图API访问","publicBrowse":"访客图库","publicBrowseTooltip":"启用后,访客可通过 /browse 路径浏览指定目录的图片(只读,无法删除/移动)","openDirectory":"开放目录","openDirectoryTooltip":"

允许公开浏览的目录,多个目录用逗号分隔

示例:wallpaper,photos,album

支持子目录:2026/lucky,2026/rich

访问链接:https://你的域名/browse/2026/lucky

","webdav":"WebDAV","webdavTooltip":"启用后,可以通过WebDAV协议访问和管理图片","webdavUsername":"用户名","webdavPassword":"密码","webdavUploadChannel":"上传渠道","webdavDefaultChannel":"默认渠道","webdavChannelName":"指定渠道名","settingsSaved":"设置已保存"},"customerConfig":{"uploadFileList":"上传文件列表","fileNameCol":"文件名","filePreview":"文件预览","uploadTimeCol":"上传时间","ipAddress":"IP地址","address":"地址","uploadCount":"上传次数","allowUpload":"允许上传","allow":"允许","deny":"禁止","loadMore":"加载更多","loadError":"加载更多数据时出错,请检查网络连接","syncError":"同步数据时出错,请检查网络连接"},"publicBrowse":{"searchPlaceholder":"搜索文件名 或 #页码","fileCount":"{count} 个文件","loading":"加载中...","retry":"重试","creditText":"该图库由林酱贡献代码","loadingMore":"加载中...","allLoaded":"已加载全部","creditLink":"林酱贡献","browseDisabled":"公开浏览功能未启用","directoryNotAllowed":"该目录不允许公开访问","accessDenied":"访问被拒绝","loadFailed":"加载失败,请重试","rootDirectory":"根目录","copyLink":"复制链接","copied":"已复制","downloadBtn":"下载","swipeHint":"← 滑动切换 →","rotate90":"旋转90°"},"transformMedia":{"download":"下载","playbackSpeed":"播放速度","normalSpeed":"正常","playMode":"播放模式","stopAfterPlay":"播完停止","sequentialPlay":"顺序播放","loopSingle":"单曲循环","more":"更多"},"directoryTree":{"selectDirectory":"选择目录","retry":"重试","authFailed":"认证失败,请重新登录","serverError":"服务器错误,请稍后重试","loadFailed":"加载目录树失败,请检查网络连接"},"floatingSave":{"saving":"保存中","save":"保存"},"theme":{"lightMode":"浅色模式","darkMode":"深色模式","autoMode":"自动模式"},"common":{"confirm":"确定","cancel":"取消","close":"关闭","save":"保存","delete":"删除","edit":"编辑","copy":"复制","download":"下载","retry":"重试","loading":"加载中...","success":"成功","failed":"失败","warning":"警告","info":"提示","yes":"是","no":"否","all":"全部类型","select":"请选择"},"validation":{"pathMustStartWithSlash":"目标目录必须以 \\"/\\" 开头","pathTraversalNotAllowed":"目标目录不能包含路径穿越字符 \\"..\\"","singleDotNotAllowed":"目标目录不能包含单独的 \\".\\" 路径段","consecutiveSlashNotAllowed":"目标目录不能包含连续的斜杠","invalidCharacters":"目标目录包含非法字符,请使用合法的路径格式","uploadDirReplace":"上传目录"},"language":{"switchTo":"中/En","switchLanguage":"切换语言"},"whitelist":{"title":"白名单模式已启用","description":"抱歉,当前已开启白名单模式,上传的图片需要审核通过后才能展示,请等待审核通过后再进行访问。","goHome":"返回首页","goBack":"返回上页","helpText":"您可以尝试:","uploadImage":"图片上传","refreshPage":"刷新页面"}}'),l=JSON.parse('{"login":{"title":"Login to {owner} ImgHub","adminTitle":"Admin Login","password":"Password","username":"Username","passwordPlaceholder":"Enter auth code","usernamePlaceholder":"Enter username","adminPasswordPlaceholder":"Enter password","submit":"Login","success":"Login successful","failed":"Login failed, please check your password","adminFailed":"Invalid username or password","serverError":"Server error","systemError":"System error","authRequired":"Please authenticate first!","authFailed":"Authentication failed!"},"upload":{"folderPlaceholder":"Upload directory","pasteUpload":"Paste Upload","fileUpload":"File Upload","dragUploadText":"Drag Click or Ctrl + V to paste upload","pasteUrlPlaceholder":"Paste external links, separate multiple links with line breaks","pasteUploadBtn":"Upload","pasteSave":"Save","pasteExternal":"External","history":"Upload History","announcement":"Announcements","noAnnouncement":"No announcements","announcementTitle":"Announcement","announcementAck":"Got it!","settings":"Upload Settings","linkFormat":"Link Format","manage":"Management","logout":"Logout","logoutSuccess":"Logged out","viewDocs":"Documentation","switchUploadMethod":"Switch Upload Method","copyAll":"Copy All","retryFailed":"Retry Failed","clearList":"Clear List","clearAll":"Clear All","clearUploaded":"Clear Uploaded"},"uploadForm":{"deleted":"{name} deleted","uploadSuccess":"{name} uploaded successfully","uploadFailed":"{name} upload failed","compressFailedCannotUpload":"{name} compression failed, cannot upload!","fileTooLarge":"{name} file too large, cannot upload!","compressedFileTooLarge":"{name} still too large after compression, cannot upload!","copySuccess":"Copied successfully","copyFailed":"Copy failed","copyAllSuccess":"All copied successfully","fileNotUploaded":"File not uploaded, cannot copy link","fileListCleared":"File list cleared","fileListEmpty":"File list is empty","successFilesCleared":"Uploaded files cleared","successFilesEmpty":"No uploaded files","noFailedFiles":"No failed files","autoRetryOn":"Auto retry enabled","autoRetryOff":"Auto retry disabled","autoRetry":"Auto Retry","maxRetryReached":"{name} reached max retry limit ({max}), stopping","urlRequestFailed":"URL request from clipboard failed","chunkMerging":"Chunk upload complete, merging file, please wait...","fileSizeTooLarge":"File too large","chunkInitFailed":"Failed to init chunked upload","uploadError":"Upload error occurred","imageLoadFailed":"Image load failed"},"uploadSettings":{"title":"Upload Settings","uploadChannel":"Upload Channel","channelType":"Channel Type","channelName":"Channel Name","channelNameTooltip":"Select a specific channel name. If not selected, load balancing or default channel will be used","autoSelect":"Auto Select","uploadDirectory":"Upload Directory","uploadDirectoryPlaceholder":"Enter upload directory path","autoSwitch":"Auto Switch","autoSwitchTooltip":"For non-chunked uploads, automatically switch to another channel on failure","fileNaming":"File Naming","namingDefault":"Default","namingIndex":"Prefix Only","namingOrigin":"Original Name","namingShort":"Short Link","filePreprocess":"File Preprocessing","filePreprocessTooltip":"Convert format and compress locally before upload, only applies to image files","convertToWebp":"Convert to WebP","convertToWebpTooltip":"Convert images to WebP format before upload to reduce file size. Falls back to original format on failure","fileCompress":"File Compression","compressThreshold":"Compression Threshold","compressThresholdTooltip":"Set image size threshold, files exceeding this will be auto-compressed (MB)","expectedSize":"Expected Size","expectedSizeTooltip":"Set expected image size after compression (MB)","serverCompress":"Server-side Compression","serverCompressTooltip":"1. Compress on Telegram side, only applies to image files uploaded via Telegram channel
2. If image size (after local compression) exceeds 10MB, this setting is ignored
3. For high-resolution, transparent background images, it\'s recommended to disable server compression to avoid issues","enableCompress":"Enable Compression","confirm":"OK"},"uploadHistory":{"title":"History","totalRecords":"{count} records","switchView":"Switch View","clearRecords":"Clear Records","loading":"Loading...","pullToLoadMore":"Pull to load more","noMoreRecords":"No more records","emptyHistory":"No upload history","linkCopied":"Link copied","copyFailed":"Copy failed","clearConfirmTitle":"Notice","clearConfirmMessage":"Are you sure you want to clear all upload records?","clearConfirmOk":"OK","clearConfirmCancel":"Cancel","recordsCleared":"Records cleared","deleteConfirmMessage":"Are you sure you want to delete this record?","recordDeleted":"Record deleted"},"settings":{"linkFormatTitle":"Link Format Settings","defaultCopyLink":"Default Copy Format","rawLink":"Raw Link","customLink":"Custom Link","customLinkTooltip":"Default link is https://your.domain/file/xxx.jpg
If custom link format is enabled, only the xxx.jpg part is kept, please enter the rest manually","enableCustom":"Enable Custom","customPrefix":"Custom Prefix","customPrefixPlaceholder":"Enter custom link prefix","confirm":"OK","s3Link":"S3 Link"},"dashboard":{"searchPlaceholder":"Search: #tag -#exclude","sortByDateDesc":"Sort by date (newest)","sortByNameAsc":"Sort by name (A-Z)","selectedItems":"selected","clearSelection":"Clear selection","copy":"Copy","delete":"Delete","download":"Download","move":"Move","tagManagement":"Tag Management","addToBlacklist":"Add to Blacklist","addToWhitelist":"Add to Whitelist","linkFormat":"Link Format","listView":"List View","cardView":"Card View","logout":"Logout","rootDirectory":"Root","totalFiles":"{count} files","noMatchingFiles":"No matching files or folders found","currentDirEmpty":"Current directory is empty","adjustSearchHint":"Try adjusting search criteria or filters","uploadHint":"Uploaded files will appear here","loadMore":"Load More","totalPages":"{count} pages","jumpTo":"Go to","preview":"Preview","fileName":"File Name","tags":"Tags","channelType":"Channel Type","channelNameCol":"Channel Name","uploadAddress":"Upload Address","fileSize":"Size","uploadTime":"Upload Time","actions":"Actions","externalTag":"External","unknownTag":"Unknown","detail":"Detail","copyLink":"Copy Link","moveFile":"Move","downloadFile":"Download","loadFailed":"Load failed","copySuccess":"Copied successfully","copyFailed":"Copy failed","deleteConfirm":"This will permanently delete this file. Continue?","deleteConfirmTitle":"Notice","deleteConfirmOk":"OK","deleteConfirmCancel":"Cancel","deleteSuccess":"Deleted successfully","deleteFailed":"Delete failed","blockConfirm":"This will add the file to blacklist. Continue?","blockSuccess":"Added to blacklist successfully","blockFailed":"Failed to add to blacklist","whiteConfirm":"This will add the file to whitelist. Continue?","whiteSuccess":"Added to whitelist successfully","whiteFailed":"Failed to add to whitelist","deleteFolderConfirm":"This will permanently delete this folder. Continue?","deleteFileConfirm":"This will permanently delete this file. Continue?","batchDeleteConfirm":"This will permanently delete selected files and folders. Continue?","batchDeleteSuccess":"Batch delete successful","batchDeleteFailed":"Batch delete failed","batchBlockConfirm":"This will add selected files to blacklist. Continue?","batchBlockSuccess":"Batch blacklist successful","batchBlockFailed":"Batch blacklist failed","batchWhiteConfirm":"This will add selected files to whitelist. Continue?","batchWhiteSuccess":"Batch whitelist successful","batchWhiteFailed":"Batch whitelist failed","noLinksAvailable":"No links to copy","batchCopySuccess":"Copied {count} links successfully","batchCopyFailed":"Batch copy failed, please retry","batchCopyLinksSuccess":"Batch copy successful","copyFileLinkSuccess":"File link copied","fileListMemoryCacheWarning":"The file list is large, so it is being kept in memory. Refreshing the page will require loading it again.","indexingWarning":"The index is still building, so current search and sort results may be inaccurate. Please try again later.","loadMoreFailed":"Failed to load more files, please check network","moveSuccess":"Moved successfully","moveFailed":"Move failed","moveTargetSameAsCurrent":"Target folder cannot be the current folder","invalidPageNumber":"Please enter a valid page number","pageExceedsMax":"Page number cannot exceed {max}","loadingData":"Loading data, please wait...","loadDataFailed":"Failed to load data, please check network","fetchFileListFailed":"Failed to fetch file list","refreshFailed":"Refresh failed, please retry","selectFilesFirst":"Please select files first","syncDataError":"Error syncing data, please check network","fetchingFileList":"Fetching file list...","folderEmptyNoLinks":"Folder is empty, no links to copy","copiedFileLinks":"Copied {count} file links","copyFolderLinksFailed":"Failed to copy folder links, please retry"},"dashboardTabs":{"fileManagement":"File Management","userManagement":"User Management","systemSettings":"System Settings","fileUpload":"File Upload"},"fileDetail":{"title":"File Details","download":"Download","tags":"Tags","blacklist":"Blacklist","whitelist":"Whitelist","deleteBtn":"Delete","edit":"Edit","rename":"Rename","save":"Save","cancel":"Cancel","originUrl":"Original Link","fileNameLabel":"File Name","fileNamePlaceholder":"Enter file name","fileType":"File Type","fileTypePlaceholder":"e.g. image/jpeg","fileSizeLabel":"File Size","imageDimensions":"Dimensions","noDimensions":"N/A","uploadTimeLabel":"Upload Time","channelTypeAndName":"Channel Type/Name","accessStatusAndReview":"Access Status/Review","uploadIP":"Upload IP","uploadAddressLabel":"Upload Address","fileTags":"File Tags","noTags":"No tags","unknown":"Unknown","accessNormal":"Normal","accessNormalWhitelist":"Normal (Whitelisted)","accessBlockedBlacklist":"Blocked (Blacklisted)","accessBlockedReview":"Blocked (Review rejected)","orientationLandscape":"Landscape","orientationPortrait":"Portrait","orientationSquare":"Square","linkCopied":"Link copied","metadataSaved":"Metadata saved successfully","metadataSaveFailed":"Failed to save metadata","renameTitle":"Rename File ID","renameLabel":"New File ID","renamePlaceholder":"Enter new File ID","renameCancel":"Cancel","renameConfirm":"Confirm Rename","renameSuccess":"File renamed successfully","renameConflict":"Target file name already exists","renameFailed":"Rename failed"},"filter":{"accessStatus":"Access Status","normal":"Normal","blocked":"Blocked","blackWhiteList":"Black/White List","whiteList":"Whitelist","blackList":"Blacklist","notSet":"Not Set","reviewResult":"Review Result","teenContent":"12+ Content","adultContent":"Adult Content","fileType":"File Type","image":"Image","video":"Video","audio":"Audio","other":"Other","channelType":"Channel Type","externalLink":"External Link","channelName":"Channel Name","clearFilters":"Clear Filters"},"moveFile":{"title":"Move File","batchTitle":"Batch Move Files","targetDirectory":"Target Directory","targetPlaceholder":"Enter target directory path","hint":"Tip: Paths starting with / indicate root directory, e.g. /photos/2024/","hintMobile":"Tip: Paths starting with / indicate root directory","selectDirectory":"Select Directory","cancel":"Cancel","confirm":"OK","retry":"Retry","authFailed":"Authentication failed, please log in again","serverError":"Server error, please try again later","loadTreeFailed":"Failed to load directory tree, please check network connection"},"batchTag":{"title":"Batch Tag Management","addTab":"Add","removeTab":"Remove","clearTab":"Clear","addDescription":"Add tags to {count} selected files","inputPlaceholder":"Enter tag name","pendingTags":"Tags to add","noPendingTags":"No tags to add","addToAllFiles":"Add to all files","removeDescription":"Remove common tags from selected files","commonTags":"Common Tags","noCommonTags":"Selected files have no common tags","clearDescription":"Clear all tags from {count} selected files","clearWarningTitle":"⚠️Warning","clearWarningDesc":"This will clear all tags from selected files and cannot be undone","confirmClearAll":"Confirm clear all tags","tagAlreadyInList":"Tag already in list","pleaseAddTags":"Please add tags first","addSuccess":"Tags added to {count} files successfully","addFailed":"Batch tag addition failed","removeSuccess":"Tags removed from {count} files successfully","removeFailed":"Tag removal failed","clearConfirmMessage":"Are you sure you want to clear all tags from {count} selected files? This cannot be undone.","clearConfirmTitle":"Confirm Clear","clearConfirmOk":"OK","clearConfirmCancel":"Cancel","clearCancelled":"Clear operation cancelled","clearSuccess":"Tags cleared from {count} files successfully","clearFailed":"Failed to clear tags","loadCommonTagsFailed":"Failed to load common tags"},"tagManagement":{"title":"Tag Management","inputPlaceholder":"Enter tag name","currentTags":"Current Tags","noTags":"No tags","popularTags":"Popular Tags","loading":"Loading...","noPopularTags":"No popular tags","close":"Close","tagExists":"Tag already exists","addSuccess":"Tag added successfully","addFailed":"Failed to add tag","removeSuccess":"Tag removed successfully","removeFailed":"Failed to remove tag","loadFailed":"Failed to load tags"},"mobileAction":{"viewDetail":"View Details","copyLink":"Copy Link","downloadFile":"Download File","moveFile":"Move File","tagManagement":"Tag Management","moveFolder":"Move Folder","deleteFile":"Delete File","deleteFolder":"Delete Folder"},"mobileDirectory":{"title":"Directory Navigation","rootDirectory":"Root","goBack":"Go Back"},"sysConfig":{"logout":"Logout"},"sysConfigTabs":{"systemStatus":"System Status","uploadSettings":"Upload Settings","securitySettings":"Security Settings","pageSettings":"Page Settings","otherSettings":"Other Settings"},"dateRangeCalendar":{"previousMonth":"Previous month","nextMonth":"Next month","startDate":"Start date","endDate":"End date","rangeSeparator":"to","monthTitle":"{year}-{month}","weekdaySun":"Sun","weekdayMon":"Mon","weekdayTue":"Tue","weekdayWed":"Wed","weekdayThu":"Thu","weekdayFri":"Fri","weekdaySat":"Sat"},"sysStatus":{"totalFiles":"Total Files","clickToRefresh":"Click to refresh","indexUpdateTime":"Index Update Time","systemVersion":"System Version","clickToViewChangelog":"Click to view changelog","channelDistribution":"Upload Channel Distribution","fileStatusDistribution":"File Status Distribution","uploadTrend":"Upload Trend","uploadTrendGroupBy":"Upload trend group by","totalUploads":"Total Uploads","byChannelType":"Channel Type","byChannelName":"Channel Name","selectDateRange":"Select date range","otherChannels":"Other","uploadsUnit":"uploads","noData":"No data","totalFilesLabel":"Total Files","statusTypes":"Status Types","systemMaintenance":"System Maintenance","rebuildIndex":"Rebuild Index","rebuilding":"Rebuilding...","rebuildTooltip":"Rescan all files and update index data, useful for fixing data inconsistencies","backupData":"Backup Data","backingUp":"Backing up...","backupTooltip":"Backup all file metadata and system settings to a JSON file","restoreData":"Restore Data","restoring":"Restoring...","restoreTooltip":"Restore data from a backup file, this will overwrite existing file metadata and system settings","cancelOperation":"Cancel Operation","retry":"Retry","close":"Close","records":"records","aboutToComplete":"Almost done","seconds":"~{count} seconds","minutes":"~{count} minutes","hoursMinutes":"~{hours} hours {minutes} minutes","phaseFetching":"Fetching data","phaseSorting":"Sorting","phaseUploading":"Uploading","phaseFinalizing":"Finalizing","phaseBuilding":"Building backup","phaseDownloading":"Generating download","phaseRestoringFiles":"Restoring files","phaseRestoringSettings":"Restoring settings","phaseCompleted":"Completed","phaseRetrying":"Retrying","rebuildSuccess":"Index rebuild complete! Processed {count} files","backupSuccess":"Backup complete! Backed up {count} files","backupSuccessWithSettings":"Backup complete! Backed up {fileCount} files and {settingsCount} settings","operationInProgress":"An operation is already in progress","selectJsonFile":"Please select a JSON backup file","restoreConfirmMessage":"Restoring will overwrite existing file metadata and system settings. This cannot be undone. Continue?","restoreConfirmTitle":"Confirm Restore","restoreConfirmOk":"Confirm Restore","restoreConfirmCancel":"Cancel","invalidBackupFile":"Invalid backup file format, please select a valid JSON file","restoreSuccess":"Restore complete! Restored {files} files and {settings} settings, rebuilding index...","restoreFailed":"Failed to restore data","fetchIndexFailed":"Failed to fetch index information","unknown":"Unknown","blocked":"Blocked","normalStatus":"Normal","latestUpload":"Latest Upload","earliestUpload":"Earliest Upload","daysAgo":"{count} days ago","hoursAgo":"{count} hours ago","minutesAgo":"{count} minutes ago","justNow":"Just now","cancellingRebuild":"Cancelling index rebuild..."},"sysUpload":{"title":"Upload Channel Management","titleTooltip":"Manage all upload channel configurations. Click a card to view details or edit","filterPlaceholder":"Filter channel type","addChannel":"Add Channel","loadBalance":"Load Balance","unnamedChannel":"Unnamed Channel","envVariable":"Environment Variable","noChannels":"No {type} channels","detail":"Detail","editBtn":"Edit","deleteBtn":"Delete","addDialogTitle":"Add New Channel","channelTypeLabel":"Channel Type","channelTypePlaceholder":"Select channel type","channelNameLabel":"Channel Name","channelNamePlaceholder":"Enter channel name","channelNameImmutableTip":"After creation, this becomes the unique identifier for files associated with the channel and cannot be changed","channelNameEditDisabledTip":"The channel name links uploaded files to this channel and cannot be changed","botTokenLabel":"Bot Token","botTokenPlaceholder":"Enter Bot Token","chatIdLabel":"Chat ID","chatIdPlaceholder":"Enter Chat ID","proxyDomain":"Proxy Domain","proxyDomainPlaceholder":"Optional, e.g.: your-proxy.example.com","endpointLabel":"Endpoint","endpointPlaceholder":"e.g.: https://s3.us-east-005.backblazeb2.com","cdnDomain":"CDN Domain","cdnDomainPlaceholder":"Optional. Enter the full CDN URL prefix, e.g. https://cdn.example.com","cdnDomainTip":"Optional. Can be used to generate and display file access links. Server-side file reads also try the CDN first.","bucketName":"Bucket Name","bucketNamePlaceholder":"Enter bucket name","bucketRegion":"Bucket Region","bucketRegionPlaceholder":"Default: auto","accessKeyId":"Access Key ID","accessKeyIdPlaceholder":"Enter Access Key ID","secretAccessKey":"Secret Access Key","secretAccessKeyPlaceholder":"Enter Secret Access Key","pathStyle":"Path Style","pathStyleTip":"Enable when using services incompatible with host-style like OpenList","quotaLimit":"Quota Limit","quotaLimitGB":"Quota Limit (GB)","quotaThreshold":"Disable Threshold (%)","channelIdLabel":"Channel ID","channelIdPlaceholder":"Enter Channel ID","nitroMember":"Nitro Member","nitroTip":"Nitro members: 25MB per file, otherwise 10MB","discordWarning":"Discord has API rate limits, not recommended for high-concurrency scenarios","repoName":"Repository Name","repoNamePlaceholder":"Format: username/repo-name","accessToken":"Access Token","accessTokenPlaceholder":"Enter Access Token","privateRepo":"Private Repository","privateRepoTip":"Private repository limit: 100GB","webdavBaseUrl":"WebDAV Base URL","webdavBaseUrlPlaceholder":"e.g.: https://dav.example.com/remote.php/dav/files/user/imgbed/","webdavUsername":"Username","webdavUsernamePlaceholder":"Optional username","webdavPassword":"Password","webdavPasswordPlaceholder":"Optional password","webdavPublicUrlPlaceholder":"Optional. Enter the full public URL prefix, e.g. https://cdn.example.com/imgbed","webdavPublicUrlTip":"Optional. Server-side file reads try this public URL first and fall back to the WebDAV API on failure.","webdavHeaders":"Custom Headers","webdavHeadersPlaceholder":"Optional JSON object, e.g.: {\'{\\"X-Api-Key\\":\\"value\\"}\'}","webdavHeadersInvalid":"Custom headers must be a valid JSON object","webdavCreateDirectory":"Auto Create Directories","webdavCreateDirectoryTip":"Create parent directories before uploading files","cancel":"Cancel","confirmAdd":"Confirm Add","detailDialogTitle":"Channel Details - {name}","channelNameDetail":"Channel Name","channelTypeDetail":"Channel Type","statusLabel":"Status","enabled":"Enabled","disabled":"Disabled","configSource":"Config Source","publicUrl":"Public Access URL","notSet":"Not Set","isPathStyle":"Yes","isNotPathStyle":"No","currentUsage":"Current Usage","closeBtn":"Close","editDialogTitle":"Edit Channel - {name}","enableChannel":"Enable Channel","saveChanges":"Save Changes","r2ConfigNote":"Please follow the R2 Channel Configuration documentation to add R2 channels","reservedName":"This name is reserved by the system, please use another name","duplicateName":"A channel with this name already exists, please use another name","fixedChannelCannotDelete":"Channels configured via environment variables cannot be deleted","deleteChannelConfirm":"Are you sure you want to delete this channel? Files still associated with it may become inaccessible.","quotaInitConfirm":"First time enabling quota requires calculating existing file sizes, this may take some time. Calculate now?","quotaInitTitle":"Initialize Quota Statistics","quotaInitConfirmBtn":"Calculate Now","quotaInitCancelBtn":"Calculate Later","quotaInitLater":"You can click the refresh button to calculate later","quotaCalculating":"Calculating quota, please wait...","quotaCalculateSuccess":"Quota calculation complete","quotaCalculateFailed":"Calculation failed","quotaCalculateError":"Calculation failed: "},"sysSecurity":{"authManagement":"Authentication Management","userAuth":"User Authentication","adminAuth":"Admin Authentication","uploadPassword":"Upload Password","confirmPassword":"Confirm Password","adminUsername":"Username","adminPassword":"Password","apiTokenManagement":"API Token Management","imageReview":"Image Review","imageReviewTooltip":"Only applies to non-chunked uploads, supports nsfwjs and moderatecontent.com channels","enableReview":"Enable Review","reviewChannel":"Review Channel","reviewChannelPlaceholder":"Select review channel","apiKey":"API Key","apiPath":"API Path","ipQuery":"IP Geolocation Query","ipQueryTooltip":"Calls a custom API during upload to query the upload IP location. Parameter values support the {\'{ip}\'} placeholder","enableIpQuery":"Enable Query","ipQueryChannel":"Query Channel","ipQueryChannelPlaceholder":"Select query channel","customApi":"Custom API","queryParams":"Query Parameters","paramNamePlaceholder":"Parameter name","paramValuePlaceholder":"Parameter value, e.g. {\'{ip}\'}","addQueryParam":"Add Parameter","responseFields":"Response Fields","responseFieldsTip":"The final display text is joined in field order","responseFieldPathPlaceholder":"JSON path, e.g. country.name","addResponseField":"Add Field","uploadManagement":"Upload Management","accessManagement":"Access Management","domainFilter":"Domain Filter","allowedDomains":"Allowed Domains","allowedDomainsTooltip":"1. Set permissions based on access domain
2. Leave empty to allow all, separate multiple domains with commas","whiteListMode":"Whitelist Mode","enableWhiteList":"Enable","enableWhiteListTooltip":"1. Set permissions based on files
2. When enabled, only whitelisted files can be accessed","settingsSaved":"Settings saved","tokenName":"Name","tokenValue":"Token","permissions":"Permissions","createdAt":"Created At","status":"Status","expiresAt":"Expires At","operation":"Actions","editBtn":"Edit","deleteBtn":"Delete","permUpload":"Upload","permDelete":"Delete","permList":"List","permManage":"Manage","createTokenTitle":"Create New API Token","tokenNameLabel":"Token Name","tokenNamePlaceholder":"Enter token name","permissionsLabel":"Permissions","neverExpire":"Never Expire","validPeriod":"Valid Period","autoDeleteOnExpire":"Auto-delete on expiry","createBtn":"Create","editTokenTitle":"Edit API Token","updateBtn":"Update","tokenCreatedTitle":"Token Created Successfully","tokenCreatedWarning":"Please save the following token. You won\'t be able to view the full token after closing this dialog!","fullToken":"Full Token","copyBtn":"Copy","savedBtn":"I\'ve Saved It","tokenCopied":"Token copied to clipboard","copyFailed":"Copy failed, please copy manually","tokenCreateSuccess":"Token created successfully","tokenCreateFailed":"Failed to create token","tokenUpdateSuccess":"Token updated successfully","tokenUpdateFailed":"Failed to update token","tokenDeleteConfirm":"This will permanently delete this token. Continue?","tokenDeleteConfirmTitle":"Notice","tokenDeleteConfirmOk":"OK","tokenDeleteConfirmCancel":"Cancel","tokenDeleteSuccess":"Token deleted successfully","tokenDeleteFailed":"Failed to delete token","tokenListFailed":"Failed to fetch token list","passwordUrlReserved":"Password cannot contain URL reserved characters: % & ? # /","confirmUploadPassword":"Please re-enter upload password","confirmAdminPassword":"Please re-enter admin password","passwordMismatch":"Passwords do not match","passwordUnchanged":"Unchanged (leave empty to keep current password)","adminPasswordChangedRelogin":"Admin password changed, redirecting to login page","clearPassword":"Clear authentication info","tokenNameRequired":"Please enter token name","permissionsRequired":"Please select permissions","validPeriodRequired":"Valid period must be greater than 0","timeUnitSeconds":"seconds","timeUnitMinutes":"minutes","timeUnitHours":"hours","timeUnitDays":"days","timeUnitMonths":"months","timeUnitYears":"years","sessionSecurityPolicy":"Session Security Policy","secureMode":"Secure Mode","secureModeTooltip":"When enabled, cookies are only transmitted over HTTPS. Make sure your site has HTTPS enabled","userSessionMaxAge":"User Session Max Age","adminSessionMaxAge":"Admin Session Max Age","sessionMaxAgeUnit":"days","sessionMaxAgeInvalid":"Session max age must be an integer from 1 to 3650"},"sysPage":{"settingsSaved":"Settings saved","refreshAnnouncement":"Reset announcement read status","otherSettings":"Other Settings","channelSelectPlaceholder":"Please select upload channel first"},"sysOthers":{"remoteTelemetry":"Remote Telemetry","remoteTelemetryTooltip":"Helps with issue tracking and debugging, recommended to enable","enable":"Enable","cloudflareApiToken":"CloudFlare API Token","cloudflareApiTokenTooltip":"When set, backend operations like blocking and deleting won\'t be affected by CDN cache
Recommended, see documentation for setup","zoneId":"Zone ID","accountEmail":"Account Email","randomImageApi":"Random Image API","randomImageApiTooltip":"See documentation for API usage details","directory":"Directory","directoryTooltip":"1. Directories with random image access, defaults to root. Separate multiple directories with commas
2. All directories use absolute paths, e.g. /img/cover, meaning files in this directory and all subdirectories can be accessed by the random image API","publicBrowse":"Public Gallery","publicBrowseTooltip":"When enabled, visitors can browse images in specified directories via /browse path (read-only, no delete/move)","openDirectory":"Open Directory","openDirectoryTooltip":"

Directories open for public browsing, separate multiple with commas

Example: wallpaper,photos,album

Supports subdirectories: 2026/lucky,2026/rich

Access URL: https://your.domain/browse/2026/lucky

","webdav":"WebDAV","webdavTooltip":"When enabled, images can be accessed and managed via WebDAV protocol","webdavUsername":"Username","webdavPassword":"Password","webdavUploadChannel":"Upload Channel","webdavDefaultChannel":"Default Channel","webdavChannelName":"Specified Channel","settingsSaved":"Settings saved"},"customerConfig":{"uploadFileList":"Upload File List","fileNameCol":"File Name","filePreview":"File Preview","uploadTimeCol":"Upload Time","ipAddress":"IP Address","address":"Address","uploadCount":"Upload Count","allowUpload":"Allow Upload","allow":"Allow","deny":"Deny","loadMore":"Load More","loadError":"Error loading more data, please check network connection","syncError":"Error syncing data, please check network connection"},"publicBrowse":{"searchPlaceholder":"Search file name or #page","fileCount":"{count} files","loading":"Loading...","retry":"Retry","creditText":"Gallery code contributed by LinJiang","loadingMore":"Loading...","allLoaded":"All loaded","creditLink":"LinJiang","browseDisabled":"Public browsing is not enabled","directoryNotAllowed":"This directory is not open for public access","accessDenied":"Access denied","loadFailed":"Load failed, please retry","rootDirectory":"Root","copyLink":"Copy Link","copied":"Copied","downloadBtn":"Download","swipeHint":"← Swipe to navigate →","rotate90":"Rotate 90°"},"transformMedia":{"download":"Download","playbackSpeed":"Playback Speed","normalSpeed":"Normal","playMode":"Play Mode","stopAfterPlay":"Stop After Play","sequentialPlay":"Sequential Play","loopSingle":"Loop Single","more":"More"},"directoryTree":{"selectDirectory":"Select Directory","retry":"Retry","authFailed":"Authentication failed, please log in again","serverError":"Server error, please try again later","loadFailed":"Failed to load directory tree, please check network connection"},"floatingSave":{"saving":"Saving","save":"Save"},"theme":{"lightMode":"Light Mode","darkMode":"Dark Mode","autoMode":"Auto Mode"},"common":{"confirm":"OK","cancel":"Cancel","close":"Close","save":"Save","delete":"Delete","edit":"Edit","copy":"Copy","download":"Download","retry":"Retry","loading":"Loading...","success":"Success","failed":"Failed","warning":"Warning","info":"Notice","yes":"Yes","no":"No","all":"All Types","select":"Select"},"validation":{"pathMustStartWithSlash":"Path must start with \\"/\\"","pathTraversalNotAllowed":"Path cannot contain \\"..\\"","singleDotNotAllowed":"Path cannot contain standalone \\".\\"","consecutiveSlashNotAllowed":"Path cannot contain consecutive slashes","invalidCharacters":"Path contains invalid characters, please use a valid path format","uploadDirReplace":"Upload directory"},"language":{"switchTo":"中/En","switchLanguage":"Switch Language"},"whitelist":{"title":"Whitelist Mode Enabled","description":"Sorry, the whitelist mode is currently enabled. Uploaded images need to be approved before they can be displayed. Please wait for approval.","goHome":"Go Home","goBack":"Go Back","helpText":"You can try:","uploadImage":"Upload Image","refreshPage":"Refresh Page"}}');const i="app-locale";function r(){const e=localStorage.getItem(i);return"zh-CN"===e||"en"===e?e:"zh-CN"}const s=(0,o.hU)({legacy:!0,locale:r(),fallbackLocale:"zh-CN",messages:{"zh-CN":n,en:l}});function d(e){s.global.locale=e,localStorage.setItem(i,e),document.documentElement.lang="zh-CN"===e?"zh-CN":"en"}var c=s},81525:function(e,a,t){t(18111),t(7588);var o=t(45130),n=t(73888),l=t(18642),i=(t(15412),t(30372),t(98950)),r=t(30292),s=t(47984),d=t(79262),c=t(70193),u=t(55363),m=t(31050),p=t(22909),h=t(10220),g=t(74036),f=t(90389),y=t(81828),b=t(27483),C=t(66806),k=t(61536),T=t(3263),w=t(57038),v=t(63416),S=t(63027),P=t(19223),F=t(93422),A=t(16249),D=t(34335),L=t(14722),U=t(16829),N=t(53916),M=t(48749),I=t(2511),R=t(12375),x=t(97619),B=t(84310),E=t(14552),O=t(79919),W=t(10767),q=t(20491),V=t(18422),j=t(17214),H=t(44845),z=t(55319),K=t(71669),Q=t(38557),J=t(15925),G=t(10798),_=t(39329),Y=t(59708),X=t(41165),$=t(50230),Z=t(99288),ee=t(67992),ae=t(37538),te=t(13118),oe=t(36050),ne=t(69721),le=t(75192),ie=t(50672),re=t(3149),se=t(11221),de=t(73585),ce=t(63236),ue=t(1860),me=t(13110),pe=t(6246),he=t(42302),ge=t(75504),fe=t(40587),ye=t(5299),be=t(81775),Ce=t(13127),ke=t(18742),Te=t(97579),we=t(56746),ve=t(58422),Se=t(20444),Pe=t(88502),Fe=t(21872),Ae=t(64795),De=t(82262),Le=t(88921),Ue=t(39916),Ne=t(18579),Me=t(80500),Ie=t(58428),Re=t(87849),xe=t(78034),Be=t(59413),Ee=t(58869),Oe=t(79102),We=t(78337),qe=t(38870),Ve=t(70577),je=t(93212),He=t(40275),ze=t(52995),Ke=t(38410),Qe=t(167),Je=t(53223),Ge=t(97447),_e=t(67830),Ye=[u.rC,m.UH,p.B0,h.Ce,g.IN,s.xK,f.Df,y.ck,b.LB,C.e4,k.ok,T.$F,w.gK,v.e6,S.rQ,P.Jt,F.Wz,A.Xk,D.B2,L.a$,U.jB,d.ZD,N.wF,M.rO,I.jT,R.Xb,x.dB,B.Ub,E.q9,O.rM,W.jP,q.he,c._2,V.cb,j.MT,H.vH,z.v,K.bx,Q.tU,J.zp,G.A,_.pS,Y.A4,X.h8,$.o1,Z.UD,ee.mR,ae.ao,te.Uj,oe.gD,ne.Bw,le.CY,ie.In,re.v0,se.lS,de.jb,ce.yv,ue.Up,me.iW,pe.CQ,he.IT,ge.EZ,fe.xb,ye.PJ,be.X,Ce.ji,ke.is,Te.R9,we.QL,ve.wR,Se.oE,Pe.ye,Fe.UB,Ae.hS,De.Mj,Le.D6,Ue.QO,Ne.V2,Me.im,Ie.Gx,Re.H9,xe.Yp,Be.z1,Ee.Nf,Oe.oM,We.VN,qe.Ot,Ve.xi,je._2,He.DX,ze.l9,Ke.GR,Qe.ns,Je.Be,Ge.Jm,_e.Mc],Xe=t(97722),$e=(t(85331),t(10961),t(56768));function Ze(e,a,t,o,n,l){const i=(0,$e.g2)("router-view"),r=Xe.H6;return(0,$e.uX)(),(0,$e.Wv)(r,{locale:l.elementLocale},{default:(0,$e.k6)(()=>[(0,$e.bF)(i)]),_:1},8,["locale"])}var ea=t(60782),aa=t(6166),ta=t(55186),oa=t(54791),na={data(){return{osInstance:null,imageViewerObserver:null}},computed:{...(0,ea.L8)(["userConfig","useDarkMode"]),elementLocale(){return"zh-CN"===this.$i18n.locale?ta.A:oa.A}},mounted(){this.$nextTick(()=>{this.initOverlayScrollbars(),this.setupImageViewerObserver()})},beforeUnmount(){this.imageViewerObserver&&this.imageViewerObserver.disconnect()},watch:{},methods:{initOverlayScrollbars(){try{if(aa.ae.valid(document.body))return void(this.osInstance=(0,aa.ae)(document.body));this.osInstance=(0,aa.ae)(document.body,{scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"scroll",autoHideDelay:600,dragScroll:!0,clickScroll:!0},overflow:{x:"hidden",y:"scroll"}}),console.log("OverlayScrollbars initialized successfully")}catch(e){console.error("Failed to initialize OverlayScrollbars:",e)}},setupImageViewerObserver(){this.imageViewerObserver=new MutationObserver(e=>{const a=document.querySelector(".el-image-viewer__wrapper");a?this.osInstance&&this.osInstance.options({overflow:{x:"hidden",y:"hidden"}}):this.osInstance&&this.osInstance.options({overflow:{x:"hidden",y:"scroll"}})}),this.imageViewerObserver.observe(document.body,{childList:!0,subtree:!0})}}},la=t(71241);const ia=(0,la.A)(na,[["render",Ze]]);var ra=ia,sa=t(16915),da=t(25507),ca=t(46638),ua=t(57477);t(21862),t(50635);i.Yv.add(...Ye);const ma=(0,o.Ef)(ra),pa=(0,n.Zf)();ma.component("font-awesome-icon",r.gc);for(const[ba,Ca]of Object.entries(ua))ma.component(ba,Ca);const ha=()=>{const e=document.documentElement;let a;if(da.A.state.cusDarkMode&&null!==da.A.state.useDarkMode)a=da.A.state.useDarkMode;else{if(a=window.matchMedia("(prefers-color-scheme: dark)").matches,!a){const e=new Date,t=e.getHours();a=t>=22||t<6}da.A.commit("setUseDarkMode",a)}a?e.classList.add("dark"):e.classList.remove("dark")},ga=e=>{const a=document.documentElement;e?a.classList.add("dark"):a.classList.remove("dark")},fa=e=>{document.title=e?.siteTitle||"Sanyue ImgHub"},ya=(e,a)=>{const t=document.querySelectorAll('link[rel="icon"], link[rel="apple-touch-icon"], link[rel="mask-icon"]');t.forEach(e=>e.remove());const o=document.createElement("link"),n=document.createElement("link"),l=document.createElement("link");o.rel="icon",n.rel="apple-touch-icon",l.rel="mask-icon",e?(o.href=a?.siteIcon||"/static/media/logo-dark.png",n.href=a?.siteIcon||"/static/media/logo-dark.png",l.href=a?.siteIcon||"/static/media/logo-dark.png"):(o.href=a?.siteIcon||"/static/media/logo.png",n.href=a?.siteIcon||"/static/media/logo.png",l.href=a?.siteIcon||"/static/media/logo.png"),document.head.appendChild(o),document.head.appendChild(n),document.head.appendChild(l)};da.A.dispatch("fetchUserConfig").then(()=>{ha(),fa(da.A.getters.userConfig),ya(da.A.state.useDarkMode,da.A.getters.userConfig),da.A.subscribe((e,a)=>{"setUseDarkMode"===e.type&&da.A.state.cusDarkMode&&(ga(a.useDarkMode),ya(a.useDarkMode,da.A.getters.userConfig)),"setCusDarkMode"!==e.type||e.payload||(ha(),ya(da.A.state.useDarkMode,da.A.getters.userConfig))}),ma.use(da.A).use(sa.A).use(l.A).use(ca.Ay).mount("#app")}).catch(e=>{console.error("Failed to load user configuration:",e),ma.use(da.A).use(sa.A).use(l.A).use(ca.Ay).use(pa).mount("#app")})}},a={};function t(o){var n=a[o];if(void 0!==n)return n.exports;var l=a[o]={exports:{}};return e[o].call(l.exports,l,l.exports,t),l.exports}t.m=e,function(){var e=[];t.O=function(a,o,n,l){if(!o){var i=1/0;for(c=0;c=l)&&Object.keys(t.O).every(function(e){return t.O[e](o[s])})?o.splice(s--,1):(r=!1,l0&&e[c-1][2]>l;c--)e[c]=e[c-1];e[c]=[o,n,l]}}(),function(){t.n=function(e){var a=e&&e.__esModule?function(){return e["default"]}:function(){return e};return t.d(a,{a:a}),a}}(),function(){t.d=function(e,a){for(var o in a)t.o(a,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:a[o]})}}(),function(){t.f={},t.e=function(e){return Promise.all(Object.keys(t.f).reduce(function(a,o){return t.f[o](e,a),a},[]))}}(),function(){t.u=function(e){return"js/"+e+"."+{5:"046872c7",22:"b436b08e",24:"e38d6915",63:"503c70e6",380:"62235203",549:"ffe205fb",645:"a0ee257d",711:"936a7109",743:"f28adaf7",773:"f0780366",787:"d0dbc2dd",803:"4f2ba956",903:"1e4b549d"}[e]+".js"}}(),function(){t.miniCssF=function(e){return"css/"+e+"."+{5:"3a85dbb0",24:"03ecf779",30:"c12a4e5b",63:"398231b7",173:"f8fd1fa2",322:"2b40f004",549:"0f00dee2",645:"a0ee33b3",711:"e6dbd5da",743:"4cb567b6",773:"b55efe26",787:"f6f7607a",803:"398231b7"}[e]+".css"}}(),function(){t.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){t.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)}}(),function(){var e={},a="sanyue_imghub:";t.l=function(o,n,l,i){if(e[o])e[o].push(n);else{var r,s;if(void 0!==l)for(var d=document.getElementsByTagName("script"),c=0;ca<*+96S^ZqH{wPgFJ{0r}?s_veii)1Ie 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 {\r\n axios.get('/api/auth/sessionCheck', {\r\n withCredentials: true\r\n }).then(res => {\r\n const data = res.data || {}\r\n\r\n // 不需要管理端认证,直接放行\r\n if (!data.adminRequired) {\r\n store.commit('setAdminLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证,检查是否有有效的 admin session\r\n if (data.valid && data.authType === 'admin') {\r\n store.commit('setAdminLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证但没有有效 session,跳转登录\r\n // 只有之前已登录(session 过期)才提示错误,首次未登录静默跳转\r\n const wasLoggedIn = store.state.adminLoggedIn\r\n store.commit('setAdminLoggedIn', false)\r\n if (to.name !== 'adminLogin') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'adminLogin' })\r\n } else {\r\n next()\r\n }\r\n }).catch(() => {\r\n const wasLoggedIn = store.state.adminLoggedIn\r\n store.commit('setAdminLoggedIn', false)\r\n if (to.name !== 'adminLogin') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'adminLogin' })\r\n } else {\r\n next()\r\n }\r\n })\r\n}\r\n\r\n// 通用的用户认证守卫\r\nconst userAuthGuard = (to, from, next) => {\r\n axios.get('/api/auth/sessionCheck', {\r\n withCredentials: true\r\n }).then(res => {\r\n const data = res.data || {}\r\n\r\n // 不需要用户端认证,直接放行\r\n if (!data.userRequired) {\r\n store.commit('setUserLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证,检查是否有有效 session(user 或 admin 都可以)\r\n if (data.valid) {\r\n store.commit('setUserLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证但没有有效 session,跳转登录\r\n // 只有之前已登录(session 过期)才提示错误,首次未登录静默跳转\r\n const wasLoggedIn = store.state.userLoggedIn\r\n store.commit('setUserLoggedIn', false)\r\n if (to.name !== 'login') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'login' })\r\n } else {\r\n next()\r\n }\r\n }).catch(() => {\r\n const wasLoggedIn = store.state.userLoggedIn\r\n store.commit('setUserLoggedIn', false)\r\n if (to.name !== 'login') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'login' })\r\n } else {\r\n next()\r\n }\r\n })\r\n}\r\n\r\nconst routes = [\r\n {\r\n path: '/',\r\n name: 'home',\r\n component: () => import('../views/UploadHome.vue'),\r\n beforeEnter: userAuthGuard\r\n },\r\n {\r\n path: '/login',\r\n name: 'login',\r\n component: () => import('../views/Login.vue')\r\n },\r\n {\r\n path: '/dashboard',\r\n name: 'dashboard',\r\n component: () => import('../views/AdminDashBoard.vue'),\r\n beforeEnter: adminAuthGuard\r\n },\r\n {\r\n path: '/customerConfig',\r\n name: 'customerConfig',\r\n component: () => import('../views/CustomerConfig.vue'),\r\n beforeEnter: adminAuthGuard\r\n },\r\n {\r\n path: '/systemConfig',\r\n name: 'systemConfig',\r\n component: () => import('../views/SystemConfig.vue'),\r\n beforeEnter: adminAuthGuard\r\n },\r\n {\r\n path: '/adminLogin',\r\n name: 'adminLogin',\r\n component: () => import('../views/AdminLogin.vue'),\r\n },\r\n {\r\n path: '/blockimg',\r\n name: 'blockimg',\r\n component: () => import('../views/BlockImage.vue'),\r\n },\r\n {\r\n path: '/whiteliston',\r\n name: 'whiteliston',\r\n component: () => import('../views/WhiteListOn.vue'),\r\n },\r\n {\r\n path: '/browse/:dir*',\r\n name: 'publicBrowse',\r\n component: () => import('../views/PublicBrowse.vue'),\r\n },\r\n {\r\n path: '/:pathMatch(.*)*',\r\n name: 'notFound',\r\n component: () => import('../views/NotFound.vue'),\r\n },\r\n]\r\n\r\nconst router = createRouter({\r\n history: createWebHistory(process.env.BASE_URL),\r\n routes\r\n})\r\n\r\nexport default router\r\n","import { createStore } from 'vuex'\r\nimport axios from '@/utils/axios';\r\nimport createPersistedState from 'vuex-persistedstate';\r\n\r\nexport default createStore({\r\n state: {\r\n userConfig: null,\r\n bingWallPapers: [],\r\n // 会话状态标记(不存储密码,实际认证通过 HttpOnly Cookie)\r\n adminLoggedIn: false,\r\n userLoggedIn: false,\r\n uploadMethod: 'default',\r\n uploadCopyUrlForm: '',\r\n compressConfig: {\r\n customerCompress: undefined,\r\n compressQuality: undefined,\r\n compressBar: undefined,\r\n serverCompress: undefined,\r\n convertToWebp: undefined,\r\n },\r\n storeUploadChannel: '',\r\n storeChannelName: null, // 指定的渠道名称,null表示从未选择,''表示用户主动清空\r\n storeAutoRetry: true,\r\n storeUploadNameType: '',\r\n uploadFolder: '',\r\n customUrlSettings: {\r\n useCustomUrl: 'false',\r\n customUrlPrefix: '',\r\n },\r\n adminUrlSettings: {\r\n useCustomUrl: 'false',\r\n customUrlPrefix: '',\r\n },\r\n autoReUpload: true,\r\n // 深色模式\r\n useDarkMode: null,\r\n cusDarkMode: false,\r\n },\r\n getters: {\r\n userConfig: state => state.userConfig,\r\n bingWallPapers: state => state.bingWallPapers,\r\n adminLoggedIn: state => state.adminLoggedIn,\r\n userLoggedIn: state => state.userLoggedIn,\r\n storeUploadMethod: state => state.uploadMethod,\r\n uploadCopyUrlForm: state => state.uploadCopyUrlForm,\r\n compressConfig: state => state.compressConfig,\r\n storeUploadChannel: state => state.storeUploadChannel,\r\n storeChannelName: state => state.storeChannelName,\r\n storeUploadNameType: state => state.storeUploadNameType,\r\n customUrlSettings: state => state.customUrlSettings,\r\n storeAutoRetry: state => state.storeAutoRetry,\r\n adminUrlSettings: state => state.adminUrlSettings,\r\n storeUploadFolder: (state) => {\r\n return state.uploadFolder || localStorage.getItem('uploadFolder') || ''\r\n },\r\n useDarkMode: state => state.useDarkMode,\r\n cusDarkMode: state => state.cusDarkMode,\r\n storeAutoReUpload: state => state.autoReUpload,\r\n },\r\n mutations: {\r\n setUserConfig(state, userConfig) {\r\n state.userConfig = userConfig;\r\n },\r\n setBingWallPapers(state, bingWallPapers) {\r\n state.bingWallPapers = bingWallPapers;\r\n },\r\n setAdminLoggedIn(state, loggedIn) {\r\n state.adminLoggedIn = loggedIn;\r\n },\r\n setUserLoggedIn(state, loggedIn) {\r\n state.userLoggedIn = loggedIn;\r\n },\r\n setUploadMethod(state, uploadMethod) {\r\n state.uploadMethod = uploadMethod;\r\n },\r\n setUploadCopyUrlForm(state, uploadCopyUrlForm) {\r\n state.uploadCopyUrlForm = uploadCopyUrlForm;\r\n },\r\n setCompressConfig(state, { key, value }) {\r\n state.compressConfig[key] = value;\r\n },\r\n setStoreUploadChannel(state, uploadChannel) {\r\n state.storeUploadChannel = uploadChannel;\r\n },\r\n setStoreChannelName(state, channelName) {\r\n state.storeChannelName = channelName;\r\n },\r\n setStoreUploadNameType(state, storeUploadNameType) {\r\n state.storeUploadNameType = storeUploadNameType;\r\n },\r\n setCustomUrlSettings(state, { key, value }) {\r\n state.customUrlSettings[key] = value;\r\n },\r\n setStoreAutoRetry(state, storeAutoRetry) {\r\n state.storeAutoRetry = storeAutoRetry;\r\n },\r\n setAdminUrlSettings(state, { key, value }) {\r\n state.adminUrlSettings[key] = value;\r\n },\r\n setUseDarkMode(state, useDarkMode) {\r\n state.useDarkMode = useDarkMode;\r\n },\r\n setCusDarkMode(state, cusDarkMode) {\r\n state.cusDarkMode = cusDarkMode;\r\n },\r\n setStoreUploadFolder(state, folder) {\r\n state.uploadFolder = folder\r\n localStorage.setItem('uploadFolder', folder)\r\n },\r\n setStoreAutoReUpload(state, autoReUpload) {\r\n state.autoReUpload = autoReUpload;\r\n }\r\n },\r\n actions: {\r\n async fetchUserConfig({ commit }) {\r\n try {\r\n const response = await axios.get('/api/userConfig');\r\n commit('setUserConfig', response.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n },\r\n async fetchBingWallPapers({ commit }) {\r\n try {\r\n const response = await axios.get('/api/bing/wallpaper');\r\n const wallpapers = response.data.data;\r\n const bingWallPapers = wallpapers.map(wallpaper => {\r\n return {\r\n url: 'https://www.bing.com' + wallpaper.url,\r\n };\r\n }\r\n );\r\n\r\n //预加载图片,阻塞直到图片加载完成\r\n await Promise.all(bingWallPapers.map(wallpaper => {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n img.onload = resolve;\r\n img.onerror = reject;\r\n img.src = wallpaper.url;\r\n });\r\n }));\r\n commit('setBingWallPapers', bingWallPapers);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n },\r\n modules: {\r\n },\r\n plugins: [createPersistedState({\r\n // 只持久化非敏感数据,不持久化认证状态\r\n paths: [\r\n 'userConfig',\r\n 'uploadMethod',\r\n 'uploadCopyUrlForm',\r\n 'compressConfig',\r\n 'storeUploadChannel',\r\n 'storeChannelName',\r\n 'storeAutoRetry',\r\n 'storeUploadNameType',\r\n 'uploadFolder',\r\n 'customUrlSettings',\r\n 'adminUrlSettings',\r\n 'autoReUpload',\r\n 'useDarkMode',\r\n 'cusDarkMode',\r\n ]\r\n })]\r\n})\r\n","import { createI18n } from 'vue-i18n'\r\nimport zhCN from './zh-CN.json'\r\nimport en from './en.json'\r\n\r\nconst LOCALE_KEY = 'app-locale'\r\n\r\nfunction getStoredLocale() {\r\n const stored = localStorage.getItem(LOCALE_KEY)\r\n if (stored === 'zh-CN' || stored === 'en') return stored\r\n return 'zh-CN'\r\n}\r\n\r\nconst i18n = createI18n({\r\n legacy: true,\r\n locale: getStoredLocale(),\r\n fallbackLocale: 'zh-CN',\r\n messages: { 'zh-CN': zhCN, en }\r\n})\r\n\r\nexport function setLocale(locale) {\r\n i18n.global.locale = locale\r\n localStorage.setItem(LOCALE_KEY, locale)\r\n document.documentElement.lang = locale === 'zh-CN' ? 'zh-CN' : 'en'\r\n}\r\n\r\nexport { LOCALE_KEY, getStoredLocale }\r\nexport default i18n\r\n","import { faAws } from '@fortawesome/free-brands-svg-icons/faAws';\r\nimport { faCloudflare } from '@fortawesome/free-brands-svg-icons/faCloudflare';\r\nimport { faDiscord } from '@fortawesome/free-brands-svg-icons/faDiscord';\r\nimport { faAngleDoubleLeft } from '@fortawesome/free-solid-svg-icons/faAngleDoubleLeft';\r\nimport { faAngleDoubleRight } from '@fortawesome/free-solid-svg-icons/faAngleDoubleRight';\r\nimport { faArrowDown } from '@fortawesome/free-solid-svg-icons/faArrowDown';\r\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons/faArrowLeft';\r\nimport { faArrowUp } from '@fortawesome/free-solid-svg-icons/faArrowUp';\r\nimport { faBan } from '@fortawesome/free-solid-svg-icons/faBan';\r\nimport { faBars } from '@fortawesome/free-solid-svg-icons/faBars';\r\nimport { faBook } from '@fortawesome/free-solid-svg-icons/faBook';\r\nimport { faBullhorn } from '@fortawesome/free-solid-svg-icons/faBullhorn';\r\nimport { faCalendar } from '@fortawesome/free-solid-svg-icons/faCalendar';\r\nimport { faChartBar } from '@fortawesome/free-solid-svg-icons/faChartBar';\r\nimport { faChartLine } from '@fortawesome/free-solid-svg-icons/faChartLine';\r\nimport { faCheck } from '@fortawesome/free-solid-svg-icons/faCheck';\r\nimport { faCheckSquare } from '@fortawesome/free-solid-svg-icons/faCheckSquare';\r\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons/faChevronDown';\r\nimport { faChevronLeft } from '@fortawesome/free-solid-svg-icons/faChevronLeft';\r\nimport { faChevronRight } from '@fortawesome/free-solid-svg-icons/faChevronRight';\r\nimport { faCircleHalfStroke } from '@fortawesome/free-solid-svg-icons/faCircleHalfStroke';\r\nimport { faClock } from '@fortawesome/free-solid-svg-icons/faClock';\r\nimport { faCloud } from '@fortawesome/free-solid-svg-icons/faCloud';\r\nimport { faCloudUpload } from '@fortawesome/free-solid-svg-icons/faCloudUpload';\r\nimport { faCloudUploadAlt } from '@fortawesome/free-solid-svg-icons/faCloudUploadAlt';\r\nimport { faCode } from '@fortawesome/free-solid-svg-icons/faCode';\r\nimport { faCodeBranch } from '@fortawesome/free-solid-svg-icons/faCodeBranch';\r\nimport { faCog } from '@fortawesome/free-solid-svg-icons/faCog';\r\nimport { faCogs } from '@fortawesome/free-solid-svg-icons/faCogs';\r\nimport { faComments } from '@fortawesome/free-solid-svg-icons/faComments';\r\nimport { faCompressAlt } from '@fortawesome/free-solid-svg-icons/faCompressAlt';\r\nimport { faCopy } from '@fortawesome/free-solid-svg-icons/faCopy';\r\nimport { faDatabase } from '@fortawesome/free-solid-svg-icons/faDatabase';\r\nimport { faDownload } from '@fortawesome/free-solid-svg-icons/faDownload';\r\nimport { faEdit } from '@fortawesome/free-solid-svg-icons/faEdit';\r\nimport { faEllipsisH } from '@fortawesome/free-solid-svg-icons/faEllipsisH';\r\nimport { faEllipsisV } from '@fortawesome/free-solid-svg-icons/faEllipsisV';\r\nimport { faExclamation } from '@fortawesome/free-solid-svg-icons/faExclamation';\r\nimport { faExclamationCircle } from '@fortawesome/free-solid-svg-icons/faExclamationCircle';\r\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons/faExclamationTriangle';\r\nimport { faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons/faExternalLinkAlt';\r\nimport { faEye } from '@fortawesome/free-solid-svg-icons/faEye';\r\nimport { faFile } from '@fortawesome/free-solid-svg-icons/faFile';\r\nimport { faFileAlt } from '@fortawesome/free-solid-svg-icons/faFileAlt';\r\nimport { faFileExport } from '@fortawesome/free-solid-svg-icons/faFileExport';\r\nimport { faFileSignature } from '@fortawesome/free-solid-svg-icons/faFileSignature';\r\nimport { faFilter } from '@fortawesome/free-solid-svg-icons/faFilter';\r\nimport { faFolder } from '@fortawesome/free-solid-svg-icons/faFolder';\r\nimport { faFolderOpen } from '@fortawesome/free-solid-svg-icons/faFolderOpen';\r\nimport { faFolderTree } from '@fortawesome/free-solid-svg-icons/faFolderTree';\r\nimport { faGlobe } from '@fortawesome/free-solid-svg-icons/faGlobe';\r\nimport { faHashtag } from '@fortawesome/free-solid-svg-icons/faHashtag';\r\nimport { faHistory } from '@fortawesome/free-solid-svg-icons/faHistory';\r\nimport { faHome } from '@fortawesome/free-solid-svg-icons/faHome';\r\nimport { faICursor } from '@fortawesome/free-solid-svg-icons/faICursor';\r\nimport { faImage } from '@fortawesome/free-solid-svg-icons/faImage';\r\nimport { faImages } from '@fortawesome/free-solid-svg-icons/faImages';\r\nimport { faInbox } from '@fortawesome/free-solid-svg-icons/faInbox';\r\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons/faInfoCircle';\r\nimport { faLink } from '@fortawesome/free-solid-svg-icons/faLink';\r\nimport { faList } from '@fortawesome/free-solid-svg-icons/faList';\r\nimport { faMinus } from '@fortawesome/free-solid-svg-icons/faMinus';\r\nimport { faMinusSquare } from '@fortawesome/free-solid-svg-icons/faMinusSquare';\r\nimport { faMoon } from '@fortawesome/free-solid-svg-icons/faMoon';\r\nimport { faMusic } from '@fortawesome/free-solid-svg-icons/faMusic';\r\nimport { faPager } from '@fortawesome/free-solid-svg-icons/faPager';\r\nimport { faPaperPlane } from '@fortawesome/free-solid-svg-icons/faPaperPlane';\r\nimport { faPaste } from '@fortawesome/free-solid-svg-icons/faPaste';\r\nimport { faPlus } from '@fortawesome/free-solid-svg-icons/faPlus';\r\nimport { faQuestionCircle } from '@fortawesome/free-solid-svg-icons/faQuestionCircle';\r\nimport { faQuoteRight } from '@fortawesome/free-solid-svg-icons/faQuoteRight';\r\nimport { faRedo } from '@fortawesome/free-solid-svg-icons/faRedo';\r\nimport { faRobot } from '@fortawesome/free-solid-svg-icons/faRobot';\r\nimport { faSave } from '@fortawesome/free-solid-svg-icons/faSave';\r\nimport { faSearch } from '@fortawesome/free-solid-svg-icons/faSearch';\r\nimport { faServer } from '@fortawesome/free-solid-svg-icons/faServer';\r\nimport { faShareAlt } from '@fortawesome/free-solid-svg-icons/faShareAlt';\r\nimport { faShield } from '@fortawesome/free-solid-svg-icons/faShield';\r\nimport { faShieldAlt } from '@fortawesome/free-solid-svg-icons/faShieldAlt';\r\nimport { faSignOutAlt } from '@fortawesome/free-solid-svg-icons/faSignOutAlt';\r\nimport { faSortAlphaUp } from '@fortawesome/free-solid-svg-icons/faSortAlphaUp';\r\nimport { faSortAmountDown } from '@fortawesome/free-solid-svg-icons/faSortAmountDown';\r\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons/faSpinner';\r\nimport { faSquare } from '@fortawesome/free-solid-svg-icons/faSquare';\r\nimport { faSun } from '@fortawesome/free-solid-svg-icons/faSun';\r\nimport { faSync } from '@fortawesome/free-solid-svg-icons/faSync';\r\nimport { faSyncAlt } from '@fortawesome/free-solid-svg-icons/faSyncAlt';\r\nimport { faTachometerAlt } from '@fortawesome/free-solid-svg-icons/faTachometerAlt';\r\nimport { faTag } from '@fortawesome/free-solid-svg-icons/faTag';\r\nimport { faTags } from '@fortawesome/free-solid-svg-icons/faTags';\r\nimport { faThLarge } from '@fortawesome/free-solid-svg-icons/faThLarge';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons/faTimes';\r\nimport { faTools } from '@fortawesome/free-solid-svg-icons/faTools';\r\nimport { faTrashAlt } from '@fortawesome/free-solid-svg-icons/faTrashAlt';\r\nimport { faUpload } from '@fortawesome/free-solid-svg-icons/faUpload';\r\nimport { faUserCog } from '@fortawesome/free-solid-svg-icons/faUserCog';\r\n\r\nexport default [\r\n faAngleDoubleLeft,\r\n faAngleDoubleRight,\r\n faArrowDown,\r\n faArrowLeft,\r\n faArrowUp,\r\n faAws,\r\n faBan,\r\n faBars,\r\n faBook,\r\n faBullhorn,\r\n faCalendar,\r\n faChartBar,\r\n faChartLine,\r\n faCheck,\r\n faCheckSquare,\r\n faChevronDown,\r\n faChevronLeft,\r\n faChevronRight,\r\n faCircleHalfStroke,\r\n faClock,\r\n faCloud,\r\n faCloudflare,\r\n faCloudUpload,\r\n faCloudUploadAlt,\r\n faCode,\r\n faCodeBranch,\r\n faCog,\r\n faCogs,\r\n faComments,\r\n faCompressAlt,\r\n faCopy,\r\n faDatabase,\r\n faDiscord,\r\n faDownload,\r\n faEdit,\r\n faEllipsisH,\r\n faEllipsisV,\r\n faExclamation,\r\n faExclamationCircle,\r\n faExclamationTriangle,\r\n faExternalLinkAlt,\r\n faEye,\r\n faFile,\r\n faFileAlt,\r\n faFileExport,\r\n faFileSignature,\r\n faFilter,\r\n faFolder,\r\n faFolderOpen,\r\n faFolderTree,\r\n faGlobe,\r\n faHashtag,\r\n faHistory,\r\n faHome,\r\n faICursor,\r\n faImage,\r\n faImages,\r\n faInbox,\r\n faInfoCircle,\r\n faLink,\r\n faList,\r\n faMinus,\r\n faMinusSquare,\r\n faMoon,\r\n faMusic,\r\n faPager,\r\n faPaperPlane,\r\n faPaste,\r\n faPlus,\r\n faQuestionCircle,\r\n faQuoteRight,\r\n faRedo,\r\n faRobot,\r\n faSave,\r\n faSearch,\r\n faServer,\r\n faShareAlt,\r\n faShield,\r\n faShieldAlt,\r\n faSignOutAlt,\r\n faSortAlphaUp,\r\n faSortAmountDown,\r\n faSpinner,\r\n faSquare,\r\n faSun,\r\n faSync,\r\n faSyncAlt,\r\n faTachometerAlt,\r\n faTag,\r\n faTags,\r\n faThLarge,\r\n faTimes,\r\n faTools,\r\n faTrashAlt,\r\n faUpload,\r\n faUserCog\r\n];\r\n","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\";\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_router_view = _resolveComponent(\"router-view\");\n const _component_el_config_provider = _resolveComponent(\"el-config-provider\");\n return _openBlock(), _createBlock(_component_el_config_provider, {\n locale: $options.elementLocale\n }, {\n default: _withCtx(() => [_createVNode(_component_router_view)]),\n _: 1\n }, 8, [\"locale\"]);\n}","import { mapGetters } from 'vuex';\nimport { OverlayScrollbars } from 'overlayscrollbars';\nimport zhCnLocale from 'element-plus/es/locale/lang/zh-cn';\nimport enLocale from 'element-plus/es/locale/lang/en';\nexport default {\n data() {\n return {\n osInstance: null,\n imageViewerObserver: null\n };\n },\n computed: {\n ...mapGetters(['userConfig', 'useDarkMode']),\n elementLocale() {\n return this.$i18n.locale === 'zh-CN' ? zhCnLocale : enLocale;\n }\n },\n mounted() {\n // 初始化 OverlayScrollbars 悬浮滚动条\n this.$nextTick(() => {\n this.initOverlayScrollbars();\n this.setupImageViewerObserver();\n });\n },\n beforeUnmount() {\n // 清理 MutationObserver\n if (this.imageViewerObserver) {\n this.imageViewerObserver.disconnect();\n }\n },\n watch: {},\n methods: {\n initOverlayScrollbars() {\n try {\n // 检查是否已经初始化\n if (OverlayScrollbars.valid(document.body)) {\n this.osInstance = OverlayScrollbars(document.body);\n return;\n }\n\n // 应用到 body 实现全局悬浮滚动条\n this.osInstance = OverlayScrollbars(document.body, {\n scrollbars: {\n theme: 'os-theme-dark',\n visibility: 'auto',\n autoHide: 'scroll',\n autoHideDelay: 600,\n dragScroll: true,\n clickScroll: true\n },\n overflow: {\n x: 'hidden',\n y: 'scroll'\n }\n });\n console.log('OverlayScrollbars initialized successfully');\n } catch (error) {\n console.error('Failed to initialize OverlayScrollbars:', error);\n }\n },\n setupImageViewerObserver() {\n // 监听图片预览器的打开/关闭,动态控制 OverlayScrollbars\n this.imageViewerObserver = new MutationObserver(mutations => {\n const imageViewer = document.querySelector('.el-image-viewer__wrapper');\n if (imageViewer) {\n // 图片预览器打开,禁用滚动\n if (this.osInstance) {\n this.osInstance.options({\n overflow: {\n x: 'hidden',\n y: 'hidden'\n }\n });\n }\n } else {\n // 图片预览器关闭,恢复滚动\n if (this.osInstance) {\n this.osInstance.options({\n overflow: {\n x: 'hidden',\n y: 'scroll'\n }\n });\n }\n }\n });\n this.imageViewerObserver.observe(document.body, {\n childList: true,\n subtree: true\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./App.vue?vue&type=template&id=6633a13d\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createApp } from 'vue'\r\nimport { createHead } from '@vueuse/head'; // 导入 createHead\r\nimport ElementPlus from 'element-plus'\r\nimport 'element-plus/es/components/message/style/css'\r\nimport 'element-plus/es/components/message-box/style/css'\r\n\r\nimport { library } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';\r\nimport fontAwesomeIcons from './utils/fontawesomeIcons';\r\n\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\r\nimport i18n from './locales'\r\n\r\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\r\nimport 'element-plus/theme-chalk/dark/css-vars.css'\r\nimport './styles/global.css'\r\n\r\n// OverlayScrollbars 悬浮滚动条\r\nimport 'overlayscrollbars/overlayscrollbars.css'\r\n\r\n\r\nlibrary.add(...fontAwesomeIcons);\r\n\r\nconst app = createApp(App);\r\nconst head = createHead(); // 创建 head 对象\r\n\r\napp.component('font-awesome-icon', FontAwesomeIcon);\r\nfor (const [key, component] of Object.entries(ElementPlusIconsVue)) {\r\n app.component(key, component)\r\n}\r\n\r\n// 根据 useDarkMode 的值添加或移除 dark 类\r\nconst initDarkModeClass = () => {\r\n const htmlElement = document.documentElement;\r\n let isDarkMode;\r\n\r\n // 判断用户是否是自定义模式\r\n if (store.state.cusDarkMode && store.state.useDarkMode !== null) {\r\n // 用户手动设置了暗色模式\r\n isDarkMode = store.state.useDarkMode;\r\n } else {\r\n // 跟随系统模式或时间\r\n isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n if (!isDarkMode) {\r\n const now = new Date();\r\n const hour = now.getHours();\r\n isDarkMode = hour >= 22 || hour < 6;\r\n }\r\n // 更新 useDarkMode 的值\r\n store.commit('setUseDarkMode', isDarkMode);\r\n }\r\n\r\n if (isDarkMode) {\r\n htmlElement.classList.add('dark');\r\n } else {\r\n htmlElement.classList.remove('dark');\r\n }\r\n};\r\n\r\nconst applyDarkModeClass = (isDarkMode) => {\r\n const htmlElement = document.documentElement;\r\n if (isDarkMode) {\r\n htmlElement.classList.add('dark');\r\n } else {\r\n htmlElement.classList.remove('dark');\r\n }\r\n};\r\n\r\n// 预设网站标题的函数\r\nconst presetSiteTitle = (userConfig) => {\r\n document.title = userConfig?.siteTitle || 'Sanyue ImgHub';\r\n};\r\n\r\n// 预设和更新网站图标的函数\r\nconst presetSiteIcon = (isDarkMode, userConfig) => {\r\n // 同时更改 icon apple-touch-icon 和 mask-icon\r\n const existingIcons = document.querySelectorAll('link[rel=\"icon\"], link[rel=\"apple-touch-icon\"], link[rel=\"mask-icon\"]');\r\n existingIcons.forEach(icon => icon.remove());\r\n\r\n const iconLink = document.createElement('link');\r\n const appleIconLink = document.createElement('link');\r\n const maskIconLink = document.createElement('link');\r\n iconLink.rel = 'icon';\r\n appleIconLink.rel = 'apple-touch-icon';\r\n maskIconLink.rel = 'mask-icon';\r\n\r\n if (isDarkMode) {\r\n iconLink.href = userConfig?.siteIcon || '/static/media/logo-dark.png';\r\n appleIconLink.href = userConfig?.siteIcon || '/static/media/logo-dark.png';\r\n maskIconLink.href = userConfig?.siteIcon || '/static/media/logo-dark.png';\r\n } else {\r\n iconLink.href = userConfig?.siteIcon || '/static/media/logo.png';\r\n appleIconLink.href = userConfig?.siteIcon || '/static/media/logo.png';\r\n maskIconLink.href = userConfig?.siteIcon || '/static/media/logo.png';\r\n }\r\n\r\n document.head.appendChild(iconLink);\r\n document.head.appendChild(appleIconLink);\r\n document.head.appendChild(maskIconLink);\r\n};\r\n\r\nstore.dispatch('fetchUserConfig').then(() => {\r\n // 初始化时应用 dark 模式\r\n initDarkModeClass();\r\n\r\n // 预设网站标题和图标\r\n presetSiteTitle(store.getters.userConfig);\r\n presetSiteIcon(store.state.useDarkMode, store.getters.userConfig);\r\n\r\n // 监听 useDarkMode 和 cusDarkMode 的变化\r\n store.subscribe((mutation, state) => {\r\n if (mutation.type === 'setUseDarkMode' && store.state.cusDarkMode) {\r\n applyDarkModeClass(state.useDarkMode);\r\n // 同时更新网站图标\r\n presetSiteIcon(state.useDarkMode, store.getters.userConfig);\r\n }\r\n\r\n // 监听 cusDarkMode 变化,当设置为 false 时重新初始化\r\n if (mutation.type === 'setCusDarkMode' && !mutation.payload) {\r\n // 切换到跟随系统模式,重新初始化\r\n initDarkModeClass();\r\n // 同时更新网站图标\r\n presetSiteIcon(store.state.useDarkMode, store.getters.userConfig);\r\n }\r\n });\r\n\r\n app.use(store).use(router).use(ElementPlus).use(i18n).mount('#app');\r\n}).catch(error => {\r\n console.error('Failed to load user configuration:', error);\r\n app.use(store).use(router).use(ElementPlus).use(i18n).use(head).mount('#app');\r\n})\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"5\":\"046872c7\",\"22\":\"b436b08e\",\"36\":\"1f3c2bdf\",\"63\":\"503c70e6\",\"380\":\"62235203\",\"549\":\"ffe205fb\",\"645\":\"a0ee257d\",\"711\":\"936a7109\",\"743\":\"f28adaf7\",\"773\":\"f0780366\",\"787\":\"d0dbc2dd\",\"803\":\"4f2ba956\",\"903\":\"1e4b549d\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"5\":\"3a85dbb0\",\"30\":\"c12a4e5b\",\"36\":\"5ae2c698\",\"63\":\"398231b7\",\"173\":\"f8fd1fa2\",\"322\":\"2b40f004\",\"549\":\"0f00dee2\",\"645\":\"a0ee33b3\",\"711\":\"e6dbd5da\",\"743\":\"4cb567b6\",\"773\":\"b55efe26\",\"787\":\"f6f7607a\",\"803\":\"398231b7\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"sanyue_imghub:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function(chunkId, fullhref, oldTag, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"5\":1,\"30\":1,\"36\":1,\"63\":1,\"173\":1,\"322\":1,\"549\":1,\"645\":1,\"711\":1,\"743\":1,\"773\":1,\"787\":1,\"803\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^(173|30|322)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunksanyue_imghub\"] = self[\"webpackChunksanyue_imghub\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(81525); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["instance","axios","create","baseURL","withCredentials","adminAuthGuard","to","from","next","get","then","res","data","adminRequired","store","commit","valid","authType","wasLoggedIn","state","adminLoggedIn","name","ElMessage","error","i18n","global","t","catch","userAuthGuard","userRequired","userLoggedIn","routes","path","component","beforeEnter","router","createRouter","history","createWebHistory","process","createStore","userConfig","bingWallPapers","uploadMethod","uploadCopyUrlForm","compressConfig","customerCompress","undefined","compressQuality","compressBar","serverCompress","convertToWebp","storeUploadChannel","storeChannelName","storeAutoRetry","storeUploadNameType","uploadFolder","customUrlSettings","useCustomUrl","customUrlPrefix","adminUrlSettings","autoReUpload","useDarkMode","cusDarkMode","getters","storeUploadMethod","storeUploadFolder","localStorage","getItem","storeAutoReUpload","mutations","setUserConfig","setBingWallPapers","setAdminLoggedIn","loggedIn","setUserLoggedIn","setUploadMethod","setUploadCopyUrlForm","setCompressConfig","key","value","setStoreUploadChannel","uploadChannel","setStoreChannelName","channelName","setStoreUploadNameType","setCustomUrlSettings","setStoreAutoRetry","setAdminUrlSettings","setUseDarkMode","setCusDarkMode","setStoreUploadFolder","folder","setItem","setStoreAutoReUpload","actions","fetchUserConfig","response","console","log","fetchBingWallPapers","wallpapers","map","wallpaper","url","Promise","all","resolve","reject","img","Image","onload","onerror","src","modules","plugins","createPersistedState","paths","LOCALE_KEY","getStoredLocale","stored","createI18n","legacy","locale","fallbackLocale","messages","zhCN","en","setLocale","document","documentElement","lang","faAngleDoubleLeft","faAngleDoubleRight","faArrowDown","faArrowLeft","faArrowUp","faAws","faBan","faBars","faBook","faBullhorn","faCalendar","faChartBar","faChartLine","faCheck","faCheckSquare","faChevronDown","faChevronLeft","faChevronRight","faCircleHalfStroke","faClock","faCloud","faCloudflare","faCloudUpload","faCloudUploadAlt","faCode","faCodeBranch","faCog","faCogs","faComments","faCompressAlt","faCopy","faDatabase","faDiscord","faDownload","faEdit","faEllipsisH","faEllipsisV","faExclamation","faExclamationCircle","faExclamationTriangle","faExternalLinkAlt","faEye","faFile","faFileAlt","faFileExport","faFileSignature","faFilter","faFolder","faFolderOpen","faFolderTree","faGlobe","faHashtag","faHistory","faHome","faICursor","faImage","faImages","faInbox","faInfoCircle","faLink","faList","faMinus","faMinusSquare","faMoon","faMusic","faPager","faPaperPlane","faPaste","faPlus","faQuestionCircle","faQuoteRight","faRedo","faRobot","faSave","faSearch","faServer","faShareAlt","faShield","faShieldAlt","faSignOutAlt","faSortAlphaUp","faSortAmountDown","faSpinner","faSquare","faSun","faSync","faSyncAlt","faTachometerAlt","faTag","faTags","faThLarge","faTimes","faTools","faTrashAlt","faUpload","faUserCog","render","_ctx","_cache","$props","$setup","$data","$options","_component_router_view","_component_el_config_provider","elementLocale","default","_","osInstance","imageViewerObserver","computed","this","$i18n","mounted","$nextTick","initOverlayScrollbars","setupImageViewerObserver","beforeUnmount","disconnect","watch","methods","body","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","overflow","x","y","MutationObserver","imageViewer","querySelector","options","observe","childList","subtree","__exports__","library","add","fontAwesomeIcons","app","createApp","App","head","createHead","FontAwesomeIcon","Object","entries","ElementPlusIconsVue","initDarkModeClass","htmlElement","isDarkMode","window","matchMedia","matches","now","Date","hour","getHours","classList","remove","applyDarkModeClass","presetSiteTitle","title","siteTitle","presetSiteIcon","existingIcons","querySelectorAll","forEach","icon","iconLink","createElement","appleIconLink","maskIconLink","rel","href","siteIcon","appendChild","dispatch","subscribe","mutation","type","payload","use","ElementPlus","mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","f","e","chunkId","reduce","promises","u","miniCssF","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","done","push","script","needAttach","scripts","getElementsByTagName","s","getAttribute","charset","nc","setAttribute","onScriptComplete","prev","event","clearTimeout","timeout","doneFns","parentNode","removeChild","setTimeout","bind","target","Symbol","toStringTag","p","createStylesheet","fullhref","oldTag","linkTag","nonce","onLinkComplete","errorType","realHref","err","Error","code","request","insertBefore","nextSibling","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","test","promise","loadingEnded","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","id","chunkLoadingGlobal","self","__webpack_exports__"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js/app.33af96b9.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/utils/axios.js","webpack://sanyue_imghub/./src/router/index.js","webpack://sanyue_imghub/./src/store/index.js","webpack://sanyue_imghub/./src/locales/index.js","webpack://sanyue_imghub/./src/utils/fontawesomeIcons.js","webpack://sanyue_imghub/./src/App.vue?83ca","webpack://sanyue_imghub/./src/App.vue","webpack://sanyue_imghub/./src/App.vue?a135","webpack://sanyue_imghub/./src/main.js","webpack://sanyue_imghub/webpack/bootstrap","webpack://sanyue_imghub/webpack/runtime/chunk loaded","webpack://sanyue_imghub/webpack/runtime/compat get default export","webpack://sanyue_imghub/webpack/runtime/define property getters","webpack://sanyue_imghub/webpack/runtime/ensure chunk","webpack://sanyue_imghub/webpack/runtime/get javascript chunk filename","webpack://sanyue_imghub/webpack/runtime/get mini-css chunk filename","webpack://sanyue_imghub/webpack/runtime/global","webpack://sanyue_imghub/webpack/runtime/hasOwnProperty shorthand","webpack://sanyue_imghub/webpack/runtime/load script","webpack://sanyue_imghub/webpack/runtime/make namespace object","webpack://sanyue_imghub/webpack/runtime/publicPath","webpack://sanyue_imghub/webpack/runtime/css loading","webpack://sanyue_imghub/webpack/runtime/jsonp chunk loading","webpack://sanyue_imghub/webpack/startup"],"sourcesContent":["import axios from 'axios';\r\n\r\n// 创建axios实例\r\nconst instance = axios.create({\r\n baseURL: process.env.NODE_ENV === 'production' ? '/' : '/api',\r\n withCredentials: true, // 始终携带 Cookie(HttpOnly session cookie)\r\n});\r\n\r\nexport default instance;\r\n","import { createRouter, createWebHistory } from 'vue-router'\r\nimport { ElMessage } from 'element-plus'\r\nimport store from '../store'\r\nimport axios from '@/utils/axios'\r\nimport i18n from '@/locales'\r\n\r\n// 通用的管理员认证守卫\r\nconst adminAuthGuard = (to, from, next) => {\r\n axios.get('/api/auth/sessionCheck', {\r\n withCredentials: true\r\n }).then(res => {\r\n const data = res.data || {}\r\n\r\n // 不需要管理端认证,直接放行\r\n if (!data.adminRequired) {\r\n store.commit('setAdminLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证,检查是否有有效的 admin session\r\n if (data.valid && data.authType === 'admin') {\r\n store.commit('setAdminLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证但没有有效 session,跳转登录\r\n // 只有之前已登录(session 过期)才提示错误,首次未登录静默跳转\r\n const wasLoggedIn = store.state.adminLoggedIn\r\n store.commit('setAdminLoggedIn', false)\r\n if (to.name !== 'adminLogin') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'adminLogin' })\r\n } else {\r\n next()\r\n }\r\n }).catch(() => {\r\n const wasLoggedIn = store.state.adminLoggedIn\r\n store.commit('setAdminLoggedIn', false)\r\n if (to.name !== 'adminLogin') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'adminLogin' })\r\n } else {\r\n next()\r\n }\r\n })\r\n}\r\n\r\n// 通用的用户认证守卫\r\nconst userAuthGuard = (to, from, next) => {\r\n axios.get('/api/auth/sessionCheck', {\r\n withCredentials: true\r\n }).then(res => {\r\n const data = res.data || {}\r\n\r\n // 不需要用户端认证,直接放行\r\n if (!data.userRequired) {\r\n store.commit('setUserLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证,检查是否有有效 session(user 或 admin 都可以)\r\n if (data.valid) {\r\n store.commit('setUserLoggedIn', true)\r\n return next()\r\n }\r\n\r\n // 需要认证但没有有效 session,跳转登录\r\n // 只有之前已登录(session 过期)才提示错误,首次未登录静默跳转\r\n const wasLoggedIn = store.state.userLoggedIn\r\n store.commit('setUserLoggedIn', false)\r\n if (to.name !== 'login') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'login' })\r\n } else {\r\n next()\r\n }\r\n }).catch(() => {\r\n const wasLoggedIn = store.state.userLoggedIn\r\n store.commit('setUserLoggedIn', false)\r\n if (to.name !== 'login') {\r\n if (wasLoggedIn) {\r\n ElMessage.error(i18n.global.t('login.authRequired'))\r\n }\r\n next({ name: 'login' })\r\n } else {\r\n next()\r\n }\r\n })\r\n}\r\n\r\nconst routes = [\r\n {\r\n path: '/',\r\n name: 'home',\r\n component: () => import('../views/UploadHome.vue'),\r\n beforeEnter: userAuthGuard\r\n },\r\n {\r\n path: '/login',\r\n name: 'login',\r\n component: () => import('../views/Login.vue')\r\n },\r\n {\r\n path: '/dashboard',\r\n name: 'dashboard',\r\n component: () => import('../views/AdminDashBoard.vue'),\r\n beforeEnter: adminAuthGuard\r\n },\r\n {\r\n path: '/customerConfig',\r\n name: 'customerConfig',\r\n component: () => import('../views/CustomerConfig.vue'),\r\n beforeEnter: adminAuthGuard\r\n },\r\n {\r\n path: '/systemConfig',\r\n name: 'systemConfig',\r\n component: () => import('../views/SystemConfig.vue'),\r\n beforeEnter: adminAuthGuard\r\n },\r\n {\r\n path: '/adminLogin',\r\n name: 'adminLogin',\r\n component: () => import('../views/AdminLogin.vue'),\r\n },\r\n {\r\n path: '/blockimg',\r\n name: 'blockimg',\r\n component: () => import('../views/BlockImage.vue'),\r\n },\r\n {\r\n path: '/whiteliston',\r\n name: 'whiteliston',\r\n component: () => import('../views/WhiteListOn.vue'),\r\n },\r\n {\r\n path: '/browse/:dir*',\r\n name: 'publicBrowse',\r\n component: () => import('../views/PublicBrowse.vue'),\r\n },\r\n {\r\n path: '/:pathMatch(.*)*',\r\n name: 'notFound',\r\n component: () => import('../views/NotFound.vue'),\r\n },\r\n]\r\n\r\nconst router = createRouter({\r\n history: createWebHistory(process.env.BASE_URL),\r\n routes\r\n})\r\n\r\nexport default router\r\n","import { createStore } from 'vuex'\r\nimport axios from '@/utils/axios';\r\nimport createPersistedState from 'vuex-persistedstate';\r\n\r\nexport default createStore({\r\n state: {\r\n userConfig: null,\r\n bingWallPapers: [],\r\n // 会话状态标记(不存储密码,实际认证通过 HttpOnly Cookie)\r\n adminLoggedIn: false,\r\n userLoggedIn: false,\r\n uploadMethod: 'default',\r\n uploadCopyUrlForm: '',\r\n compressConfig: {\r\n customerCompress: undefined,\r\n compressQuality: undefined,\r\n compressBar: undefined,\r\n serverCompress: undefined,\r\n convertToWebp: undefined,\r\n },\r\n storeUploadChannel: '',\r\n storeChannelName: null, // 指定的渠道名称,null表示从未选择,''表示用户主动清空\r\n storeAutoRetry: true,\r\n storeUploadNameType: '',\r\n uploadFolder: '',\r\n customUrlSettings: {\r\n useCustomUrl: 'false',\r\n customUrlPrefix: '',\r\n },\r\n adminUrlSettings: {\r\n useCustomUrl: 'false',\r\n customUrlPrefix: '',\r\n },\r\n autoReUpload: true,\r\n // 深色模式\r\n useDarkMode: null,\r\n cusDarkMode: false,\r\n },\r\n getters: {\r\n userConfig: state => state.userConfig,\r\n bingWallPapers: state => state.bingWallPapers,\r\n adminLoggedIn: state => state.adminLoggedIn,\r\n userLoggedIn: state => state.userLoggedIn,\r\n storeUploadMethod: state => state.uploadMethod,\r\n uploadCopyUrlForm: state => state.uploadCopyUrlForm,\r\n compressConfig: state => state.compressConfig,\r\n storeUploadChannel: state => state.storeUploadChannel,\r\n storeChannelName: state => state.storeChannelName,\r\n storeUploadNameType: state => state.storeUploadNameType,\r\n customUrlSettings: state => state.customUrlSettings,\r\n storeAutoRetry: state => state.storeAutoRetry,\r\n adminUrlSettings: state => state.adminUrlSettings,\r\n storeUploadFolder: (state) => {\r\n return state.uploadFolder || localStorage.getItem('uploadFolder') || ''\r\n },\r\n useDarkMode: state => state.useDarkMode,\r\n cusDarkMode: state => state.cusDarkMode,\r\n storeAutoReUpload: state => state.autoReUpload,\r\n },\r\n mutations: {\r\n setUserConfig(state, userConfig) {\r\n state.userConfig = userConfig;\r\n },\r\n setBingWallPapers(state, bingWallPapers) {\r\n state.bingWallPapers = bingWallPapers;\r\n },\r\n setAdminLoggedIn(state, loggedIn) {\r\n state.adminLoggedIn = loggedIn;\r\n },\r\n setUserLoggedIn(state, loggedIn) {\r\n state.userLoggedIn = loggedIn;\r\n },\r\n setUploadMethod(state, uploadMethod) {\r\n state.uploadMethod = uploadMethod;\r\n },\r\n setUploadCopyUrlForm(state, uploadCopyUrlForm) {\r\n state.uploadCopyUrlForm = uploadCopyUrlForm;\r\n },\r\n setCompressConfig(state, { key, value }) {\r\n state.compressConfig[key] = value;\r\n },\r\n setStoreUploadChannel(state, uploadChannel) {\r\n state.storeUploadChannel = uploadChannel;\r\n },\r\n setStoreChannelName(state, channelName) {\r\n state.storeChannelName = channelName;\r\n },\r\n setStoreUploadNameType(state, storeUploadNameType) {\r\n state.storeUploadNameType = storeUploadNameType;\r\n },\r\n setCustomUrlSettings(state, { key, value }) {\r\n state.customUrlSettings[key] = value;\r\n },\r\n setStoreAutoRetry(state, storeAutoRetry) {\r\n state.storeAutoRetry = storeAutoRetry;\r\n },\r\n setAdminUrlSettings(state, { key, value }) {\r\n state.adminUrlSettings[key] = value;\r\n },\r\n setUseDarkMode(state, useDarkMode) {\r\n state.useDarkMode = useDarkMode;\r\n },\r\n setCusDarkMode(state, cusDarkMode) {\r\n state.cusDarkMode = cusDarkMode;\r\n },\r\n setStoreUploadFolder(state, folder) {\r\n state.uploadFolder = folder\r\n localStorage.setItem('uploadFolder', folder)\r\n },\r\n setStoreAutoReUpload(state, autoReUpload) {\r\n state.autoReUpload = autoReUpload;\r\n }\r\n },\r\n actions: {\r\n async fetchUserConfig({ commit }) {\r\n try {\r\n const response = await axios.get('/api/userConfig');\r\n commit('setUserConfig', response.data);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n },\r\n async fetchBingWallPapers({ commit }) {\r\n try {\r\n const response = await axios.get('/api/bing/wallpaper');\r\n const wallpapers = response.data.data;\r\n const bingWallPapers = wallpapers.map(wallpaper => {\r\n return {\r\n url: 'https://www.bing.com' + wallpaper.url,\r\n };\r\n }\r\n );\r\n\r\n //预加载图片,阻塞直到图片加载完成\r\n await Promise.all(bingWallPapers.map(wallpaper => {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n img.onload = resolve;\r\n img.onerror = reject;\r\n img.src = wallpaper.url;\r\n });\r\n }));\r\n commit('setBingWallPapers', bingWallPapers);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n },\r\n modules: {\r\n },\r\n plugins: [createPersistedState({\r\n // 只持久化非敏感数据,不持久化认证状态\r\n paths: [\r\n 'userConfig',\r\n 'uploadMethod',\r\n 'uploadCopyUrlForm',\r\n 'compressConfig',\r\n 'storeUploadChannel',\r\n 'storeChannelName',\r\n 'storeAutoRetry',\r\n 'storeUploadNameType',\r\n 'uploadFolder',\r\n 'customUrlSettings',\r\n 'adminUrlSettings',\r\n 'autoReUpload',\r\n 'useDarkMode',\r\n 'cusDarkMode',\r\n ]\r\n })]\r\n})\r\n","import { createI18n } from 'vue-i18n'\r\nimport zhCN from './zh-CN.json'\r\nimport en from './en.json'\r\n\r\nconst LOCALE_KEY = 'app-locale'\r\n\r\nfunction getStoredLocale() {\r\n const stored = localStorage.getItem(LOCALE_KEY)\r\n if (stored === 'zh-CN' || stored === 'en') return stored\r\n return 'zh-CN'\r\n}\r\n\r\nconst i18n = createI18n({\r\n legacy: true,\r\n locale: getStoredLocale(),\r\n fallbackLocale: 'zh-CN',\r\n messages: { 'zh-CN': zhCN, en }\r\n})\r\n\r\nexport function setLocale(locale) {\r\n i18n.global.locale = locale\r\n localStorage.setItem(LOCALE_KEY, locale)\r\n document.documentElement.lang = locale === 'zh-CN' ? 'zh-CN' : 'en'\r\n}\r\n\r\nexport { LOCALE_KEY, getStoredLocale }\r\nexport default i18n\r\n","import { faAws } from '@fortawesome/free-brands-svg-icons/faAws';\r\nimport { faCloudflare } from '@fortawesome/free-brands-svg-icons/faCloudflare';\r\nimport { faDiscord } from '@fortawesome/free-brands-svg-icons/faDiscord';\r\nimport { faAngleDoubleLeft } from '@fortawesome/free-solid-svg-icons/faAngleDoubleLeft';\r\nimport { faAngleDoubleRight } from '@fortawesome/free-solid-svg-icons/faAngleDoubleRight';\r\nimport { faArrowDown } from '@fortawesome/free-solid-svg-icons/faArrowDown';\r\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons/faArrowLeft';\r\nimport { faArrowUp } from '@fortawesome/free-solid-svg-icons/faArrowUp';\r\nimport { faBan } from '@fortawesome/free-solid-svg-icons/faBan';\r\nimport { faBars } from '@fortawesome/free-solid-svg-icons/faBars';\r\nimport { faBook } from '@fortawesome/free-solid-svg-icons/faBook';\r\nimport { faBullhorn } from '@fortawesome/free-solid-svg-icons/faBullhorn';\r\nimport { faCalendar } from '@fortawesome/free-solid-svg-icons/faCalendar';\r\nimport { faChartBar } from '@fortawesome/free-solid-svg-icons/faChartBar';\r\nimport { faChartLine } from '@fortawesome/free-solid-svg-icons/faChartLine';\r\nimport { faCheck } from '@fortawesome/free-solid-svg-icons/faCheck';\r\nimport { faCheckSquare } from '@fortawesome/free-solid-svg-icons/faCheckSquare';\r\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons/faChevronDown';\r\nimport { faChevronLeft } from '@fortawesome/free-solid-svg-icons/faChevronLeft';\r\nimport { faChevronRight } from '@fortawesome/free-solid-svg-icons/faChevronRight';\r\nimport { faCircleHalfStroke } from '@fortawesome/free-solid-svg-icons/faCircleHalfStroke';\r\nimport { faClock } from '@fortawesome/free-solid-svg-icons/faClock';\r\nimport { faCloud } from '@fortawesome/free-solid-svg-icons/faCloud';\r\nimport { faCloudUpload } from '@fortawesome/free-solid-svg-icons/faCloudUpload';\r\nimport { faCloudUploadAlt } from '@fortawesome/free-solid-svg-icons/faCloudUploadAlt';\r\nimport { faCode } from '@fortawesome/free-solid-svg-icons/faCode';\r\nimport { faCodeBranch } from '@fortawesome/free-solid-svg-icons/faCodeBranch';\r\nimport { faCog } from '@fortawesome/free-solid-svg-icons/faCog';\r\nimport { faCogs } from '@fortawesome/free-solid-svg-icons/faCogs';\r\nimport { faComments } from '@fortawesome/free-solid-svg-icons/faComments';\r\nimport { faCompressAlt } from '@fortawesome/free-solid-svg-icons/faCompressAlt';\r\nimport { faCopy } from '@fortawesome/free-solid-svg-icons/faCopy';\r\nimport { faDatabase } from '@fortawesome/free-solid-svg-icons/faDatabase';\r\nimport { faDownload } from '@fortawesome/free-solid-svg-icons/faDownload';\r\nimport { faEdit } from '@fortawesome/free-solid-svg-icons/faEdit';\r\nimport { faEllipsisH } from '@fortawesome/free-solid-svg-icons/faEllipsisH';\r\nimport { faEllipsisV } from '@fortawesome/free-solid-svg-icons/faEllipsisV';\r\nimport { faExclamation } from '@fortawesome/free-solid-svg-icons/faExclamation';\r\nimport { faExclamationCircle } from '@fortawesome/free-solid-svg-icons/faExclamationCircle';\r\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons/faExclamationTriangle';\r\nimport { faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons/faExternalLinkAlt';\r\nimport { faEye } from '@fortawesome/free-solid-svg-icons/faEye';\r\nimport { faFile } from '@fortawesome/free-solid-svg-icons/faFile';\r\nimport { faFileAlt } from '@fortawesome/free-solid-svg-icons/faFileAlt';\r\nimport { faFileExport } from '@fortawesome/free-solid-svg-icons/faFileExport';\r\nimport { faFileSignature } from '@fortawesome/free-solid-svg-icons/faFileSignature';\r\nimport { faFilter } from '@fortawesome/free-solid-svg-icons/faFilter';\r\nimport { faFolder } from '@fortawesome/free-solid-svg-icons/faFolder';\r\nimport { faFolderOpen } from '@fortawesome/free-solid-svg-icons/faFolderOpen';\r\nimport { faFolderTree } from '@fortawesome/free-solid-svg-icons/faFolderTree';\r\nimport { faGlobe } from '@fortawesome/free-solid-svg-icons/faGlobe';\r\nimport { faHashtag } from '@fortawesome/free-solid-svg-icons/faHashtag';\r\nimport { faHistory } from '@fortawesome/free-solid-svg-icons/faHistory';\r\nimport { faHome } from '@fortawesome/free-solid-svg-icons/faHome';\r\nimport { faICursor } from '@fortawesome/free-solid-svg-icons/faICursor';\r\nimport { faImage } from '@fortawesome/free-solid-svg-icons/faImage';\r\nimport { faImages } from '@fortawesome/free-solid-svg-icons/faImages';\r\nimport { faInbox } from '@fortawesome/free-solid-svg-icons/faInbox';\r\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons/faInfoCircle';\r\nimport { faLink } from '@fortawesome/free-solid-svg-icons/faLink';\r\nimport { faList } from '@fortawesome/free-solid-svg-icons/faList';\r\nimport { faMinus } from '@fortawesome/free-solid-svg-icons/faMinus';\r\nimport { faMinusSquare } from '@fortawesome/free-solid-svg-icons/faMinusSquare';\r\nimport { faMoon } from '@fortawesome/free-solid-svg-icons/faMoon';\r\nimport { faMusic } from '@fortawesome/free-solid-svg-icons/faMusic';\r\nimport { faPager } from '@fortawesome/free-solid-svg-icons/faPager';\r\nimport { faPaperPlane } from '@fortawesome/free-solid-svg-icons/faPaperPlane';\r\nimport { faPaste } from '@fortawesome/free-solid-svg-icons/faPaste';\r\nimport { faPlus } from '@fortawesome/free-solid-svg-icons/faPlus';\r\nimport { faQuestionCircle } from '@fortawesome/free-solid-svg-icons/faQuestionCircle';\r\nimport { faQuoteRight } from '@fortawesome/free-solid-svg-icons/faQuoteRight';\r\nimport { faRedo } from '@fortawesome/free-solid-svg-icons/faRedo';\r\nimport { faRobot } from '@fortawesome/free-solid-svg-icons/faRobot';\r\nimport { faSave } from '@fortawesome/free-solid-svg-icons/faSave';\r\nimport { faSearch } from '@fortawesome/free-solid-svg-icons/faSearch';\r\nimport { faServer } from '@fortawesome/free-solid-svg-icons/faServer';\r\nimport { faShareAlt } from '@fortawesome/free-solid-svg-icons/faShareAlt';\r\nimport { faShield } from '@fortawesome/free-solid-svg-icons/faShield';\r\nimport { faShieldAlt } from '@fortawesome/free-solid-svg-icons/faShieldAlt';\r\nimport { faSignOutAlt } from '@fortawesome/free-solid-svg-icons/faSignOutAlt';\r\nimport { faSortAlphaUp } from '@fortawesome/free-solid-svg-icons/faSortAlphaUp';\r\nimport { faSortAmountDown } from '@fortawesome/free-solid-svg-icons/faSortAmountDown';\r\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons/faSpinner';\r\nimport { faSquare } from '@fortawesome/free-solid-svg-icons/faSquare';\r\nimport { faSun } from '@fortawesome/free-solid-svg-icons/faSun';\r\nimport { faSync } from '@fortawesome/free-solid-svg-icons/faSync';\r\nimport { faSyncAlt } from '@fortawesome/free-solid-svg-icons/faSyncAlt';\r\nimport { faTachometerAlt } from '@fortawesome/free-solid-svg-icons/faTachometerAlt';\r\nimport { faTag } from '@fortawesome/free-solid-svg-icons/faTag';\r\nimport { faTags } from '@fortawesome/free-solid-svg-icons/faTags';\r\nimport { faThLarge } from '@fortawesome/free-solid-svg-icons/faThLarge';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons/faTimes';\r\nimport { faTools } from '@fortawesome/free-solid-svg-icons/faTools';\r\nimport { faTrashAlt } from '@fortawesome/free-solid-svg-icons/faTrashAlt';\r\nimport { faUpload } from '@fortawesome/free-solid-svg-icons/faUpload';\r\nimport { faUserCog } from '@fortawesome/free-solid-svg-icons/faUserCog';\r\n\r\nexport default [\r\n faAngleDoubleLeft,\r\n faAngleDoubleRight,\r\n faArrowDown,\r\n faArrowLeft,\r\n faArrowUp,\r\n faAws,\r\n faBan,\r\n faBars,\r\n faBook,\r\n faBullhorn,\r\n faCalendar,\r\n faChartBar,\r\n faChartLine,\r\n faCheck,\r\n faCheckSquare,\r\n faChevronDown,\r\n faChevronLeft,\r\n faChevronRight,\r\n faCircleHalfStroke,\r\n faClock,\r\n faCloud,\r\n faCloudflare,\r\n faCloudUpload,\r\n faCloudUploadAlt,\r\n faCode,\r\n faCodeBranch,\r\n faCog,\r\n faCogs,\r\n faComments,\r\n faCompressAlt,\r\n faCopy,\r\n faDatabase,\r\n faDiscord,\r\n faDownload,\r\n faEdit,\r\n faEllipsisH,\r\n faEllipsisV,\r\n faExclamation,\r\n faExclamationCircle,\r\n faExclamationTriangle,\r\n faExternalLinkAlt,\r\n faEye,\r\n faFile,\r\n faFileAlt,\r\n faFileExport,\r\n faFileSignature,\r\n faFilter,\r\n faFolder,\r\n faFolderOpen,\r\n faFolderTree,\r\n faGlobe,\r\n faHashtag,\r\n faHistory,\r\n faHome,\r\n faICursor,\r\n faImage,\r\n faImages,\r\n faInbox,\r\n faInfoCircle,\r\n faLink,\r\n faList,\r\n faMinus,\r\n faMinusSquare,\r\n faMoon,\r\n faMusic,\r\n faPager,\r\n faPaperPlane,\r\n faPaste,\r\n faPlus,\r\n faQuestionCircle,\r\n faQuoteRight,\r\n faRedo,\r\n faRobot,\r\n faSave,\r\n faSearch,\r\n faServer,\r\n faShareAlt,\r\n faShield,\r\n faShieldAlt,\r\n faSignOutAlt,\r\n faSortAlphaUp,\r\n faSortAmountDown,\r\n faSpinner,\r\n faSquare,\r\n faSun,\r\n faSync,\r\n faSyncAlt,\r\n faTachometerAlt,\r\n faTag,\r\n faTags,\r\n faThLarge,\r\n faTimes,\r\n faTools,\r\n faTrashAlt,\r\n faUpload,\r\n faUserCog\r\n];\r\n","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\";\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_router_view = _resolveComponent(\"router-view\");\n const _component_el_config_provider = _resolveComponent(\"el-config-provider\");\n return _openBlock(), _createBlock(_component_el_config_provider, {\n locale: $options.elementLocale\n }, {\n default: _withCtx(() => [_createVNode(_component_router_view)]),\n _: 1\n }, 8, [\"locale\"]);\n}","import { mapGetters } from 'vuex';\nimport { OverlayScrollbars } from 'overlayscrollbars';\nimport zhCnLocale from 'element-plus/es/locale/lang/zh-cn';\nimport enLocale from 'element-plus/es/locale/lang/en';\nexport default {\n data() {\n return {\n osInstance: null,\n imageViewerObserver: null\n };\n },\n computed: {\n ...mapGetters(['userConfig', 'useDarkMode']),\n elementLocale() {\n return this.$i18n.locale === 'zh-CN' ? zhCnLocale : enLocale;\n }\n },\n mounted() {\n // 初始化 OverlayScrollbars 悬浮滚动条\n this.$nextTick(() => {\n this.initOverlayScrollbars();\n this.setupImageViewerObserver();\n });\n },\n beforeUnmount() {\n // 清理 MutationObserver\n if (this.imageViewerObserver) {\n this.imageViewerObserver.disconnect();\n }\n },\n watch: {},\n methods: {\n initOverlayScrollbars() {\n try {\n // 检查是否已经初始化\n if (OverlayScrollbars.valid(document.body)) {\n this.osInstance = OverlayScrollbars(document.body);\n return;\n }\n\n // 应用到 body 实现全局悬浮滚动条\n this.osInstance = OverlayScrollbars(document.body, {\n scrollbars: {\n theme: 'os-theme-dark',\n visibility: 'auto',\n autoHide: 'scroll',\n autoHideDelay: 600,\n dragScroll: true,\n clickScroll: true\n },\n overflow: {\n x: 'hidden',\n y: 'scroll'\n }\n });\n console.log('OverlayScrollbars initialized successfully');\n } catch (error) {\n console.error('Failed to initialize OverlayScrollbars:', error);\n }\n },\n setupImageViewerObserver() {\n // 监听图片预览器的打开/关闭,动态控制 OverlayScrollbars\n this.imageViewerObserver = new MutationObserver(mutations => {\n const imageViewer = document.querySelector('.el-image-viewer__wrapper');\n if (imageViewer) {\n // 图片预览器打开,禁用滚动\n if (this.osInstance) {\n this.osInstance.options({\n overflow: {\n x: 'hidden',\n y: 'hidden'\n }\n });\n }\n } else {\n // 图片预览器关闭,恢复滚动\n if (this.osInstance) {\n this.osInstance.options({\n overflow: {\n x: 'hidden',\n y: 'scroll'\n }\n });\n }\n }\n });\n this.imageViewerObserver.observe(document.body, {\n childList: true,\n subtree: true\n });\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./App.vue?vue&type=template&id=6633a13d\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createApp } from 'vue'\r\nimport { createHead } from '@vueuse/head'; // 导入 createHead\r\nimport ElementPlus from 'element-plus'\r\nimport 'element-plus/es/components/message/style/css'\r\nimport 'element-plus/es/components/message-box/style/css'\r\n\r\nimport { library } from '@fortawesome/fontawesome-svg-core';\r\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';\r\nimport fontAwesomeIcons from './utils/fontawesomeIcons';\r\n\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\r\nimport i18n from './locales'\r\n\r\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\r\nimport 'element-plus/theme-chalk/dark/css-vars.css'\r\nimport './styles/global.css'\r\n\r\n// OverlayScrollbars 悬浮滚动条\r\nimport 'overlayscrollbars/overlayscrollbars.css'\r\n\r\n\r\nlibrary.add(...fontAwesomeIcons);\r\n\r\nconst app = createApp(App);\r\nconst head = createHead(); // 创建 head 对象\r\n\r\napp.component('font-awesome-icon', FontAwesomeIcon);\r\nfor (const [key, component] of Object.entries(ElementPlusIconsVue)) {\r\n app.component(key, component)\r\n}\r\n\r\n// 根据 useDarkMode 的值添加或移除 dark 类\r\nconst initDarkModeClass = () => {\r\n const htmlElement = document.documentElement;\r\n let isDarkMode;\r\n\r\n // 判断用户是否是自定义模式\r\n if (store.state.cusDarkMode && store.state.useDarkMode !== null) {\r\n // 用户手动设置了暗色模式\r\n isDarkMode = store.state.useDarkMode;\r\n } else {\r\n // 跟随系统模式或时间\r\n isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n if (!isDarkMode) {\r\n const now = new Date();\r\n const hour = now.getHours();\r\n isDarkMode = hour >= 22 || hour < 6;\r\n }\r\n // 更新 useDarkMode 的值\r\n store.commit('setUseDarkMode', isDarkMode);\r\n }\r\n\r\n if (isDarkMode) {\r\n htmlElement.classList.add('dark');\r\n } else {\r\n htmlElement.classList.remove('dark');\r\n }\r\n};\r\n\r\nconst applyDarkModeClass = (isDarkMode) => {\r\n const htmlElement = document.documentElement;\r\n if (isDarkMode) {\r\n htmlElement.classList.add('dark');\r\n } else {\r\n htmlElement.classList.remove('dark');\r\n }\r\n};\r\n\r\n// 预设网站标题的函数\r\nconst presetSiteTitle = (userConfig) => {\r\n document.title = userConfig?.siteTitle || 'Sanyue ImgHub';\r\n};\r\n\r\n// 预设和更新网站图标的函数\r\nconst presetSiteIcon = (isDarkMode, userConfig) => {\r\n // 同时更改 icon apple-touch-icon 和 mask-icon\r\n const existingIcons = document.querySelectorAll('link[rel=\"icon\"], link[rel=\"apple-touch-icon\"], link[rel=\"mask-icon\"]');\r\n existingIcons.forEach(icon => icon.remove());\r\n\r\n const iconLink = document.createElement('link');\r\n const appleIconLink = document.createElement('link');\r\n const maskIconLink = document.createElement('link');\r\n iconLink.rel = 'icon';\r\n appleIconLink.rel = 'apple-touch-icon';\r\n maskIconLink.rel = 'mask-icon';\r\n\r\n if (isDarkMode) {\r\n iconLink.href = userConfig?.siteIcon || '/static/media/logo-dark.png';\r\n appleIconLink.href = userConfig?.siteIcon || '/static/media/logo-dark.png';\r\n maskIconLink.href = userConfig?.siteIcon || '/static/media/logo-dark.png';\r\n } else {\r\n iconLink.href = userConfig?.siteIcon || '/static/media/logo.png';\r\n appleIconLink.href = userConfig?.siteIcon || '/static/media/logo.png';\r\n maskIconLink.href = userConfig?.siteIcon || '/static/media/logo.png';\r\n }\r\n\r\n document.head.appendChild(iconLink);\r\n document.head.appendChild(appleIconLink);\r\n document.head.appendChild(maskIconLink);\r\n};\r\n\r\nstore.dispatch('fetchUserConfig').then(() => {\r\n // 初始化时应用 dark 模式\r\n initDarkModeClass();\r\n\r\n // 预设网站标题和图标\r\n presetSiteTitle(store.getters.userConfig);\r\n presetSiteIcon(store.state.useDarkMode, store.getters.userConfig);\r\n\r\n // 监听 useDarkMode 和 cusDarkMode 的变化\r\n store.subscribe((mutation, state) => {\r\n if (mutation.type === 'setUseDarkMode' && store.state.cusDarkMode) {\r\n applyDarkModeClass(state.useDarkMode);\r\n // 同时更新网站图标\r\n presetSiteIcon(state.useDarkMode, store.getters.userConfig);\r\n }\r\n\r\n // 监听 cusDarkMode 变化,当设置为 false 时重新初始化\r\n if (mutation.type === 'setCusDarkMode' && !mutation.payload) {\r\n // 切换到跟随系统模式,重新初始化\r\n initDarkModeClass();\r\n // 同时更新网站图标\r\n presetSiteIcon(store.state.useDarkMode, store.getters.userConfig);\r\n }\r\n });\r\n\r\n app.use(store).use(router).use(ElementPlus).use(i18n).mount('#app');\r\n}).catch(error => {\r\n console.error('Failed to load user configuration:', error);\r\n app.use(store).use(router).use(ElementPlus).use(i18n).use(head).mount('#app');\r\n})\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"5\":\"046872c7\",\"22\":\"b436b08e\",\"24\":\"e38d6915\",\"63\":\"503c70e6\",\"380\":\"62235203\",\"549\":\"ffe205fb\",\"645\":\"a0ee257d\",\"711\":\"936a7109\",\"743\":\"f28adaf7\",\"773\":\"f0780366\",\"787\":\"d0dbc2dd\",\"803\":\"4f2ba956\",\"903\":\"1e4b549d\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"5\":\"3a85dbb0\",\"24\":\"03ecf779\",\"30\":\"c12a4e5b\",\"63\":\"398231b7\",\"173\":\"f8fd1fa2\",\"322\":\"2b40f004\",\"549\":\"0f00dee2\",\"645\":\"a0ee33b3\",\"711\":\"e6dbd5da\",\"743\":\"4cb567b6\",\"773\":\"b55efe26\",\"787\":\"f6f7607a\",\"803\":\"398231b7\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"sanyue_imghub:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function(chunkId, fullhref, oldTag, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"5\":1,\"24\":1,\"30\":1,\"63\":1,\"173\":1,\"322\":1,\"549\":1,\"645\":1,\"711\":1,\"743\":1,\"773\":1,\"787\":1,\"803\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^(173|30|322)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunksanyue_imghub\"] = self[\"webpackChunksanyue_imghub\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(81525); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["instance","axios","create","baseURL","withCredentials","adminAuthGuard","to","from","next","get","then","res","data","adminRequired","store","commit","valid","authType","wasLoggedIn","state","adminLoggedIn","name","ElMessage","error","i18n","global","t","catch","userAuthGuard","userRequired","userLoggedIn","routes","path","component","beforeEnter","router","createRouter","history","createWebHistory","process","createStore","userConfig","bingWallPapers","uploadMethod","uploadCopyUrlForm","compressConfig","customerCompress","undefined","compressQuality","compressBar","serverCompress","convertToWebp","storeUploadChannel","storeChannelName","storeAutoRetry","storeUploadNameType","uploadFolder","customUrlSettings","useCustomUrl","customUrlPrefix","adminUrlSettings","autoReUpload","useDarkMode","cusDarkMode","getters","storeUploadMethod","storeUploadFolder","localStorage","getItem","storeAutoReUpload","mutations","setUserConfig","setBingWallPapers","setAdminLoggedIn","loggedIn","setUserLoggedIn","setUploadMethod","setUploadCopyUrlForm","setCompressConfig","key","value","setStoreUploadChannel","uploadChannel","setStoreChannelName","channelName","setStoreUploadNameType","setCustomUrlSettings","setStoreAutoRetry","setAdminUrlSettings","setUseDarkMode","setCusDarkMode","setStoreUploadFolder","folder","setItem","setStoreAutoReUpload","actions","fetchUserConfig","response","console","log","fetchBingWallPapers","wallpapers","map","wallpaper","url","Promise","all","resolve","reject","img","Image","onload","onerror","src","modules","plugins","createPersistedState","paths","LOCALE_KEY","getStoredLocale","stored","createI18n","legacy","locale","fallbackLocale","messages","zhCN","en","setLocale","document","documentElement","lang","faAngleDoubleLeft","faAngleDoubleRight","faArrowDown","faArrowLeft","faArrowUp","faAws","faBan","faBars","faBook","faBullhorn","faCalendar","faChartBar","faChartLine","faCheck","faCheckSquare","faChevronDown","faChevronLeft","faChevronRight","faCircleHalfStroke","faClock","faCloud","faCloudflare","faCloudUpload","faCloudUploadAlt","faCode","faCodeBranch","faCog","faCogs","faComments","faCompressAlt","faCopy","faDatabase","faDiscord","faDownload","faEdit","faEllipsisH","faEllipsisV","faExclamation","faExclamationCircle","faExclamationTriangle","faExternalLinkAlt","faEye","faFile","faFileAlt","faFileExport","faFileSignature","faFilter","faFolder","faFolderOpen","faFolderTree","faGlobe","faHashtag","faHistory","faHome","faICursor","faImage","faImages","faInbox","faInfoCircle","faLink","faList","faMinus","faMinusSquare","faMoon","faMusic","faPager","faPaperPlane","faPaste","faPlus","faQuestionCircle","faQuoteRight","faRedo","faRobot","faSave","faSearch","faServer","faShareAlt","faShield","faShieldAlt","faSignOutAlt","faSortAlphaUp","faSortAmountDown","faSpinner","faSquare","faSun","faSync","faSyncAlt","faTachometerAlt","faTag","faTags","faThLarge","faTimes","faTools","faTrashAlt","faUpload","faUserCog","render","_ctx","_cache","$props","$setup","$data","$options","_component_router_view","_component_el_config_provider","elementLocale","default","_","osInstance","imageViewerObserver","computed","this","$i18n","mounted","$nextTick","initOverlayScrollbars","setupImageViewerObserver","beforeUnmount","disconnect","watch","methods","body","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","overflow","x","y","MutationObserver","imageViewer","querySelector","options","observe","childList","subtree","__exports__","library","add","fontAwesomeIcons","app","createApp","App","head","createHead","FontAwesomeIcon","Object","entries","ElementPlusIconsVue","initDarkModeClass","htmlElement","isDarkMode","window","matchMedia","matches","now","Date","hour","getHours","classList","remove","applyDarkModeClass","presetSiteTitle","title","siteTitle","presetSiteIcon","existingIcons","querySelectorAll","forEach","icon","iconLink","createElement","appleIconLink","maskIconLink","rel","href","siteIcon","appendChild","dispatch","subscribe","mutation","type","payload","use","ElementPlus","mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","f","e","chunkId","reduce","promises","u","miniCssF","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","done","push","script","needAttach","scripts","getElementsByTagName","s","getAttribute","charset","nc","setAttribute","onScriptComplete","prev","event","clearTimeout","timeout","doneFns","parentNode","removeChild","setTimeout","bind","target","Symbol","toStringTag","p","createStylesheet","fullhref","oldTag","linkTag","nonce","onLinkComplete","errorType","realHref","err","Error","code","request","insertBefore","nextSibling","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","test","promise","loadingEnded","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","id","chunkLoadingGlobal","self","__webpack_exports__"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/frontend-dist/js/app.33af96b9.js.map.gz b/frontend-dist/js/app.33af96b9.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..5b94df8a8c431441da66deecef4743183bc1acc1 GIT binary patch literal 18375 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.A.get("/api/auth/sessionCheck",{withCredentials:!0}).then(a=>{const o=a.data||{};if(!o.adminRequired)return l.A.commit("setAdminLoggedIn",!0),t();if(o.valid&&"admin"===o.authType)return l.A.commit("setAdminLoggedIn",!0),t();const i=l.A.state.adminLoggedIn;l.A.commit("setAdminLoggedIn",!1),"adminLogin"!==e.name?(i&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"adminLogin"})):t()}).catch(()=>{const a=l.A.state.adminLoggedIn;l.A.commit("setAdminLoggedIn",!1),"adminLogin"!==e.name?(a&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"adminLogin"})):t()})},d=(e,a,t)=>{i.A.get("/api/auth/sessionCheck",{withCredentials:!0}).then(a=>{const o=a.data||{};if(!o.userRequired)return l.A.commit("setUserLoggedIn",!0),t();if(o.valid)return l.A.commit("setUserLoggedIn",!0),t();const i=l.A.state.userLoggedIn;l.A.commit("setUserLoggedIn",!1),"login"!==e.name?(i&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"login"})):t()}).catch(()=>{const a=l.A.state.userLoggedIn;l.A.commit("setUserLoggedIn",!1),"login"!==e.name?(a&&n.nk.error(r.Ay.global.t("login.authRequired")),t({name:"login"})):t()})},c=[{path:"/",name:"home",component:()=>Promise.all([t.e(903),t.e(173),t.e(30),t.e(36)]).then(t.bind(t,1036)),beforeEnter:d},{path:"/login",name:"login",component:()=>Promise.all([t.e(903),t.e(380),t.e(63)]).then(t.bind(t,61880))},{path:"/dashboard",name:"dashboard",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(30),t.e(549)]).then(t.bind(t,11017)),beforeEnter:s},{path:"/customerConfig",name:"customerConfig",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(322),t.e(5)]).then(t.bind(t,27005)),beforeEnter:s},{path:"/systemConfig",name:"systemConfig",component:()=>Promise.all([t.e(903),t.e(173),t.e(22),t.e(322),t.e(645)]).then(t.bind(t,37645)),beforeEnter:s},{path:"/adminLogin",name:"adminLogin",component:()=>Promise.all([t.e(903),t.e(380),t.e(803)]).then(t.bind(t,16556))},{path:"/blockimg",name:"blockimg",component:()=>Promise.all([t.e(903),t.e(711)]).then(t.bind(t,5215))},{path:"/whiteliston",name:"whiteliston",component:()=>Promise.all([t.e(903),t.e(773)]).then(t.bind(t,86569))},{path:"/browse/:dir*",name:"publicBrowse",component:()=>t.e(743).then(t.bind(t,92743))},{path:"/:pathMatch(.*)*",name:"notFound",component:()=>Promise.all([t.e(903),t.e(787)]).then(t.bind(t,75875))}],u=(0,o.aE)({history:(0,o.LA)("/"),routes:c});a.A=u},25507:function(e,a,t){t(18111),t(61701);var o=t(60782),n=t(457),l=t(55131);a.A=(0,o.y$)({state:{userConfig:null,bingWallPapers:[],adminLoggedIn:!1,userLoggedIn:!1,uploadMethod:"default",uploadCopyUrlForm:"",compressConfig:{customerCompress:void 0,compressQuality:void 0,compressBar:void 0,serverCompress:void 0,convertToWebp:void 0},storeUploadChannel:"",storeChannelName:null,storeAutoRetry:!0,storeUploadNameType:"",uploadFolder:"",customUrlSettings:{useCustomUrl:"false",customUrlPrefix:""},adminUrlSettings:{useCustomUrl:"false",customUrlPrefix:""},autoReUpload:!0,useDarkMode:null,cusDarkMode:!1},getters:{userConfig:e=>e.userConfig,bingWallPapers:e=>e.bingWallPapers,adminLoggedIn:e=>e.adminLoggedIn,userLoggedIn:e=>e.userLoggedIn,storeUploadMethod:e=>e.uploadMethod,uploadCopyUrlForm:e=>e.uploadCopyUrlForm,compressConfig:e=>e.compressConfig,storeUploadChannel:e=>e.storeUploadChannel,storeChannelName:e=>e.storeChannelName,storeUploadNameType:e=>e.storeUploadNameType,customUrlSettings:e=>e.customUrlSettings,storeAutoRetry:e=>e.storeAutoRetry,adminUrlSettings:e=>e.adminUrlSettings,storeUploadFolder:e=>e.uploadFolder||localStorage.getItem("uploadFolder")||"",useDarkMode:e=>e.useDarkMode,cusDarkMode:e=>e.cusDarkMode,storeAutoReUpload:e=>e.autoReUpload},mutations:{setUserConfig(e,a){e.userConfig=a},setBingWallPapers(e,a){e.bingWallPapers=a},setAdminLoggedIn(e,a){e.adminLoggedIn=a},setUserLoggedIn(e,a){e.userLoggedIn=a},setUploadMethod(e,a){e.uploadMethod=a},setUploadCopyUrlForm(e,a){e.uploadCopyUrlForm=a},setCompressConfig(e,{key:a,value:t}){e.compressConfig[a]=t},setStoreUploadChannel(e,a){e.storeUploadChannel=a},setStoreChannelName(e,a){e.storeChannelName=a},setStoreUploadNameType(e,a){e.storeUploadNameType=a},setCustomUrlSettings(e,{key:a,value:t}){e.customUrlSettings[a]=t},setStoreAutoRetry(e,a){e.storeAutoRetry=a},setAdminUrlSettings(e,{key:a,value:t}){e.adminUrlSettings[a]=t},setUseDarkMode(e,a){e.useDarkMode=a},setCusDarkMode(e,a){e.cusDarkMode=a},setStoreUploadFolder(e,a){e.uploadFolder=a,localStorage.setItem("uploadFolder",a)},setStoreAutoReUpload(e,a){e.autoReUpload=a}},actions:{async fetchUserConfig({commit:e}){try{const a=await n.A.get("/api/userConfig");e("setUserConfig",a.data)}catch(a){console.log(a)}},async fetchBingWallPapers({commit:e}){try{const a=await n.A.get("/api/bing/wallpaper"),t=a.data.data,o=t.map(e=>({url:"https://www.bing.com"+e.url}));await Promise.all(o.map(e=>new Promise((a,t)=>{const o=new Image;o.onload=a,o.onerror=t,o.src=e.url}))),e("setBingWallPapers",o)}catch(a){console.log(a)}}},modules:{},plugins:[(0,l.A)({paths:["userConfig","uploadMethod","uploadCopyUrlForm","compressConfig","storeUploadChannel","storeChannelName","storeAutoRetry","storeUploadNameType","uploadFolder","customUrlSettings","adminUrlSettings","autoReUpload","useDarkMode","cusDarkMode"]})]})},46638:function(e,a,t){t.d(a,{Ay:function(){return c},xS:function(){return d}});var o=t(85384),n=JSON.parse('{"login":{"title":"登录到 {owner} 图床","adminTitle":"管理端登录","password":"密码","username":"用户名","passwordPlaceholder":"请输入认证码","usernamePlaceholder":"请输入用户名","adminPasswordPlaceholder":"请输入密码","submit":"登录","success":"登录成功","failed":"登录失败,请检查密码是否正确","adminFailed":"用户名或密码错误","serverError":"服务器错误","systemError":"系统错误","authRequired":"请先认证!","authFailed":"认证失败!"},"upload":{"folderPlaceholder":"上传目录","pasteUpload":"粘贴上传","fileUpload":"文件上传","dragUploadText":"拖拽 点击Ctrl + V 粘贴上传","pasteUrlPlaceholder":"粘贴外链上传,多个外链用换行分隔","pasteUploadBtn":"上 传","pasteSave":"转存","pasteExternal":"外链","history":"上传记录","announcement":"查看公告","noAnnouncement":"暂无公告","announcementTitle":"公告","announcementAck":"我已知晓!","settings":"上传设置","linkFormat":"链接格式","manage":"系统管理","logout":"退出登录","logoutSuccess":"已退出登录","viewDocs":"查看文档","switchUploadMethod":"切换上传方式","copyAll":"整体复制","retryFailed":"失败重试","clearList":"清空列表","clearAll":"清空全部","clearUploaded":"清空已上传"},"uploadForm":{"deleted":"{name}已删除","uploadSuccess":"{name}上传成功","uploadFailed":"{name}上传失败","compressFailedCannotUpload":"{name}压缩失败,无法上传!","fileTooLarge":"{name}文件过大,无法上传!","compressedFileTooLarge":"{name}压缩后文件过大,无法上传!","copySuccess":"复制成功","copyFailed":"复制失败","copyAllSuccess":"整体复制成功","fileNotUploaded":"文件未上传成功,无法复制链接","fileListCleared":"文件列表已清空","fileListEmpty":"文件列表为空","successFilesCleared":"成功上传文件已清空","successFilesEmpty":"成功上传文件为空","noFailedFiles":"无上传失败文件","autoRetryOn":"自动重试已开启","autoRetryOff":"自动重试已关闭","autoRetry":"自动重试","maxRetryReached":"{name} 已达到最大重试次数({max}),停止重试","urlRequestFailed":"粘贴板中的URL地址请求失败","chunkMerging":"分块上传完成,正在合并文件,请耐心等待...","fileSizeTooLarge":"文件过大","chunkInitFailed":"初始化分块上传失败","uploadError":"上传过程中发生错误","imageLoadFailed":"图片加载失败"},"uploadSettings":{"title":"上传设置","uploadChannel":"上传渠道","channelType":"渠道类型","channelName":"渠道名称","channelNameTooltip":"选择具体的渠道名称,不选择则使用负载均衡或默认渠道","autoSelect":"自动选择","uploadDirectory":"上传目录","uploadDirectoryPlaceholder":"请输入上传目录路径","autoSwitch":"自动切换","autoSwitchTooltip":"对于非分块上传文件,上传失败自动切换到其他渠道上传","fileNaming":"文件命名方式","namingDefault":"默认","namingIndex":"仅前缀","namingOrigin":"仅原名","namingShort":"短链接","filePreprocess":"文件预处理","filePreprocessTooltip":"上传前在本地进行格式转换和压缩,仅对图片文件生效","convertToWebp":"转换为WebP","convertToWebpTooltip":"上传前将图片转换为WebP格式,可有效减小文件体积。转换失败时保持原格式上传","fileCompress":"文件压缩","compressThreshold":"压缩阈值","compressThresholdTooltip":"设置图片大小阈值,超过此值将自动压缩,单位MB","expectedSize":"期望大小","expectedSizeTooltip":"设置压缩后图片大小期望值,单位MB","serverCompress":"服务端压缩","serverCompressTooltip":"1. 在 Telegram 端进行压缩,仅对上传渠道为 Telegram 的图片文件生效
2. 若图片大小(本地压缩后大小)大于10MB,本设置自动失效
3. 若上传分辨率过大、透明背景等图片,建议关闭服务端压缩,否则可能出现未知问题","enableCompress":"开启压缩","confirm":"确定"},"uploadHistory":{"title":"历史记录","totalRecords":"共 {count} 条","switchView":"切换视图","clearRecords":"清空记录","loading":"加载中...","pullToLoadMore":"下拉加载更多","noMoreRecords":"没有更多记录了","emptyHistory":"暂无上传记录","linkCopied":"链接已复制","copyFailed":"复制失败","clearConfirmTitle":"提示","clearConfirmMessage":"确定要清空所有上传记录吗?","clearConfirmOk":"确定","clearConfirmCancel":"取消","recordsCleared":"记录已清空","deleteConfirmMessage":"确定要删除这条记录吗?","recordDeleted":"记录已删除"},"settings":{"linkFormatTitle":"链接格式设置","defaultCopyLink":"默认复制链接","rawLink":"原始链接","customLink":"自定义链接","customLinkTooltip":"默认链接为https://your.domain/file/xxx.jpg
如果启用自定义链接格式,只保留xxx.jpg部分,其他部分请自行输入","enableCustom":"启用自定义","customPrefix":"自定义前缀","customPrefixPlaceholder":"请输入自定义链接前缀","confirm":"确定","s3Link":"S3链接"},"dashboard":{"searchPlaceholder":"搜索:#标签 -#排除标签","sortByDateDesc":"按时间倒序","sortByNameAsc":"按名称升序","selectedItems":"项已选","clearSelection":"清除选择","copy":"复制","delete":"删除","download":"下载","move":"移动","tagManagement":"标签管理","addToBlacklist":"加入黑名单","addToWhitelist":"加入白名单","linkFormat":"链接格式","listView":"列表视图","cardView":"卡片视图","logout":"退出登录","rootDirectory":"根目录","totalFiles":"共 {count} 个文件","noMatchingFiles":"未找到匹配的文件或文件夹","currentDirEmpty":"当前目录为空","adjustSearchHint":"尝试调整搜索条件或筛选器","uploadHint":"上传文件后将显示在这里","loadMore":"加载更多","totalPages":"共 {count} 页","jumpTo":"跳至","preview":"预览","fileName":"文件名","tags":"标签","channelType":"渠道类型","channelNameCol":"渠道名称","uploadAddress":"上传地址","fileSize":"大小","uploadTime":"上传时间","actions":"操作","externalTag":"外链","unknownTag":"未知","detail":"详情","copyLink":"复制链接","moveFile":"移动","downloadFile":"下载","loadFailed":"加载失败","copySuccess":"复制成功","copyFailed":"复制失败","deleteConfirm":"此操作将永久删除该文件, 是否继续?","deleteConfirmTitle":"提示","deleteConfirmOk":"确定","deleteConfirmCancel":"取消","deleteSuccess":"删除成功","deleteFailed":"删除失败","blockConfirm":"此操作将把该文件加入黑名单, 是否继续?","blockSuccess":"加入黑名单成功","blockFailed":"加入黑名单失败","whiteConfirm":"此操作将把该文件加入白名单, 是否继续?","whiteSuccess":"加入白名单成功","whiteFailed":"加入白名单失败","deleteFolderConfirm":"此操作将永久删除文件夹, 是否继续?","deleteFileConfirm":"此操作将永久删除该文件, 是否继续?","batchDeleteConfirm":"此操作将永久删除选中的文件及文件夹, 是否继续?","batchDeleteSuccess":"批量删除成功","batchDeleteFailed":"批量删除失败","batchBlockConfirm":"此操作将把选中的文件加入黑名单, 是否继续?","batchBlockSuccess":"批量加入黑名单成功","batchBlockFailed":"批量加入黑名单失败","batchWhiteConfirm":"此操作将把选中的文件加入白名单, 是否继续?","batchWhiteSuccess":"批量加入白名单成功","batchWhiteFailed":"批量加入白名单失败","noLinksAvailable":"没有可复制的链接","batchCopySuccess":"批量复制 {count} 个链接成功","batchCopyFailed":"批量复制链接失败,请重试","batchCopyLinksSuccess":"批量复制链接成功","copyFileLinkSuccess":"复制文件链接成功","fileListMemoryCacheWarning":"文件列表较大,已切换为内存缓存;刷新页面后需要重新加载列表。","indexingWarning":"索引构建中,当前搜索和排序结果可能不准确,请稍后再试。","loadMoreFailed":"加载更多文件失败,请检查网络连接","moveSuccess":"移动成功","moveFailed":"移动失败","moveTargetSameAsCurrent":"目标文件夹不能是当前文件夹","invalidPageNumber":"请输入有效的页码","pageExceedsMax":"页码不能超过 {max}","loadingData":"正在加载数据,请稍候...","loadDataFailed":"加载数据失败,请检查网络连接","fetchFileListFailed":"获取文件列表失败","refreshFailed":"刷新失败,请重试","selectFilesFirst":"请先选择文件","syncDataError":"同步数据时出错,请检查网络连接","fetchingFileList":"正在获取文件列表...","folderEmptyNoLinks":"文件夹为空,没有可复制的链接","copiedFileLinks":"已复制 {count} 个文件链接","copyFolderLinksFailed":"复制文件夹链接失败,请重试"},"dashboardTabs":{"fileManagement":"文件管理","userManagement":"用户管理","systemSettings":"系统设置","fileUpload":"文件上传"},"fileDetail":{"title":"文件详情","download":"下载","tags":"标签","blacklist":"黑名单","whitelist":"白名单","deleteBtn":"删除","edit":"编辑","rename":"重命名","save":"保存","cancel":"取消","originUrl":"原始链接","fileNameLabel":"文件名","fileNamePlaceholder":"请输入文件名","fileType":"文件类型","fileTypePlaceholder":"如 image/jpeg","fileSizeLabel":"文件大小","imageDimensions":"图片尺寸","noDimensions":"无","uploadTimeLabel":"上传时间","channelTypeAndName":"渠道类型/名称","accessStatusAndReview":"访问状态/审查","uploadIP":"上传IP","uploadAddressLabel":"上传地址","fileTags":"文件标签","noTags":"暂无标签","unknown":"未知","accessNormal":"正常","accessNormalWhitelist":"正常(白名单)","accessBlockedBlacklist":"已屏蔽(黑名单)","accessBlockedReview":"已屏蔽(审查不通过)","orientationLandscape":"横","orientationPortrait":"竖","orientationSquare":"方","linkCopied":"链接已复制","metadataSaved":"元数据保存成功","metadataSaveFailed":"保存元数据失败","renameTitle":"重命名 File ID","renameLabel":"新 File ID","renamePlaceholder":"请输入新的 File ID","renameCancel":"取消","renameConfirm":"确认重命名","renameSuccess":"文件重命名成功","renameConflict":"目标文件名已存在","renameFailed":"重命名失败"},"filter":{"accessStatus":"访问状态","normal":"正常","blocked":"已屏蔽","blackWhiteList":"黑白名单","whiteList":"白名单","blackList":"黑名单","notSet":"未设置","reviewResult":"审查结果","teenContent":"12+内容","adultContent":"成人内容","fileType":"文件类型","image":"图片","video":"视频","audio":"音频","other":"其他","channelType":"渠道类型","externalLink":"外链","channelName":"渠道名称","clearFilters":"清除筛选"},"moveFile":{"title":"移动文件","batchTitle":"批量移动文件","targetDirectory":"目标目录","targetPlaceholder":"请输入目标目录路径","hint":"提示:路径以 / 开头表示根目录,如 /photos/2024/","hintMobile":"提示:路径以 / 开头表示根目录","selectDirectory":"选择目录","cancel":"取消","confirm":"确定","retry":"重试","authFailed":"认证失败,请重新登录","serverError":"服务器错误,请稍后重试","loadTreeFailed":"加载目录树失败,请检查网络连接"},"batchTag":{"title":"批量标签管理","addTab":"添加","removeTab":"移除","clearTab":"清空","addDescription":"为选中的 {count} 个文件添加标签","inputPlaceholder":"输入标签名称","pendingTags":"待添加的标签","noPendingTags":"暂无待添加标签","addToAllFiles":"添加到所有文件","removeDescription":"移除选中文件的共有标签","commonTags":"共有标签","noCommonTags":"选中的文件没有共有标签","clearDescription":"清空选中的 {count} 个文件的所有标签","clearWarningTitle":"⚠️警告","clearWarningDesc":"此操作将清空所有选中文件的标签,且不可恢复","confirmClearAll":"确认清空所有标签","tagAlreadyInList":"标签已在列表中","pleaseAddTags":"请先添加要批量添加的标签","addSuccess":"成功为 {count} 个文件添加标签","addFailed":"批量添加标签失败","removeSuccess":"成功从 {count} 个文件中移除标签","removeFailed":"移除标签失败","clearConfirmMessage":"确定要清空选中的 {count} 个文件的所有标签吗?此操作不可恢复。","clearConfirmTitle":"确认清空","clearConfirmOk":"确定","clearConfirmCancel":"取消","clearCancelled":"已取消清空操作","clearSuccess":"成功清空 {count} 个文件的标签","clearFailed":"清空标签失败","loadCommonTagsFailed":"加载共有标签失败"},"tagManagement":{"title":"标签管理","inputPlaceholder":"输入标签名称","currentTags":"当前标签","noTags":"暂无标签","popularTags":"常用标签","loading":"加载中...","noPopularTags":"暂无常用标签","close":"关闭","tagExists":"标签已存在","addSuccess":"标签添加成功","addFailed":"添加标签失败","removeSuccess":"标签删除成功","removeFailed":"删除标签失败","loadFailed":"加载标签失败"},"mobileAction":{"viewDetail":"查看详情","copyLink":"复制链接","downloadFile":"下载文件","moveFile":"移动文件","tagManagement":"标签管理","moveFolder":"移动文件夹","deleteFile":"删除文件","deleteFolder":"删除文件夹"},"mobileDirectory":{"title":"目录导航","rootDirectory":"根目录","goBack":"返回上一级"},"sysConfig":{"logout":"退出登录"},"sysConfigTabs":{"systemStatus":"系统状态","uploadSettings":"上传设置","securitySettings":"安全设置","pageSettings":"网页设置","otherSettings":"其他设置"},"dateRangeCalendar":{"previousMonth":"上个月","nextMonth":"下个月","startDate":"起始日期","endDate":"结束日期","rangeSeparator":"至","monthTitle":"{year}-{month}","weekdaySun":"日","weekdayMon":"一","weekdayTue":"二","weekdayWed":"三","weekdayThu":"四","weekdayFri":"五","weekdaySat":"六"},"sysStatus":{"totalFiles":"文件总数","clickToRefresh":"点击刷新","indexUpdateTime":"索引更新时间","systemVersion":"系统版本","clickToViewChangelog":"点击查看更新日志","channelDistribution":"上传渠道分布","fileStatusDistribution":"文件状态分布","uploadTrend":"上传趋势","uploadTrendGroupBy":"上传趋势分组方式","totalUploads":"上传总数","byChannelType":"渠道类型","byChannelName":"渠道名称","selectDateRange":"选择日期范围","otherChannels":"其他","uploadsUnit":"次","noData":"暂无数据","totalFilesLabel":"文件总数","statusTypes":"状态类型","systemMaintenance":"系统维护","rebuildIndex":"重建索引","rebuilding":"重建中...","rebuildTooltip":"重新扫描所有文件并更新索引数据,适用于数据不一致时的修复","backupData":"备份数据","backingUp":"备份中...","backupTooltip":"备份所有文件元数据和系统设置到JSON文件","restoreData":"恢复数据","restoring":"恢复中...","restoreTooltip":"从备份文件恢复数据,将覆盖现有的文件元数据和系统设置","cancelOperation":"取消操作","retry":"重试","close":"关闭","records":"条记录","aboutToComplete":"即将完成","seconds":"约 {count} 秒","minutes":"约 {count} 分钟","hoursMinutes":"约 {hours} 小时 {minutes} 分钟","phaseFetching":"正在获取数据","phaseSorting":"正在排序","phaseUploading":"正在上传","phaseFinalizing":"正在完成","phaseBuilding":"正在构建备份","phaseDownloading":"正在生成下载","phaseRestoringFiles":"正在恢复文件","phaseRestoringSettings":"正在恢复设置","phaseCompleted":"已完成","phaseRetrying":"正在重试","rebuildSuccess":"索引重建完成!共处理 {count} 个文件","backupSuccess":"备份完成!共备份 {count} 个文件","backupSuccessWithSettings":"备份完成!共备份 {fileCount} 个文件,{settingsCount} 个设置项","operationInProgress":"已有操作正在进行中","selectJsonFile":"请选择JSON格式的备份文件","restoreConfirmMessage":"恢复操作将覆盖现有的文件元数据和系统设置,此操作不可逆。确定要继续吗?","restoreConfirmTitle":"确认恢复","restoreConfirmOk":"确定恢复","restoreConfirmCancel":"取消","invalidBackupFile":"备份文件格式无效,请选择有效的 JSON 文件","restoreSuccess":"恢复完成!已恢复 {files} 个文件和 {settings} 个设置项,正在重建索引...","restoreFailed":"恢复数据失败","fetchIndexFailed":"获取索引信息失败","unknown":"未知","blocked":"已屏蔽","normalStatus":"正常","latestUpload":"最近上传","earliestUpload":"最早上传","daysAgo":"{count}天前","hoursAgo":"{count}小时前","minutesAgo":"{count}分钟前","justNow":"刚刚","cancellingRebuild":"正在取消索引重建..."},"sysUpload":{"title":"上传渠道管理","titleTooltip":"管理所有上传渠道的配置,点击卡片查看详情或编辑","filterPlaceholder":"筛选渠道类型","addChannel":"添加渠道","loadBalance":"负载均衡","unnamedChannel":"未命名渠道","envVariable":"环境变量","noChannels":"暂无 {type} 渠道","detail":"详情","editBtn":"编辑","deleteBtn":"删除","addDialogTitle":"添加新渠道","channelTypeLabel":"渠道类型","channelTypePlaceholder":"请选择渠道类型","channelNameLabel":"渠道名称","channelNamePlaceholder":"请输入渠道名称","channelNameImmutableTip":"添加后将作为文件关联渠道的唯一标识,不支持修改","channelNameEditDisabledTip":"渠道名称用于关联已上传文件,不支持修改","botTokenLabel":"Bot Token","botTokenPlaceholder":"请输入 Bot Token","chatIdLabel":"Chat ID","chatIdPlaceholder":"请输入 Chat ID","proxyDomain":"代理域名","proxyDomainPlaceholder":"可选,例如: your-proxy.example.com","endpointLabel":"Endpoint","endpointPlaceholder":"例如: https://s3.us-east-005.backblazeb2.com","cdnDomain":"CDN 域名","cdnDomainPlaceholder":"可选,请填写完整 CDN 访问地址前缀,例如:https://cdn.example.com","cdnDomainTip":"可选配置。可用于生成和展示文件访问链接,服务端读取文件内容时也会优先尝试通过 CDN 读取。","bucketName":"存储桶名称","bucketNamePlaceholder":"请输入存储桶名称","bucketRegion":"存储桶区域","bucketRegionPlaceholder":"默认填写 auto","accessKeyId":"访问密钥 ID","accessKeyIdPlaceholder":"请输入访问密钥 ID","secretAccessKey":"机密访问密钥","secretAccessKeyPlaceholder":"请输入机密访问密钥","pathStyle":"路径风格","pathStyleTip":"使用 OpenList 等不兼容主机风格服务时需开启","quotaLimit":"容量限制","quotaLimitGB":"容量上限 (GB)","quotaThreshold":"停用阈值 (%)","channelIdLabel":"Channel ID","channelIdPlaceholder":"请输入 Channel ID","nitroMember":"Nitro 会员","nitroTip":"会员单文件限制 25MB,否则为 10MB","discordWarning":"Discord 有接口频率限制,不建议将其用作大规模并发场景","repoName":"仓库名","repoNamePlaceholder":"格式: username/repo-name","accessToken":"Access Token","accessTokenPlaceholder":"请输入 Access Token","privateRepo":"私有仓库","privateRepoTip":"私有仓库限制 100GB","webdavBaseUrl":"WebDAV 基础地址","webdavBaseUrlPlaceholder":"例如: https://dav.example.com/remote.php/dav/files/user/imgbed/","webdavUsername":"用户名","webdavUsernamePlaceholder":"可选用户名","webdavPassword":"密码","webdavPasswordPlaceholder":"可选密码","webdavPublicUrlPlaceholder":"可选,请填写完整公开访问地址前缀,例如:https://cdn.example.com/imgbed","webdavPublicUrlTip":"可选配置。服务端读取文件内容时会优先尝试通过该公开地址读取,失败后回退 WebDAV API。","webdavHeaders":"自定义请求头","webdavHeadersPlaceholder":"可选 JSON 对象,例如: {\'{\\"X-Api-Key\\":\\"value\\"}\'}","webdavHeadersInvalid":"自定义请求头必须是有效的 JSON 对象","webdavCreateDirectory":"自动创建目录","webdavCreateDirectoryTip":"上传文件前自动创建父级目录","cancel":"取消","confirmAdd":"确认添加","detailDialogTitle":"渠道详情 - {name}","channelNameDetail":"渠道名称","channelTypeDetail":"渠道类型","statusLabel":"状态","enabled":"已启用","disabled":"已禁用","configSource":"配置来源","publicUrl":"公开访问链接","notSet":"未设置","isPathStyle":"是","isNotPathStyle":"否","currentUsage":"当前用量","closeBtn":"关闭","editDialogTitle":"编辑渠道 - {name}","enableChannel":"启用渠道","saveChanges":"保存修改","r2ConfigNote":"请按照 配置 R2 渠道 文档说明添加 R2 渠道","reservedName":"该名称为系统保留名称,请使用其他名称","duplicateName":"该类型下已存在同名渠道,请使用其他名称","fixedChannelCannotDelete":"环境变量配置的渠道无法删除","deleteChannelConfirm":"确定要删除该渠道吗?删除后,仍关联该渠道的文件可能无法访问。","quotaInitConfirm":"首次启用容量限制需要统计现有文件容量,这可能需要一些时间。是否立即统计?","quotaInitTitle":"初始化容量统计","quotaInitConfirmBtn":"立即统计","quotaInitCancelBtn":"稍后手动统计","quotaInitLater":"您可以稍后点击刷新按钮手动统计","quotaCalculating":"正在统计容量,请稍候...","quotaCalculateSuccess":"容量统计完成","quotaCalculateFailed":"统计失败","quotaCalculateError":"统计失败: "},"sysSecurity":{"authManagement":"认证管理","userAuth":"用户端认证","adminAuth":"管理端认证","uploadPassword":"上传密码","confirmPassword":"确认密码","adminUsername":"用户名","adminPassword":"密码","apiTokenManagement":"API Token 管理","imageReview":"图像审查","imageReviewTooltip":"仅对非分块上传文件生效,支持 nsfwjs 和 moderatecontent.com 渠道","enableReview":"开启审查","reviewChannel":"审查渠道","reviewChannelPlaceholder":"请选择审查渠道","apiKey":"API Key","apiPath":"API 路径","ipQuery":"IP 归属地查询","ipQueryTooltip":"上传时按配置调用自定义 API 查询上传 IP 归属地,参数值支持 {\'{ip}\'} 占位符","enableIpQuery":"开启查询","ipQueryChannel":"查询渠道","ipQueryChannelPlaceholder":"请选择查询渠道","customApi":"自定义 API","queryParams":"查询参数","paramNamePlaceholder":"参数名","paramValuePlaceholder":"参数值,如 {\'{ip}\'}","addQueryParam":"添加参数","responseFields":"响应字段","responseFieldsTip":"最终显示内容会按照字段顺序拼接","responseFieldPathPlaceholder":"JSON 路径,如 country.name","addResponseField":"添加字段","uploadManagement":"上传管理","accessManagement":"访问管理","domainFilter":"域名过滤","allowedDomains":"放行域名","allowedDomainsTooltip":"1.针对访问域名设置权限
2.留空默认全部放行,多个域名请用英文逗号分隔","whiteListMode":"白名单模式","enableWhiteList":"是否开启","enableWhiteListTooltip":"1.针对文件设置权限
2.开启后,仅被加入白名单的文件可被访问","settingsSaved":"设置已保存","tokenName":"名称","tokenValue":"Token","permissions":"权限","createdAt":"创建时间","status":"状态","expiresAt":"过期时间","operation":"操作","editBtn":"编辑","deleteBtn":"删除","permUpload":"上传","permDelete":"删除","permList":"列出","permManage":"管理","createTokenTitle":"创建新 API Token","tokenNameLabel":"Token 名称","tokenNamePlaceholder":"请输入Token名称","permissionsLabel":"权限","neverExpire":"永不过期","validPeriod":"有效期","autoDeleteOnExpire":"过期自动删除","createBtn":"创建","editTokenTitle":"编辑 API Token","updateBtn":"更新","tokenCreatedTitle":"Token 创建成功","tokenCreatedWarning":"请妥善保存以下Token,关闭此窗口后将无法再次查看完整Token!","fullToken":"完整Token","copyBtn":"复制","savedBtn":"我已保存","tokenCopied":"Token已复制到剪贴板","copyFailed":"复制失败,请手动复制","tokenCreateSuccess":"Token创建成功","tokenCreateFailed":"Token创建失败","tokenUpdateSuccess":"Token更新成功","tokenUpdateFailed":"Token更新失败","tokenDeleteConfirm":"此操作将永久删除该Token,是否继续?","tokenDeleteConfirmTitle":"提示","tokenDeleteConfirmOk":"确定","tokenDeleteConfirmCancel":"取消","tokenDeleteSuccess":"Token删除成功","tokenDeleteFailed":"Token删除失败","tokenListFailed":"获取Token列表失败","passwordUrlReserved":"密码不能包含部分URL保留字符: % & ? # /","confirmUploadPassword":"请再次输入上传密码","confirmAdminPassword":"请再次输入管理密码","passwordMismatch":"两次输入密码不一致","passwordUnchanged":"未修改(留空保持原密码)","adminPasswordChangedRelogin":"管理端密码已修改,即将跳转到登录页","clearPassword":"清除认证信息","tokenNameRequired":"请输入Token名称","permissionsRequired":"请选择权限","validPeriodRequired":"有效期数值必须大于 0","timeUnitSeconds":"秒","timeUnitMinutes":"分钟","timeUnitHours":"小时","timeUnitDays":"天","timeUnitMonths":"月","timeUnitYears":"年","sessionSecurityPolicy":"会话安全策略","secureMode":"Secure 模式","secureModeTooltip":"开启后,Cookie 仅通过 HTTPS 连接传输,请确保您的站点已启用 HTTPS","userSessionMaxAge":"用户端会话有效期","adminSessionMaxAge":"管理端会话有效期","sessionMaxAgeUnit":"天","sessionMaxAgeInvalid":"会话有效期必须为 1-3650 的正整数"},"sysPage":{"settingsSaved":"设置已保存","refreshAnnouncement":"刷新公告已读状态","otherSettings":"其他设置","channelSelectPlaceholder":"请先选择上传渠道"},"sysOthers":{"remoteTelemetry":"远端遥测","remoteTelemetryTooltip":"便于问题查找和定位,建议开启","enable":"启用","cloudflareApiToken":"CloudFlare API Token","cloudflareApiTokenTooltip":"设置后可以使后端拉黑、删除等操作不受CDN缓存限制
建议设置,设置方式请查阅文档","zoneId":"区域ID","accountEmail":"账户邮箱","randomImageApi":"随机图像API","randomImageApiTooltip":"API具体用法请查阅文档","directory":"目录","directoryTooltip":"1. 开放随机图权限的目录,默认为根目录,多个目录用逗号分隔
2. 目录均采用绝对路径,例如/img/cover,表示该目录及其所有子目录的文件可被随机图API访问","publicBrowse":"访客图库","publicBrowseTooltip":"启用后,访客可通过 /browse 路径浏览指定目录的图片(只读,无法删除/移动)","openDirectory":"开放目录","openDirectoryTooltip":"

允许公开浏览的目录,多个目录用逗号分隔

示例:wallpaper,photos,album

支持子目录:2026/lucky,2026/rich

访问链接:https://你的域名/browse/2026/lucky

","webdav":"WebDAV","webdavTooltip":"启用后,可以通过WebDAV协议访问和管理图片","webdavUsername":"用户名","webdavPassword":"密码","webdavUploadChannel":"上传渠道","webdavDefaultChannel":"默认渠道","webdavChannelName":"指定渠道名","settingsSaved":"设置已保存"},"customerConfig":{"uploadFileList":"上传文件列表","fileNameCol":"文件名","filePreview":"文件预览","uploadTimeCol":"上传时间","ipAddress":"IP地址","address":"地址","uploadCount":"上传次数","allowUpload":"允许上传","allow":"允许","deny":"禁止","loadMore":"加载更多","loadError":"加载更多数据时出错,请检查网络连接","syncError":"同步数据时出错,请检查网络连接"},"publicBrowse":{"searchPlaceholder":"搜索文件名 或 #页码","fileCount":"{count} 个文件","loading":"加载中...","retry":"重试","creditText":"该图库由林酱贡献代码","loadingMore":"加载中...","allLoaded":"已加载全部","creditLink":"林酱贡献","browseDisabled":"公开浏览功能未启用","directoryNotAllowed":"该目录不允许公开访问","accessDenied":"访问被拒绝","loadFailed":"加载失败,请重试","rootDirectory":"根目录","copyLink":"复制链接","copied":"已复制","downloadBtn":"下载","swipeHint":"← 滑动切换 →","rotate90":"旋转90°"},"transformMedia":{"download":"下载","playbackSpeed":"播放速度","normalSpeed":"正常","playMode":"播放模式","stopAfterPlay":"播完停止","sequentialPlay":"顺序播放","loopSingle":"单曲循环","more":"更多"},"directoryTree":{"selectDirectory":"选择目录","retry":"重试","authFailed":"认证失败,请重新登录","serverError":"服务器错误,请稍后重试","loadFailed":"加载目录树失败,请检查网络连接"},"floatingSave":{"saving":"保存中","save":"保存"},"theme":{"lightMode":"浅色模式","darkMode":"深色模式","autoMode":"自动模式"},"common":{"confirm":"确定","cancel":"取消","close":"关闭","save":"保存","delete":"删除","edit":"编辑","copy":"复制","download":"下载","retry":"重试","loading":"加载中...","success":"成功","failed":"失败","warning":"警告","info":"提示","yes":"是","no":"否","all":"全部类型","select":"请选择"},"validation":{"pathMustStartWithSlash":"目标目录必须以 \\"/\\" 开头","pathTraversalNotAllowed":"目标目录不能包含路径穿越字符 \\"..\\"","singleDotNotAllowed":"目标目录不能包含单独的 \\".\\" 路径段","consecutiveSlashNotAllowed":"目标目录不能包含连续的斜杠","invalidCharacters":"目标目录包含非法字符,请使用合法的路径格式","uploadDirReplace":"上传目录"},"language":{"switchTo":"中/En","switchLanguage":"切换语言"},"whitelist":{"title":"白名单模式已启用","description":"抱歉,当前已开启白名单模式,上传的图片需要审核通过后才能展示,请等待审核通过后再进行访问。","goHome":"返回首页","goBack":"返回上页","helpText":"您可以尝试:","uploadImage":"图片上传","refreshPage":"刷新页面"}}'),l=JSON.parse('{"login":{"title":"Login to {owner} ImgHub","adminTitle":"Admin Login","password":"Password","username":"Username","passwordPlaceholder":"Enter auth code","usernamePlaceholder":"Enter username","adminPasswordPlaceholder":"Enter password","submit":"Login","success":"Login successful","failed":"Login failed, please check your password","adminFailed":"Invalid username or password","serverError":"Server error","systemError":"System error","authRequired":"Please authenticate first!","authFailed":"Authentication failed!"},"upload":{"folderPlaceholder":"Upload directory","pasteUpload":"Paste Upload","fileUpload":"File Upload","dragUploadText":"Drag Click or Ctrl + V to paste upload","pasteUrlPlaceholder":"Paste external links, separate multiple links with line breaks","pasteUploadBtn":"Upload","pasteSave":"Save","pasteExternal":"External","history":"Upload History","announcement":"Announcements","noAnnouncement":"No announcements","announcementTitle":"Announcement","announcementAck":"Got it!","settings":"Upload Settings","linkFormat":"Link Format","manage":"Management","logout":"Logout","logoutSuccess":"Logged out","viewDocs":"Documentation","switchUploadMethod":"Switch Upload Method","copyAll":"Copy All","retryFailed":"Retry Failed","clearList":"Clear List","clearAll":"Clear All","clearUploaded":"Clear Uploaded"},"uploadForm":{"deleted":"{name} deleted","uploadSuccess":"{name} uploaded successfully","uploadFailed":"{name} upload failed","compressFailedCannotUpload":"{name} compression failed, cannot upload!","fileTooLarge":"{name} file too large, cannot upload!","compressedFileTooLarge":"{name} still too large after compression, cannot upload!","copySuccess":"Copied successfully","copyFailed":"Copy failed","copyAllSuccess":"All copied successfully","fileNotUploaded":"File not uploaded, cannot copy link","fileListCleared":"File list cleared","fileListEmpty":"File list is empty","successFilesCleared":"Uploaded files cleared","successFilesEmpty":"No uploaded files","noFailedFiles":"No failed files","autoRetryOn":"Auto retry enabled","autoRetryOff":"Auto retry disabled","autoRetry":"Auto Retry","maxRetryReached":"{name} reached max retry limit ({max}), stopping","urlRequestFailed":"URL request from clipboard failed","chunkMerging":"Chunk upload complete, merging file, please wait...","fileSizeTooLarge":"File too large","chunkInitFailed":"Failed to init chunked upload","uploadError":"Upload error occurred","imageLoadFailed":"Image load failed"},"uploadSettings":{"title":"Upload Settings","uploadChannel":"Upload Channel","channelType":"Channel Type","channelName":"Channel Name","channelNameTooltip":"Select a specific channel name. If not selected, load balancing or default channel will be used","autoSelect":"Auto Select","uploadDirectory":"Upload Directory","uploadDirectoryPlaceholder":"Enter upload directory path","autoSwitch":"Auto Switch","autoSwitchTooltip":"For non-chunked uploads, automatically switch to another channel on failure","fileNaming":"File Naming","namingDefault":"Default","namingIndex":"Prefix Only","namingOrigin":"Original Name","namingShort":"Short Link","filePreprocess":"File Preprocessing","filePreprocessTooltip":"Convert format and compress locally before upload, only applies to image files","convertToWebp":"Convert to WebP","convertToWebpTooltip":"Convert images to WebP format before upload to reduce file size. Falls back to original format on failure","fileCompress":"File Compression","compressThreshold":"Compression Threshold","compressThresholdTooltip":"Set image size threshold, files exceeding this will be auto-compressed (MB)","expectedSize":"Expected Size","expectedSizeTooltip":"Set expected image size after compression (MB)","serverCompress":"Server-side Compression","serverCompressTooltip":"1. Compress on Telegram side, only applies to image files uploaded via Telegram channel
2. If image size (after local compression) exceeds 10MB, this setting is ignored
3. For high-resolution, transparent background images, it\'s recommended to disable server compression to avoid issues","enableCompress":"Enable Compression","confirm":"OK"},"uploadHistory":{"title":"History","totalRecords":"{count} records","switchView":"Switch View","clearRecords":"Clear Records","loading":"Loading...","pullToLoadMore":"Pull to load more","noMoreRecords":"No more records","emptyHistory":"No upload history","linkCopied":"Link copied","copyFailed":"Copy failed","clearConfirmTitle":"Notice","clearConfirmMessage":"Are you sure you want to clear all upload records?","clearConfirmOk":"OK","clearConfirmCancel":"Cancel","recordsCleared":"Records cleared","deleteConfirmMessage":"Are you sure you want to delete this record?","recordDeleted":"Record deleted"},"settings":{"linkFormatTitle":"Link Format Settings","defaultCopyLink":"Default Copy Format","rawLink":"Raw Link","customLink":"Custom Link","customLinkTooltip":"Default link is https://your.domain/file/xxx.jpg
If custom link format is enabled, only the xxx.jpg part is kept, please enter the rest manually","enableCustom":"Enable Custom","customPrefix":"Custom Prefix","customPrefixPlaceholder":"Enter custom link prefix","confirm":"OK","s3Link":"S3 Link"},"dashboard":{"searchPlaceholder":"Search: #tag -#exclude","sortByDateDesc":"Sort by date (newest)","sortByNameAsc":"Sort by name (A-Z)","selectedItems":"selected","clearSelection":"Clear selection","copy":"Copy","delete":"Delete","download":"Download","move":"Move","tagManagement":"Tag Management","addToBlacklist":"Add to Blacklist","addToWhitelist":"Add to Whitelist","linkFormat":"Link Format","listView":"List View","cardView":"Card View","logout":"Logout","rootDirectory":"Root","totalFiles":"{count} files","noMatchingFiles":"No matching files or folders found","currentDirEmpty":"Current directory is empty","adjustSearchHint":"Try adjusting search criteria or filters","uploadHint":"Uploaded files will appear here","loadMore":"Load More","totalPages":"{count} pages","jumpTo":"Go to","preview":"Preview","fileName":"File Name","tags":"Tags","channelType":"Channel Type","channelNameCol":"Channel Name","uploadAddress":"Upload Address","fileSize":"Size","uploadTime":"Upload Time","actions":"Actions","externalTag":"External","unknownTag":"Unknown","detail":"Detail","copyLink":"Copy Link","moveFile":"Move","downloadFile":"Download","loadFailed":"Load failed","copySuccess":"Copied successfully","copyFailed":"Copy failed","deleteConfirm":"This will permanently delete this file. Continue?","deleteConfirmTitle":"Notice","deleteConfirmOk":"OK","deleteConfirmCancel":"Cancel","deleteSuccess":"Deleted successfully","deleteFailed":"Delete failed","blockConfirm":"This will add the file to blacklist. Continue?","blockSuccess":"Added to blacklist successfully","blockFailed":"Failed to add to blacklist","whiteConfirm":"This will add the file to whitelist. Continue?","whiteSuccess":"Added to whitelist successfully","whiteFailed":"Failed to add to whitelist","deleteFolderConfirm":"This will permanently delete this folder. Continue?","deleteFileConfirm":"This will permanently delete this file. Continue?","batchDeleteConfirm":"This will permanently delete selected files and folders. Continue?","batchDeleteSuccess":"Batch delete successful","batchDeleteFailed":"Batch delete failed","batchBlockConfirm":"This will add selected files to blacklist. Continue?","batchBlockSuccess":"Batch blacklist successful","batchBlockFailed":"Batch blacklist failed","batchWhiteConfirm":"This will add selected files to whitelist. Continue?","batchWhiteSuccess":"Batch whitelist successful","batchWhiteFailed":"Batch whitelist failed","noLinksAvailable":"No links to copy","batchCopySuccess":"Copied {count} links successfully","batchCopyFailed":"Batch copy failed, please retry","batchCopyLinksSuccess":"Batch copy successful","copyFileLinkSuccess":"File link copied","fileListMemoryCacheWarning":"The file list is large, so it is being kept in memory. Refreshing the page will require loading it again.","indexingWarning":"The index is still building, so current search and sort results may be inaccurate. Please try again later.","loadMoreFailed":"Failed to load more files, please check network","moveSuccess":"Moved successfully","moveFailed":"Move failed","moveTargetSameAsCurrent":"Target folder cannot be the current folder","invalidPageNumber":"Please enter a valid page number","pageExceedsMax":"Page number cannot exceed {max}","loadingData":"Loading data, please wait...","loadDataFailed":"Failed to load data, please check network","fetchFileListFailed":"Failed to fetch file list","refreshFailed":"Refresh failed, please retry","selectFilesFirst":"Please select files first","syncDataError":"Error syncing data, please check network","fetchingFileList":"Fetching file list...","folderEmptyNoLinks":"Folder is empty, no links to copy","copiedFileLinks":"Copied {count} file links","copyFolderLinksFailed":"Failed to copy folder links, please retry"},"dashboardTabs":{"fileManagement":"File Management","userManagement":"User Management","systemSettings":"System Settings","fileUpload":"File Upload"},"fileDetail":{"title":"File Details","download":"Download","tags":"Tags","blacklist":"Blacklist","whitelist":"Whitelist","deleteBtn":"Delete","edit":"Edit","rename":"Rename","save":"Save","cancel":"Cancel","originUrl":"Original Link","fileNameLabel":"File Name","fileNamePlaceholder":"Enter file name","fileType":"File Type","fileTypePlaceholder":"e.g. image/jpeg","fileSizeLabel":"File Size","imageDimensions":"Dimensions","noDimensions":"N/A","uploadTimeLabel":"Upload Time","channelTypeAndName":"Channel Type/Name","accessStatusAndReview":"Access Status/Review","uploadIP":"Upload IP","uploadAddressLabel":"Upload Address","fileTags":"File Tags","noTags":"No tags","unknown":"Unknown","accessNormal":"Normal","accessNormalWhitelist":"Normal (Whitelisted)","accessBlockedBlacklist":"Blocked (Blacklisted)","accessBlockedReview":"Blocked (Review rejected)","orientationLandscape":"Landscape","orientationPortrait":"Portrait","orientationSquare":"Square","linkCopied":"Link copied","metadataSaved":"Metadata saved successfully","metadataSaveFailed":"Failed to save metadata","renameTitle":"Rename File ID","renameLabel":"New File ID","renamePlaceholder":"Enter new File ID","renameCancel":"Cancel","renameConfirm":"Confirm Rename","renameSuccess":"File renamed successfully","renameConflict":"Target file name already exists","renameFailed":"Rename failed"},"filter":{"accessStatus":"Access Status","normal":"Normal","blocked":"Blocked","blackWhiteList":"Black/White List","whiteList":"Whitelist","blackList":"Blacklist","notSet":"Not Set","reviewResult":"Review Result","teenContent":"12+ Content","adultContent":"Adult Content","fileType":"File Type","image":"Image","video":"Video","audio":"Audio","other":"Other","channelType":"Channel Type","externalLink":"External Link","channelName":"Channel Name","clearFilters":"Clear Filters"},"moveFile":{"title":"Move File","batchTitle":"Batch Move Files","targetDirectory":"Target Directory","targetPlaceholder":"Enter target directory path","hint":"Tip: Paths starting with / indicate root directory, e.g. /photos/2024/","hintMobile":"Tip: Paths starting with / indicate root directory","selectDirectory":"Select Directory","cancel":"Cancel","confirm":"OK","retry":"Retry","authFailed":"Authentication failed, please log in again","serverError":"Server error, please try again later","loadTreeFailed":"Failed to load directory tree, please check network connection"},"batchTag":{"title":"Batch Tag Management","addTab":"Add","removeTab":"Remove","clearTab":"Clear","addDescription":"Add tags to {count} selected files","inputPlaceholder":"Enter tag name","pendingTags":"Tags to add","noPendingTags":"No tags to add","addToAllFiles":"Add to all files","removeDescription":"Remove common tags from selected files","commonTags":"Common Tags","noCommonTags":"Selected files have no common tags","clearDescription":"Clear all tags from {count} selected files","clearWarningTitle":"⚠️Warning","clearWarningDesc":"This will clear all tags from selected files and cannot be undone","confirmClearAll":"Confirm clear all tags","tagAlreadyInList":"Tag already in list","pleaseAddTags":"Please add tags first","addSuccess":"Tags added to {count} files successfully","addFailed":"Batch tag addition failed","removeSuccess":"Tags removed from {count} files successfully","removeFailed":"Tag removal failed","clearConfirmMessage":"Are you sure you want to clear all tags from {count} selected files? This cannot be undone.","clearConfirmTitle":"Confirm Clear","clearConfirmOk":"OK","clearConfirmCancel":"Cancel","clearCancelled":"Clear operation cancelled","clearSuccess":"Tags cleared from {count} files successfully","clearFailed":"Failed to clear tags","loadCommonTagsFailed":"Failed to load common tags"},"tagManagement":{"title":"Tag Management","inputPlaceholder":"Enter tag name","currentTags":"Current Tags","noTags":"No tags","popularTags":"Popular Tags","loading":"Loading...","noPopularTags":"No popular tags","close":"Close","tagExists":"Tag already exists","addSuccess":"Tag added successfully","addFailed":"Failed to add tag","removeSuccess":"Tag removed successfully","removeFailed":"Failed to remove tag","loadFailed":"Failed to load tags"},"mobileAction":{"viewDetail":"View Details","copyLink":"Copy Link","downloadFile":"Download File","moveFile":"Move File","tagManagement":"Tag Management","moveFolder":"Move Folder","deleteFile":"Delete File","deleteFolder":"Delete Folder"},"mobileDirectory":{"title":"Directory Navigation","rootDirectory":"Root","goBack":"Go Back"},"sysConfig":{"logout":"Logout"},"sysConfigTabs":{"systemStatus":"System Status","uploadSettings":"Upload Settings","securitySettings":"Security Settings","pageSettings":"Page Settings","otherSettings":"Other Settings"},"dateRangeCalendar":{"previousMonth":"Previous month","nextMonth":"Next month","startDate":"Start date","endDate":"End date","rangeSeparator":"to","monthTitle":"{year}-{month}","weekdaySun":"Sun","weekdayMon":"Mon","weekdayTue":"Tue","weekdayWed":"Wed","weekdayThu":"Thu","weekdayFri":"Fri","weekdaySat":"Sat"},"sysStatus":{"totalFiles":"Total Files","clickToRefresh":"Click to refresh","indexUpdateTime":"Index Update Time","systemVersion":"System Version","clickToViewChangelog":"Click to view changelog","channelDistribution":"Upload Channel Distribution","fileStatusDistribution":"File Status Distribution","uploadTrend":"Upload Trend","uploadTrendGroupBy":"Upload trend group by","totalUploads":"Total Uploads","byChannelType":"Channel Type","byChannelName":"Channel Name","selectDateRange":"Select date range","otherChannels":"Other","uploadsUnit":"uploads","noData":"No data","totalFilesLabel":"Total Files","statusTypes":"Status Types","systemMaintenance":"System Maintenance","rebuildIndex":"Rebuild Index","rebuilding":"Rebuilding...","rebuildTooltip":"Rescan all files and update index data, useful for fixing data inconsistencies","backupData":"Backup Data","backingUp":"Backing up...","backupTooltip":"Backup all file metadata and system settings to a JSON file","restoreData":"Restore Data","restoring":"Restoring...","restoreTooltip":"Restore data from a backup file, this will overwrite existing file metadata and system settings","cancelOperation":"Cancel Operation","retry":"Retry","close":"Close","records":"records","aboutToComplete":"Almost done","seconds":"~{count} seconds","minutes":"~{count} minutes","hoursMinutes":"~{hours} hours {minutes} minutes","phaseFetching":"Fetching data","phaseSorting":"Sorting","phaseUploading":"Uploading","phaseFinalizing":"Finalizing","phaseBuilding":"Building backup","phaseDownloading":"Generating download","phaseRestoringFiles":"Restoring files","phaseRestoringSettings":"Restoring settings","phaseCompleted":"Completed","phaseRetrying":"Retrying","rebuildSuccess":"Index rebuild complete! Processed {count} files","backupSuccess":"Backup complete! Backed up {count} files","backupSuccessWithSettings":"Backup complete! Backed up {fileCount} files and {settingsCount} settings","operationInProgress":"An operation is already in progress","selectJsonFile":"Please select a JSON backup file","restoreConfirmMessage":"Restoring will overwrite existing file metadata and system settings. This cannot be undone. Continue?","restoreConfirmTitle":"Confirm Restore","restoreConfirmOk":"Confirm Restore","restoreConfirmCancel":"Cancel","invalidBackupFile":"Invalid backup file format, please select a valid JSON file","restoreSuccess":"Restore complete! Restored {files} files and {settings} settings, rebuilding index...","restoreFailed":"Failed to restore data","fetchIndexFailed":"Failed to fetch index information","unknown":"Unknown","blocked":"Blocked","normalStatus":"Normal","latestUpload":"Latest Upload","earliestUpload":"Earliest Upload","daysAgo":"{count} days ago","hoursAgo":"{count} hours ago","minutesAgo":"{count} minutes ago","justNow":"Just now","cancellingRebuild":"Cancelling index rebuild..."},"sysUpload":{"title":"Upload Channel Management","titleTooltip":"Manage all upload channel configurations. Click a card to view details or edit","filterPlaceholder":"Filter channel type","addChannel":"Add Channel","loadBalance":"Load Balance","unnamedChannel":"Unnamed Channel","envVariable":"Environment Variable","noChannels":"No {type} channels","detail":"Detail","editBtn":"Edit","deleteBtn":"Delete","addDialogTitle":"Add New Channel","channelTypeLabel":"Channel Type","channelTypePlaceholder":"Select channel type","channelNameLabel":"Channel Name","channelNamePlaceholder":"Enter channel name","channelNameImmutableTip":"After creation, this becomes the unique identifier for files associated with the channel and cannot be changed","channelNameEditDisabledTip":"The channel name links uploaded files to this channel and cannot be changed","botTokenLabel":"Bot Token","botTokenPlaceholder":"Enter Bot Token","chatIdLabel":"Chat ID","chatIdPlaceholder":"Enter Chat ID","proxyDomain":"Proxy Domain","proxyDomainPlaceholder":"Optional, e.g.: your-proxy.example.com","endpointLabel":"Endpoint","endpointPlaceholder":"e.g.: https://s3.us-east-005.backblazeb2.com","cdnDomain":"CDN Domain","cdnDomainPlaceholder":"Optional. Enter the full CDN URL prefix, e.g. https://cdn.example.com","cdnDomainTip":"Optional. Can be used to generate and display file access links. Server-side file reads also try the CDN first.","bucketName":"Bucket Name","bucketNamePlaceholder":"Enter bucket name","bucketRegion":"Bucket Region","bucketRegionPlaceholder":"Default: auto","accessKeyId":"Access Key ID","accessKeyIdPlaceholder":"Enter Access Key ID","secretAccessKey":"Secret Access Key","secretAccessKeyPlaceholder":"Enter Secret Access Key","pathStyle":"Path Style","pathStyleTip":"Enable when using services incompatible with host-style like OpenList","quotaLimit":"Quota Limit","quotaLimitGB":"Quota Limit (GB)","quotaThreshold":"Disable Threshold (%)","channelIdLabel":"Channel ID","channelIdPlaceholder":"Enter Channel ID","nitroMember":"Nitro Member","nitroTip":"Nitro members: 25MB per file, otherwise 10MB","discordWarning":"Discord has API rate limits, not recommended for high-concurrency scenarios","repoName":"Repository Name","repoNamePlaceholder":"Format: username/repo-name","accessToken":"Access Token","accessTokenPlaceholder":"Enter Access Token","privateRepo":"Private Repository","privateRepoTip":"Private repository limit: 100GB","webdavBaseUrl":"WebDAV Base URL","webdavBaseUrlPlaceholder":"e.g.: https://dav.example.com/remote.php/dav/files/user/imgbed/","webdavUsername":"Username","webdavUsernamePlaceholder":"Optional username","webdavPassword":"Password","webdavPasswordPlaceholder":"Optional password","webdavPublicUrlPlaceholder":"Optional. Enter the full public URL prefix, e.g. https://cdn.example.com/imgbed","webdavPublicUrlTip":"Optional. Server-side file reads try this public URL first and fall back to the WebDAV API on failure.","webdavHeaders":"Custom Headers","webdavHeadersPlaceholder":"Optional JSON object, e.g.: {\'{\\"X-Api-Key\\":\\"value\\"}\'}","webdavHeadersInvalid":"Custom headers must be a valid JSON object","webdavCreateDirectory":"Auto Create Directories","webdavCreateDirectoryTip":"Create parent directories before uploading files","cancel":"Cancel","confirmAdd":"Confirm Add","detailDialogTitle":"Channel Details - {name}","channelNameDetail":"Channel Name","channelTypeDetail":"Channel Type","statusLabel":"Status","enabled":"Enabled","disabled":"Disabled","configSource":"Config Source","publicUrl":"Public Access URL","notSet":"Not Set","isPathStyle":"Yes","isNotPathStyle":"No","currentUsage":"Current Usage","closeBtn":"Close","editDialogTitle":"Edit Channel - {name}","enableChannel":"Enable Channel","saveChanges":"Save Changes","r2ConfigNote":"Please follow the R2 Channel Configuration documentation to add R2 channels","reservedName":"This name is reserved by the system, please use another name","duplicateName":"A channel with this name already exists, please use another name","fixedChannelCannotDelete":"Channels configured via environment variables cannot be deleted","deleteChannelConfirm":"Are you sure you want to delete this channel? Files still associated with it may become inaccessible.","quotaInitConfirm":"First time enabling quota requires calculating existing file sizes, this may take some time. Calculate now?","quotaInitTitle":"Initialize Quota Statistics","quotaInitConfirmBtn":"Calculate Now","quotaInitCancelBtn":"Calculate Later","quotaInitLater":"You can click the refresh button to calculate later","quotaCalculating":"Calculating quota, please wait...","quotaCalculateSuccess":"Quota calculation complete","quotaCalculateFailed":"Calculation failed","quotaCalculateError":"Calculation failed: "},"sysSecurity":{"authManagement":"Authentication Management","userAuth":"User Authentication","adminAuth":"Admin Authentication","uploadPassword":"Upload Password","confirmPassword":"Confirm Password","adminUsername":"Username","adminPassword":"Password","apiTokenManagement":"API Token Management","imageReview":"Image Review","imageReviewTooltip":"Only applies to non-chunked uploads, supports nsfwjs and moderatecontent.com channels","enableReview":"Enable Review","reviewChannel":"Review Channel","reviewChannelPlaceholder":"Select review channel","apiKey":"API Key","apiPath":"API Path","ipQuery":"IP Geolocation Query","ipQueryTooltip":"Calls a custom API during upload to query the upload IP location. Parameter values support the {\'{ip}\'} placeholder","enableIpQuery":"Enable Query","ipQueryChannel":"Query Channel","ipQueryChannelPlaceholder":"Select query channel","customApi":"Custom API","queryParams":"Query Parameters","paramNamePlaceholder":"Parameter name","paramValuePlaceholder":"Parameter value, e.g. {\'{ip}\'}","addQueryParam":"Add Parameter","responseFields":"Response Fields","responseFieldsTip":"The final display text is joined in field order","responseFieldPathPlaceholder":"JSON path, e.g. country.name","addResponseField":"Add Field","uploadManagement":"Upload Management","accessManagement":"Access Management","domainFilter":"Domain Filter","allowedDomains":"Allowed Domains","allowedDomainsTooltip":"1. Set permissions based on access domain
2. Leave empty to allow all, separate multiple domains with commas","whiteListMode":"Whitelist Mode","enableWhiteList":"Enable","enableWhiteListTooltip":"1. Set permissions based on files
2. When enabled, only whitelisted files can be accessed","settingsSaved":"Settings saved","tokenName":"Name","tokenValue":"Token","permissions":"Permissions","createdAt":"Created At","status":"Status","expiresAt":"Expires At","operation":"Actions","editBtn":"Edit","deleteBtn":"Delete","permUpload":"Upload","permDelete":"Delete","permList":"List","permManage":"Manage","createTokenTitle":"Create New API Token","tokenNameLabel":"Token Name","tokenNamePlaceholder":"Enter token name","permissionsLabel":"Permissions","neverExpire":"Never Expire","validPeriod":"Valid Period","autoDeleteOnExpire":"Auto-delete on expiry","createBtn":"Create","editTokenTitle":"Edit API Token","updateBtn":"Update","tokenCreatedTitle":"Token Created Successfully","tokenCreatedWarning":"Please save the following token. You won\'t be able to view the full token after closing this dialog!","fullToken":"Full Token","copyBtn":"Copy","savedBtn":"I\'ve Saved It","tokenCopied":"Token copied to clipboard","copyFailed":"Copy failed, please copy manually","tokenCreateSuccess":"Token created successfully","tokenCreateFailed":"Failed to create token","tokenUpdateSuccess":"Token updated successfully","tokenUpdateFailed":"Failed to update token","tokenDeleteConfirm":"This will permanently delete this token. Continue?","tokenDeleteConfirmTitle":"Notice","tokenDeleteConfirmOk":"OK","tokenDeleteConfirmCancel":"Cancel","tokenDeleteSuccess":"Token deleted successfully","tokenDeleteFailed":"Failed to delete token","tokenListFailed":"Failed to fetch token list","passwordUrlReserved":"Password cannot contain URL reserved characters: % & ? # /","confirmUploadPassword":"Please re-enter upload password","confirmAdminPassword":"Please re-enter admin password","passwordMismatch":"Passwords do not match","passwordUnchanged":"Unchanged (leave empty to keep current password)","adminPasswordChangedRelogin":"Admin password changed, redirecting to login page","clearPassword":"Clear authentication info","tokenNameRequired":"Please enter token name","permissionsRequired":"Please select permissions","validPeriodRequired":"Valid period must be greater than 0","timeUnitSeconds":"seconds","timeUnitMinutes":"minutes","timeUnitHours":"hours","timeUnitDays":"days","timeUnitMonths":"months","timeUnitYears":"years","sessionSecurityPolicy":"Session Security Policy","secureMode":"Secure Mode","secureModeTooltip":"When enabled, cookies are only transmitted over HTTPS. Make sure your site has HTTPS enabled","userSessionMaxAge":"User Session Max Age","adminSessionMaxAge":"Admin Session Max Age","sessionMaxAgeUnit":"days","sessionMaxAgeInvalid":"Session max age must be an integer from 1 to 3650"},"sysPage":{"settingsSaved":"Settings saved","refreshAnnouncement":"Reset announcement read status","otherSettings":"Other Settings","channelSelectPlaceholder":"Please select upload channel first"},"sysOthers":{"remoteTelemetry":"Remote Telemetry","remoteTelemetryTooltip":"Helps with issue tracking and debugging, recommended to enable","enable":"Enable","cloudflareApiToken":"CloudFlare API Token","cloudflareApiTokenTooltip":"When set, backend operations like blocking and deleting won\'t be affected by CDN cache
Recommended, see documentation for setup","zoneId":"Zone ID","accountEmail":"Account Email","randomImageApi":"Random Image API","randomImageApiTooltip":"See documentation for API usage details","directory":"Directory","directoryTooltip":"1. Directories with random image access, defaults to root. Separate multiple directories with commas
2. All directories use absolute paths, e.g. /img/cover, meaning files in this directory and all subdirectories can be accessed by the random image API","publicBrowse":"Public Gallery","publicBrowseTooltip":"When enabled, visitors can browse images in specified directories via /browse path (read-only, no delete/move)","openDirectory":"Open Directory","openDirectoryTooltip":"

Directories open for public browsing, separate multiple with commas

Example: wallpaper,photos,album

Supports subdirectories: 2026/lucky,2026/rich

Access URL: https://your.domain/browse/2026/lucky

","webdav":"WebDAV","webdavTooltip":"When enabled, images can be accessed and managed via WebDAV protocol","webdavUsername":"Username","webdavPassword":"Password","webdavUploadChannel":"Upload Channel","webdavDefaultChannel":"Default Channel","webdavChannelName":"Specified Channel","settingsSaved":"Settings saved"},"customerConfig":{"uploadFileList":"Upload File List","fileNameCol":"File Name","filePreview":"File Preview","uploadTimeCol":"Upload Time","ipAddress":"IP Address","address":"Address","uploadCount":"Upload Count","allowUpload":"Allow Upload","allow":"Allow","deny":"Deny","loadMore":"Load More","loadError":"Error loading more data, please check network connection","syncError":"Error syncing data, please check network connection"},"publicBrowse":{"searchPlaceholder":"Search file name or #page","fileCount":"{count} files","loading":"Loading...","retry":"Retry","creditText":"Gallery code contributed by LinJiang","loadingMore":"Loading...","allLoaded":"All loaded","creditLink":"LinJiang","browseDisabled":"Public browsing is not enabled","directoryNotAllowed":"This directory is not open for public access","accessDenied":"Access denied","loadFailed":"Load failed, please retry","rootDirectory":"Root","copyLink":"Copy Link","copied":"Copied","downloadBtn":"Download","swipeHint":"← Swipe to navigate →","rotate90":"Rotate 90°"},"transformMedia":{"download":"Download","playbackSpeed":"Playback Speed","normalSpeed":"Normal","playMode":"Play Mode","stopAfterPlay":"Stop After Play","sequentialPlay":"Sequential Play","loopSingle":"Loop Single","more":"More"},"directoryTree":{"selectDirectory":"Select Directory","retry":"Retry","authFailed":"Authentication failed, please log in again","serverError":"Server error, please try again later","loadFailed":"Failed to load directory tree, please check network connection"},"floatingSave":{"saving":"Saving","save":"Save"},"theme":{"lightMode":"Light Mode","darkMode":"Dark Mode","autoMode":"Auto Mode"},"common":{"confirm":"OK","cancel":"Cancel","close":"Close","save":"Save","delete":"Delete","edit":"Edit","copy":"Copy","download":"Download","retry":"Retry","loading":"Loading...","success":"Success","failed":"Failed","warning":"Warning","info":"Notice","yes":"Yes","no":"No","all":"All Types","select":"Select"},"validation":{"pathMustStartWithSlash":"Path must start with \\"/\\"","pathTraversalNotAllowed":"Path cannot contain \\"..\\"","singleDotNotAllowed":"Path cannot contain standalone \\".\\"","consecutiveSlashNotAllowed":"Path cannot contain consecutive slashes","invalidCharacters":"Path contains invalid characters, please use a valid path format","uploadDirReplace":"Upload directory"},"language":{"switchTo":"中/En","switchLanguage":"Switch Language"},"whitelist":{"title":"Whitelist Mode Enabled","description":"Sorry, the whitelist mode is currently enabled. Uploaded images need to be approved before they can be displayed. Please wait for approval.","goHome":"Go Home","goBack":"Go Back","helpText":"You can try:","uploadImage":"Upload Image","refreshPage":"Refresh Page"}}');const i="app-locale";function r(){const e=localStorage.getItem(i);return"zh-CN"===e||"en"===e?e:"zh-CN"}const s=(0,o.hU)({legacy:!0,locale:r(),fallbackLocale:"zh-CN",messages:{"zh-CN":n,en:l}});function d(e){s.global.locale=e,localStorage.setItem(i,e),document.documentElement.lang="zh-CN"===e?"zh-CN":"en"}var c=s},81525:function(e,a,t){t(18111),t(7588);var o=t(45130),n=t(73888),l=t(18642),i=(t(15412),t(30372),t(98950)),r=t(30292),s=t(47984),d=t(79262),c=t(70193),u=t(55363),m=t(31050),p=t(22909),h=t(10220),g=t(74036),f=t(90389),y=t(81828),b=t(27483),C=t(66806),k=t(61536),T=t(3263),w=t(57038),v=t(63416),S=t(63027),P=t(19223),F=t(93422),A=t(16249),D=t(34335),L=t(14722),U=t(16829),N=t(53916),M=t(48749),I=t(2511),R=t(12375),x=t(97619),B=t(84310),E=t(14552),O=t(79919),W=t(10767),q=t(20491),V=t(18422),j=t(17214),H=t(44845),z=t(55319),K=t(71669),Q=t(38557),J=t(15925),G=t(10798),_=t(39329),Y=t(59708),X=t(41165),$=t(50230),Z=t(99288),ee=t(67992),ae=t(37538),te=t(13118),oe=t(36050),ne=t(69721),le=t(75192),ie=t(50672),re=t(3149),se=t(11221),de=t(73585),ce=t(63236),ue=t(1860),me=t(13110),pe=t(6246),he=t(42302),ge=t(75504),fe=t(40587),ye=t(5299),be=t(81775),Ce=t(13127),ke=t(18742),Te=t(97579),we=t(56746),ve=t(58422),Se=t(20444),Pe=t(88502),Fe=t(21872),Ae=t(64795),De=t(82262),Le=t(88921),Ue=t(39916),Ne=t(18579),Me=t(80500),Ie=t(58428),Re=t(87849),xe=t(78034),Be=t(59413),Ee=t(58869),Oe=t(79102),We=t(78337),qe=t(38870),Ve=t(70577),je=t(93212),He=t(40275),ze=t(52995),Ke=t(38410),Qe=t(167),Je=t(53223),Ge=t(97447),_e=t(67830),Ye=[u.rC,m.UH,p.B0,h.Ce,g.IN,s.xK,f.Df,y.ck,b.LB,C.e4,k.ok,T.$F,w.gK,v.e6,S.rQ,P.Jt,F.Wz,A.Xk,D.B2,L.a$,U.jB,d.ZD,N.wF,M.rO,I.jT,R.Xb,x.dB,B.Ub,E.q9,O.rM,W.jP,q.he,c._2,V.cb,j.MT,H.vH,z.v,K.bx,Q.tU,J.zp,G.A,_.pS,Y.A4,X.h8,$.o1,Z.UD,ee.mR,ae.ao,te.Uj,oe.gD,ne.Bw,le.CY,ie.In,re.v0,se.lS,de.jb,ce.yv,ue.Up,me.iW,pe.CQ,he.IT,ge.EZ,fe.xb,ye.PJ,be.X,Ce.ji,ke.is,Te.R9,we.QL,ve.wR,Se.oE,Pe.ye,Fe.UB,Ae.hS,De.Mj,Le.D6,Ue.QO,Ne.V2,Me.im,Ie.Gx,Re.H9,xe.Yp,Be.z1,Ee.Nf,Oe.oM,We.VN,qe.Ot,Ve.xi,je._2,He.DX,ze.l9,Ke.GR,Qe.ns,Je.Be,Ge.Jm,_e.Mc],Xe=t(97722),$e=(t(85331),t(10961),t(56768));function Ze(e,a,t,o,n,l){const i=(0,$e.g2)("router-view"),r=Xe.H6;return(0,$e.uX)(),(0,$e.Wv)(r,{locale:l.elementLocale},{default:(0,$e.k6)(()=>[(0,$e.bF)(i)]),_:1},8,["locale"])}var ea=t(60782),aa=t(6166),ta=t(55186),oa=t(54791),na={data(){return{osInstance:null,imageViewerObserver:null}},computed:{...(0,ea.L8)(["userConfig","useDarkMode"]),elementLocale(){return"zh-CN"===this.$i18n.locale?ta.A:oa.A}},mounted(){this.$nextTick(()=>{this.initOverlayScrollbars(),this.setupImageViewerObserver()})},beforeUnmount(){this.imageViewerObserver&&this.imageViewerObserver.disconnect()},watch:{},methods:{initOverlayScrollbars(){try{if(aa.ae.valid(document.body))return void(this.osInstance=(0,aa.ae)(document.body));this.osInstance=(0,aa.ae)(document.body,{scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"scroll",autoHideDelay:600,dragScroll:!0,clickScroll:!0},overflow:{x:"hidden",y:"scroll"}}),console.log("OverlayScrollbars initialized successfully")}catch(e){console.error("Failed to initialize OverlayScrollbars:",e)}},setupImageViewerObserver(){this.imageViewerObserver=new MutationObserver(e=>{const a=document.querySelector(".el-image-viewer__wrapper");a?this.osInstance&&this.osInstance.options({overflow:{x:"hidden",y:"hidden"}}):this.osInstance&&this.osInstance.options({overflow:{x:"hidden",y:"scroll"}})}),this.imageViewerObserver.observe(document.body,{childList:!0,subtree:!0})}}},la=t(71241);const ia=(0,la.A)(na,[["render",Ze]]);var ra=ia,sa=t(16915),da=t(25507),ca=t(46638),ua=t(57477);t(21862),t(50635);i.Yv.add(...Ye);const ma=(0,o.Ef)(ra),pa=(0,n.Zf)();ma.component("font-awesome-icon",r.gc);for(const[ba,Ca]of Object.entries(ua))ma.component(ba,Ca);const ha=()=>{const e=document.documentElement;let a;if(da.A.state.cusDarkMode&&null!==da.A.state.useDarkMode)a=da.A.state.useDarkMode;else{if(a=window.matchMedia("(prefers-color-scheme: dark)").matches,!a){const e=new Date,t=e.getHours();a=t>=22||t<6}da.A.commit("setUseDarkMode",a)}a?e.classList.add("dark"):e.classList.remove("dark")},ga=e=>{const a=document.documentElement;e?a.classList.add("dark"):a.classList.remove("dark")},fa=e=>{document.title=e?.siteTitle||"Sanyue ImgHub"},ya=(e,a)=>{const t=document.querySelectorAll('link[rel="icon"], link[rel="apple-touch-icon"], link[rel="mask-icon"]');t.forEach(e=>e.remove());const o=document.createElement("link"),n=document.createElement("link"),l=document.createElement("link");o.rel="icon",n.rel="apple-touch-icon",l.rel="mask-icon",e?(o.href=a?.siteIcon||"/static/media/logo-dark.png",n.href=a?.siteIcon||"/static/media/logo-dark.png",l.href=a?.siteIcon||"/static/media/logo-dark.png"):(o.href=a?.siteIcon||"/static/media/logo.png",n.href=a?.siteIcon||"/static/media/logo.png",l.href=a?.siteIcon||"/static/media/logo.png"),document.head.appendChild(o),document.head.appendChild(n),document.head.appendChild(l)};da.A.dispatch("fetchUserConfig").then(()=>{ha(),fa(da.A.getters.userConfig),ya(da.A.state.useDarkMode,da.A.getters.userConfig),da.A.subscribe((e,a)=>{"setUseDarkMode"===e.type&&da.A.state.cusDarkMode&&(ga(a.useDarkMode),ya(a.useDarkMode,da.A.getters.userConfig)),"setCusDarkMode"!==e.type||e.payload||(ha(),ya(da.A.state.useDarkMode,da.A.getters.userConfig))}),ma.use(da.A).use(sa.A).use(l.A).use(ca.Ay).mount("#app")}).catch(e=>{console.error("Failed to load user configuration:",e),ma.use(da.A).use(sa.A).use(l.A).use(ca.Ay).use(pa).mount("#app")})}},a={};function t(o){var n=a[o];if(void 0!==n)return n.exports;var l=a[o]={exports:{}};return e[o].call(l.exports,l,l.exports,t),l.exports}t.m=e,function(){var e=[];t.O=function(a,o,n,l){if(!o){var i=1/0;for(c=0;c=l)&&Object.keys(t.O).every(function(e){return t.O[e](o[s])})?o.splice(s--,1):(r=!1,l0&&e[c-1][2]>l;c--)e[c]=e[c-1];e[c]=[o,n,l]}}(),function(){t.n=function(e){var a=e&&e.__esModule?function(){return e["default"]}:function(){return e};return t.d(a,{a:a}),a}}(),function(){t.d=function(e,a){for(var o in a)t.o(a,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:a[o]})}}(),function(){t.f={},t.e=function(e){return Promise.all(Object.keys(t.f).reduce(function(a,o){return t.f[o](e,a),a},[]))}}(),function(){t.u=function(e){return"js/"+e+"."+{5:"046872c7",22:"b436b08e",36:"1f3c2bdf",63:"503c70e6",380:"62235203",549:"ffe205fb",645:"a0ee257d",711:"936a7109",743:"f28adaf7",773:"f0780366",787:"d0dbc2dd",803:"4f2ba956",903:"1e4b549d"}[e]+".js"}}(),function(){t.miniCssF=function(e){return"css/"+e+"."+{5:"3a85dbb0",30:"c12a4e5b",36:"5ae2c698",63:"398231b7",173:"f8fd1fa2",322:"2b40f004",549:"0f00dee2",645:"a0ee33b3",711:"e6dbd5da",743:"4cb567b6",773:"b55efe26",787:"f6f7607a",803:"398231b7"}[e]+".css"}}(),function(){t.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){t.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)}}(),function(){var e={},a="sanyue_imghub:";t.l=function(o,n,l,i){if(e[o])e[o].push(n);else{var r,s;if(void 0!==l)for(var d=document.getElementsByTagName("script"),c=0;ca<*+96S^ZqH{wPgFJ{0r}?s_veii)1Ie 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 Q^w}Q&17Z0kt&lDO0O#k1i2wiq diff --git a/frontend-dist/js/app.57c02bdc.js.map.gz b/frontend-dist/js/app.57c02bdc.js.map.gz deleted file mode 100644 index edb0ea3cb65abf6b97d4416ed196ed03384dab78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18376 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