From 013eb7cfee3f0617bc4eb88e8384bddffd3b8d3c Mon Sep 17 00:00:00 2001 From: MarSeventh <1193267292@qq.com> Date: Fri, 30 Jan 2026 17:15:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=BA=E5=AF=B8=E6=8F=90=E5=8F=96=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/23.e63939dd.css.gz | Bin 12811 -> 0 bytes css/{23.e63939dd.css => 280.6f363073.css} | 2 +- css/280.6f363073.css.gz | Bin 0 -> 12809 bytes functions/api/huggingface/commitUpload.js | 1 + functions/upload/index.js | 16 ++++------------ index.html | 2 +- index.html.gz | Bin 511 -> 511 bytes js/23.180d02c4.js | 2 -- js/23.180d02c4.js.gz | Bin 21745 -> 0 bytes js/23.180d02c4.js.map | 1 - js/23.180d02c4.js.map.gz | Bin 57013 -> 0 bytes js/280.65ead6f8.js | 2 ++ js/280.65ead6f8.js.gz | Bin 0 -> 21772 bytes js/280.65ead6f8.js.map | 1 + js/280.65ead6f8.js.map.gz | Bin 0 -> 57022 bytes js/app.1611e1ad.js.gz | Bin 5078 -> 0 bytes js/app.1611e1ad.js.map.gz | Bin 15723 -> 0 bytes js/{app.1611e1ad.js => app.28705dac.js} | 4 ++-- js/app.28705dac.js.gz | Bin 0 -> 5080 bytes js/{app.1611e1ad.js.map => app.28705dac.js.map} | 2 +- js/app.28705dac.js.map.gz | Bin 0 -> 15716 bytes 21 files changed, 13 insertions(+), 20 deletions(-) delete mode 100644 css/23.e63939dd.css.gz rename css/{23.e63939dd.css => 280.6f363073.css} (85%) create mode 100644 css/280.6f363073.css.gz delete mode 100644 js/23.180d02c4.js delete mode 100644 js/23.180d02c4.js.gz delete mode 100644 js/23.180d02c4.js.map delete mode 100644 js/23.180d02c4.js.map.gz create mode 100644 js/280.65ead6f8.js create mode 100644 js/280.65ead6f8.js.gz create mode 100644 js/280.65ead6f8.js.map create mode 100644 js/280.65ead6f8.js.map.gz delete mode 100644 js/app.1611e1ad.js.gz delete mode 100644 js/app.1611e1ad.js.map.gz rename js/{app.1611e1ad.js => app.28705dac.js} (52%) create mode 100644 js/app.28705dac.js.gz rename js/{app.1611e1ad.js.map => app.28705dac.js.map} (71%) create mode 100644 js/app.28705dac.js.map.gz diff --git a/css/23.e63939dd.css.gz b/css/23.e63939dd.css.gz deleted file mode 100644 index 2da6971a9e91ab5555368e00a35a5f1c91542fc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12811 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 diff --git a/css/23.e63939dd.css b/css/280.6f363073.css similarity index 85% rename from css/23.e63939dd.css rename to css/280.6f363073.css index 57c619f..960a86d 100644 --- a/css/23.e63939dd.css +++ b/css/280.6f363073.css @@ -1 +1 @@ -.history-container[data-v-3ea1d874]{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-3ea1d874]:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;backdrop-filter:blur(20px);background:var(--admin-container-bg-color);z-index:-1;will-change:transform;transform:translateZ(0)}.history-container.active[data-v-3ea1d874]{clip-path:circle(150% at calc(100% - 200px) 50px);opacity:1}.history-header[data-v-3ea1d874]{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-3ea1d874]{display:flex;align-items:baseline;gap:15px}.header-left h2[data-v-3ea1d874]{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-3ea1d874]{color:var(--upload-text-color);font-size:14px;opacity:.8}.header-right[data-v-3ea1d874]{display:flex;gap:10px}.header-right .el-button[data-v-3ea1d874]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border:none;color:var(--theme-toggle-color);transition:all .3s ease}.header-right .el-button[data-v-3ea1d874]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.header-right .el-button.el-button--danger[data-v-3ea1d874]{background:linear-gradient(135deg,#ff6b6b,#ee5a5a);color:#fff}.history-content[data-v-3ea1d874]{flex:1;overflow-y:auto;padding:20px 40px}.grid-view[data-v-3ea1d874]{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:20px}.grid-item[data-v-3ea1d874]{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:none;backdrop-filter:blur(10px)}.grid-item[data-v-3ea1d874]:hover{transform:translateY(-5px);box-shadow:var(--toolbar-button-shadow-hover)}.grid-preview[data-v-3ea1d874]{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-3ea1d874],.grid-preview video[data-v-3ea1d874]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper[data-v-3ea1d874]{font-size:48px;color:var(--theme-toggle-color);opacity:.5}.grid-overlay[data-v-3ea1d874]{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-3ea1d874]{opacity:1}.grid-actions[data-v-3ea1d874]{display:flex;gap:15px}.grid-actions .el-button[data-v-3ea1d874]{backdrop-filter:blur(10px)}.grid-info[data-v-3ea1d874]{padding:12px}.file-name[data-v-3ea1d874]{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-3ea1d874]{font-size:12px;color:var(--upload-text-color);opacity:.6}.list-view[data-v-3ea1d874]{display:flex;flex-direction:column;gap:10px}.list-item[data-v-3ea1d874]{display:flex;align-items:center;padding:12px 15px;background:var(--toolbar-button-bg-color);border-radius:12px;box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border:none;transition:all .3s ease}.list-item[data-v-3ea1d874]:hover{transform:translateX(5px);box-shadow:var(--toolbar-button-shadow-hover)}.list-preview[data-v-3ea1d874]{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-3ea1d874],.list-preview video[data-v-3ea1d874]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper-small[data-v-3ea1d874]{font-size:24px;color:var(--theme-toggle-color);opacity:.5}.list-info[data-v-3ea1d874]{flex:1;min-width:0;margin-right:20px}.file-url[data-v-3ea1d874]{font-size:12px;color:var(--upload-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.6}.list-meta[data-v-3ea1d874]{margin-right:20px;text-align:right;min-width:140px}.list-actions[data-v-3ea1d874]{display:flex;gap:8px}.list-actions .el-button[data-v-3ea1d874]{backdrop-filter:blur(10px)}.empty-state[data-v-3ea1d874]{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-3ea1d874]{font-size:64px;margin-bottom:20px;color:var(--theme-toggle-color)}.history-content[data-v-3ea1d874]::-webkit-scrollbar{width:8px}.history-content[data-v-3ea1d874]::-webkit-scrollbar-track{background:transparent}.history-content[data-v-3ea1d874]::-webkit-scrollbar-thumb{background:var(--el-border-color);border-radius:4px}.history-content[data-v-3ea1d874]::-webkit-scrollbar-thumb:hover{background:var(--el-border-color-darker)}.action-btn-view[data-v-3ea1d874]{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-3ea1d874]:hover{box-shadow:var(--toolbar-button-shadow-hover);color:var(--el-color-primary)}.history-group[data-v-3ea1d874]{position:relative;padding-left:30px;border-left:2px solid var(--el-border-color-lighter);margin-left:10px;padding-bottom:30px}.history-group[data-v-3ea1d874]:last-child{border-left:2px solid transparent}.timeline-header[data-v-3ea1d874]{display:flex;align-items:center;margin-bottom:20px;position:relative}.timeline-dot[data-v-3ea1d874]{position:absolute;left:-38px;width:14px;height:14px;border-radius:50%;background:var(--el-upload-dragger-uniform-color);box-shadow:0 0 10px var(--el-upload-dragger-uniform-color);z-index:2;box-sizing:border-box}.date-label[data-v-3ea1d874]{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-3ea1d874]{display:flex;justify-content:center;padding:20px}.loading-indicator[data-v-3ea1d874]{display:flex;align-items:center;gap:8px;color:var(--el-upload-dragger-uniform-color)}.load-more-hint[data-v-3ea1d874],.no-more-hint[data-v-3ea1d874]{color:var(--upload-text-color);opacity:.5;font-size:14px}.no-more-hint[data-v-3ea1d874]{text-align:center;padding:20px}@media (max-width:768px){.history-header[data-v-3ea1d874]{padding:15px 20px}.header-left h2[data-v-3ea1d874]{font-size:20px}.history-content[data-v-3ea1d874]{padding:15px 20px}.grid-view[data-v-3ea1d874]{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:15px}.grid-preview[data-v-3ea1d874]{height:120px}.list-meta[data-v-3ea1d874]{display:none}.list-info[data-v-3ea1d874]{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}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:0.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-base);background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;margin:var(--el-dialog-margin-top,15vh) auto 50px;overflow-wrap:break-word;padding:var(--el-dialog-padding-primary);position:relative;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;border-radius:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{bottom:0;left:0;margin:0;overflow:auto;position:fixed;right:0;top:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px))}.el-dialog__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:48px;outline:none;padding:0;position:absolute;right:0;top:0;width:48px}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{color:var(--el-text-color-primary);font-size:var(--el-dialog-title-font-size);line-height:var(--el-dialog-font-line-height)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{box-sizing:border-box;padding-top:var(--el-dialog-padding-primary);text-align:right}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-modal-dialog.is-penetrable{pointer-events:none}.el-modal-dialog.is-penetrable .el-dialog{pointer-events:auto}.el-overlay-dialog{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-radio-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-radio-font-weight);height:32px;margin-right:30px;outline:none;position:relative;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{border-color:var(--el-border-color-lighter);cursor:not-allowed}.el-radio.is-bordered.el-radio--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.is-bordered.el-radio--small{border-radius:var(--el-border-radius-base);padding:0 11px 0 7px}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{cursor:pointer;display:inline-flex;outline:none;position:relative;vertical-align:middle;white-space:nowrap}.el-radio__input.is-disabled .el-radio__inner{border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled .el-radio__inner:after{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{background:var(--el-color-primary);border-color:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{background-color:var(--el-color-white);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{background-color:var(--el-radio-input-bg-color);border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);box-sizing:border-box;cursor:pointer;display:inline-block;height:var(--el-radio-input-height);position:relative;width:var(--el-radio-input-width)}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{border-radius:var(--el-radio-input-border-radius);content:"";height:4px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in;width:4px}.el-radio__original{bottom:0;left:0;margin:0;opacity:0;outline:none;position:absolute;right:0;top:0;z-index:-1}.el-radio__original:focus-visible+.el-radio__inner{border-radius:var(--el-radio-input-border-radius);outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio-group{align-items:center;display:inline-flex;flex-wrap:wrap;font-size:0}.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%}}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular);align-self:center;color:var(--el-text-color);font-size:var(--el-text-font-size);margin:0;overflow-wrap:break-word;padding:0}.el-text.is-truncated{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-text.is-line-clamp{display:-webkit-inline-box;-webkit-box-orient:vertical;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.el-card{--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-padding:20px;--el-card-bg-color:var(--el-fill-color-blank);background-color:var(--el-card-bg-color);border:1px solid var(--el-card-border-color);border-radius:var(--el-card-border-radius);color:var(--el-text-color-primary);display:flex;flex-direction:column;overflow:hidden;transition:var(--el-transition-duration)}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:var(--el-box-shadow-light)}.el-card__header{border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-card__body{flex:1;overflow:auto;padding:var(--el-card-padding)}.el-card__footer{border-top:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light);display:inline-block;outline:none;position:relative}.el-radio-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));line-height:1;margin:0;outline:var(--el-border);padding:8px 15px;position:relative;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button.is-active .el-radio-button__original-radio:not(:disabled)+.el-radio-button__inner{background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary));color:var(--el-radio-button-checked-text-color,var(--el-color-white))}.el-radio-button__original-radio{opacity:0;outline:none;position:absolute;z-index:-1}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));border-radius:var(--el-border-radius-base);box-shadow:none;outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2}.el-radio-button__original-radio:disabled+.el-radio-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.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-6a7fc61f{0%{--border-angle:0deg}to{--border-angle:360deg}}.upload-form[data-v-6a7fc61f],.upload-list-card[data-v-6a7fc61f]{display:flex;flex-direction:column;justify-content:center;align-items:center}.upload-list-card[data-v-6a7fc61f]{width:55vw;height:7vh;margin-top:10px;border-radius:15px;background-color:var(--upload-list-card-bg-color);backdrop-filter:blur(10px);border:var(--upload-list-card-border);box-shadow:var(--upload-list-card-box-shadow)!important;transition:height .3s ease;overflow:hidden}.upload-list-card[data-v-6a7fc61f] .el-card__body{padding:0;width:100%;overflow:hidden}.upload-list-container[data-v-6a7fc61f]{width:55vw;height:7vh;transition:height .3s ease;overflow:hidden}@media (max-width:768px){.upload-list-card[data-v-6a7fc61f],.upload-list-container[data-v-6a7fc61f]{width:70vw}}.upload-list-card.upload-list-busy[data-v-6a7fc61f],.upload-list-container.upload-list-busy[data-v-6a7fc61f]{height:40vh}.upload-list-card.is-uploading[data-v-6a7fc61f]{border:1px solid var(--el-upload-dragger-uniform-color,#409eff)!important;box-shadow:0 0 20px color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 30%,transparent),0 0 40px color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 15%,transparent),inset 0 0 20px color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 8%,transparent)!important}.upload-list-item-content[data-v-6a7fc61f]{display:flex;flex-direction:column;margin-left:10px}.upload-list-item-url-row[data-v-6a7fc61f]{display:flex;flex-direction:row;align-items:center;width:38vw;gap:8px;margin-bottom:6px}.upload-list-item-url-row[data-v-6a7fc61f]:last-child{margin-bottom:0}.upload-list-item-url[data-v-6a7fc61f]{display:flex;flex-direction:column}@media (max-width:768px){.upload-list-item-content[data-v-6a7fc61f]{margin-left:2px}.upload-list-item-url-row[data-v-6a7fc61f]{width:42vw;flex-direction:column;gap:6px}}.upload-card-wrapper[data-v-6a7fc61f]{position:relative;overflow:visible}.upload-card-glow[data-v-6a7fc61f]{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-6a7fc61f]{width:55vw;padding:20px;background:none}@media (max-width:768px){.upload-card[data-v-6a7fc61f]{width:70vw}}.upload-card-busy[data-v-6a7fc61f] .el-upload-dragger{height:17vh}[data-v-6a7fc61f] .el-upload-dragger{display:flex;flex-direction:column;justify-content:center;align-items:center;height:45vh;border-radius:15px;border:var(--el-upload-dragger-border);opacity:.7;background-color:var(--el-upload-dragger-bg-color);backdrop-filter:blur(10px);transition:all .3s ease}[data-v-6a7fc61f] .el-upload:focus .el-upload-dragger{border-color:var(--el-upload-dragger-border-color)}[data-v-6a7fc61f] .el-upload-dragger.is-dragover,[data-v-6a7fc61f] .el-upload-dragger:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.is-uploading[data-v-6a7fc61f] .el-upload-dragger{border-color:transparent!important}.upload-card.is-uploading[data-v-6a7fc61f]{position:relative;background:none}.upload-card.is-uploading[data-v-6a7fc61f]: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,#409eff) 60deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 90deg,transparent 120deg,transparent 180deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 210deg,var(--el-upload-dragger-uniform-color,#409eff) 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-6a7fc61f 2s linear infinite;pointer-events:none;z-index:1}.el-upload__text[data-v-6a7fc61f]{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-6a7fc61f]{font-size:small}}.el-upload__text.upload-list-busy[data-v-6a7fc61f]{font-size:small}.el-icon--upload[data-v-6a7fc61f]{font-size:100px;transition:font-size .3s ease;color:var(--el-icon--upload-color)}.el-icon--upload.upload-list-busy[data-v-6a7fc61f]{font-size:60px}@media (max-width:768px){.el-icon--upload[data-v-6a7fc61f]{font-size:50px}.el-icon--upload.upload-list-busy[data-v-6a7fc61f]{font-size:30px}}.el-upload__tip[data-v-6a7fc61f]{font-size:medium;color:var(--upload-text-color);-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.el-upload__tip[data-v-6a7fc61f]{font-size:small}}.paste-card[data-v-6a7fc61f]{display:flex;flex-direction:column;justify-content:center;align-items:center;height:45vh;border-radius:15px;border:var(--el-upload-dragger-border);box-shadow:none;opacity:.7;background-color:var(--el-upload-dragger-bg-color);backdrop-filter:blur(10px);transition:all .3s ease;box-sizing:border-box}.paste-card[data-v-6a7fc61f]:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.paste-card.is-uploading[data-v-6a7fc61f]{position:relative;border-color:transparent!important;overflow:visible}.paste-card.is-uploading[data-v-6a7fc61f]: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,#409eff) 60deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 90deg,transparent 120deg,transparent 180deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 210deg,var(--el-upload-dragger-uniform-color,#409eff) 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-6a7fc61f 2s linear infinite;pointer-events:none;z-index:1}.paste-card[data-v-6a7fc61f] .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-6a7fc61f]{height:17vh}.upload-card-textarea[data-v-6a7fc61f]{width:50vw;height:70%;border-radius:16px;background:var(--textarea-bg,linear-gradient(135deg,rgba(64,158,255,.03) 0,rgba(64,158,255,.01) 100%));backdrop-filter:blur(12px);transition:all .3s cubic-bezier(.4,0,.2,1);box-sizing:border-box;display:flex;position:relative}.upload-card-busy .upload-card-textarea[data-v-6a7fc61f]{height:50%}.upload-card-textarea[data-v-6a7fc61f]:before{content:"";position:absolute;inset:-1px;border-radius:17px;padding:1px;background:linear-gradient(135deg,rgba(64,158,255,.3),rgba(64,158,255,.1) 50%,rgba(64,158,255,.3));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none;opacity:.6;transition:opacity .3s ease}.upload-card-textarea[data-v-6a7fc61f]:hover:before{opacity:1}.upload-card-textarea[data-v-6a7fc61f]:focus-within:before{opacity:1;background:linear-gradient(135deg,rgba(64,158,255,.6),rgba(64,158,255,.2) 50%,rgba(64,158,255,.6))}[data-v-6a7fc61f] .el-textarea__inner{border-radius:16px;background:var(--textarea-inner-bg,rgba(0,0,0,.02));backdrop-filter:blur(12px);transition:all .3s cubic-bezier(.4,0,.2,1);resize:none;border:1px solid transparent;padding:16px 20px;font-size:14px;line-height:1.6;color:var(--el-text-color-primary)}[data-v-6a7fc61f] .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}[data-v-6a7fc61f] .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}[data-v-6a7fc61f] .el-textarea__inner:hover{background:var(--textarea-inner-hover-bg,rgba(64,158,255,.03))}[data-v-6a7fc61f] .el-textarea__inner:focus{border-color:transparent;box-shadow:0 0 0 3px rgba(64,158,255,.15),0 4px 20px rgba(64,158,255,.1),inset 0 1px 3px rgba(0,0,0,.05);background:var(--textarea-inner-focus-bg,rgba(64,158,255,.02))}.upload-card-textarea[data-v-6a7fc61f] ::-webkit-scrollbar{width:6px;height:6px}.upload-card-textarea[data-v-6a7fc61f] ::-webkit-scrollbar-track{background:transparent;border-radius:6px;margin:8px}.upload-card-textarea[data-v-6a7fc61f] ::-webkit-scrollbar-thumb{background:linear-gradient(180deg,rgba(64,158,255,.4),rgba(64,158,255,.6));border-radius:6px;-webkit-transition:background .3s ease;transition:background .3s ease}.upload-card-textarea[data-v-6a7fc61f] ::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,rgba(64,158,255,.6),rgba(64,158,255,.8))}.paste-card-actions[data-v-6a7fc61f]{display:flex;justify-content:space-between;align-items:center;width:50vw;margin-top:3%}.paste-card-upload-button[data-v-6a7fc61f]{min-width:100px;height:42px;border-radius:14px!important;font-weight:600;font-size:15px;letter-spacing:2px;background:linear-gradient(135deg,#409eff,#66b1ff)!important;border:none!important;box-shadow:0 4px 15px rgba(64,158,255,.35),inset 0 1px 0 hsla(0,0%,100%,.2);transition:all .3s cubic-bezier(.4,0,.2,1)!important;position:relative;overflow:hidden}.paste-card-upload-button[data-v-6a7fc61f]:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.25),transparent);transition:left .6s ease}.paste-card-upload-button[data-v-6a7fc61f]:hover{transform:translateY(-3px) scale(1.02);box-shadow:0 8px 25px rgba(64,158,255,.45),inset 0 1px 0 hsla(0,0%,100%,.25)}.paste-card-upload-button[data-v-6a7fc61f]:hover:before{left:100%}.paste-card-upload-button[data-v-6a7fc61f]:active{transform:translateY(-1px) scale(.98)}.upload-card-busy .paste-card-upload-button[data-v-6a7fc61f]{min-width:70px;height:32px;border-radius:10px!important;font-size:13px;letter-spacing:1px}.upload-card-busy .paste-card-actions[data-v-6a7fc61f]{margin-top:2%}.paste-card-method-group[data-v-6a7fc61f]{background:var(--paste-method-group-bg,rgba(64,158,255,.08));border-radius:14px;padding:4px;border:1px solid var(--paste-method-group-border,rgba(64,158,255,.15))}.paste-card-method-group[data-v-6a7fc61f] .el-radio-button__inner{transition:all .3s cubic-bezier(.4,0,.2,1);border-radius:10px!important;border:none!important;background:transparent;font-weight:500;padding:10px 20px;color:var(--el-text-color-regular)}.paste-card-method-group[data-v-6a7fc61f] .el-radio-button:first-child .el-radio-button__inner,.paste-card-method-group[data-v-6a7fc61f] .el-radio-button:last-child .el-radio-button__inner{border-radius:10px!important}.paste-card-method-group[data-v-6a7fc61f] .el-radio-button__inner:hover{background:var(--paste-method-hover-bg,rgba(64,158,255,.12));color:var(--el-color-primary)}.paste-card-method-group[data-v-6a7fc61f] .el-radio-button__original-radio:checked+.el-radio-button__inner{background:linear-gradient(135deg,#409eff,#66b1ff)!important;color:#fff!important;box-shadow:0 3px 10px rgba(64,158,255,.35)}@media (max-width:768px){.paste-card[data-v-6a7fc61f]{height:auto;min-height:30vh;padding:6px;border-radius:12px}.upload-card-busy.paste-card[data-v-6a7fc61f]{height:auto;min-height:18vh;padding:5px}.upload-card-textarea[data-v-6a7fc61f]{margin-top:4px;width:calc(100% - 4px)!important}.upload-card-textarea[data-v-6a7fc61f]:before{border-radius:11px}[data-v-6a7fc61f] .el-textarea__inner{border-radius:10px;padding:8px 10px;font-size:12px}.paste-card-actions[data-v-6a7fc61f]{width:100%!important;margin-top:6px;gap:6px}.paste-card-upload-button[data-v-6a7fc61f]{height:30px;min-width:55px;border-radius:8px!important;font-size:12px;letter-spacing:.5px;padding:0 10px}.paste-card-method-group[data-v-6a7fc61f]{border-radius:8px;padding:2px;height:30px;display:flex;align-items:center}.paste-card-method-group[data-v-6a7fc61f] .el-radio-button__inner{padding:4px 10px;font-size:11px;border-radius:6px!important;height:26px;display:flex;align-items:center}}.upload-list-dashboard[data-v-6a7fc61f]{display:flex;justify-content:space-between;align-items:center;height:7vh;padding:0 15px;position:sticky;top:0;z-index:1;border-radius:15px;transition:all .3s ease}.upload-list-dashboard.list-scrolled[data-v-6a7fc61f]{background-color:var(--upload-list-dashboard-bg-color);box-shadow:var(--upload-list-dashboard-shadow)}.file-icon[data-v-6a7fc61f]{font-size:30px;color:var(--upload-list-file-icon-color)}.upload-list-item-url[data-v-6a7fc61f] .el-input{transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item-url[data-v-6a7fc61f] .el-input:hover{transform:translateY(-1px)}.upload-list-item-url[data-v-6a7fc61f] .el-input__wrapper{border-radius:10px;box-shadow:0 1px 3px rgba(0,0,0,.08);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-6a7fc61f] .el-input-group>.el-input__wrapper{border-radius:0 9px 9px 0!important}.upload-list-item-url[data-v-6a7fc61f] .el-input__wrapper:hover{box-shadow:0 2px 8px rgba(0,0,0,.12);border-color:var(--el-color-primary-light-5)}.upload-list-item-url[data-v-6a7fc61f] .el-input__wrapper.is-focus{box-shadow:0 0 0 2px var(--el-color-primary-light-8),0 4px 12px rgba(0,0,0,.15);border-color:var(--el-color-primary)}.upload-list-item-url[data-v-6a7fc61f] .el-input__wrapper.is-focus:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(64,158,255,.08),transparent);animation:shimmer-6a7fc61f 2s infinite;z-index:0}@keyframes shimmer-6a7fc61f{0%{left:-100%}to{left:100%}}.upload-list-item-url[data-v-6a7fc61f] .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-6a7fc61f] .el-input__inner::-moz-selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-6a7fc61f] .el-input__inner::selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-6a7fc61f] .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-6a7fc61f] .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-6a7fc61f] .el-input:hover .el-input-group__prepend{background:var(--el-color-primary-light-8)}.upload-list-item-url[data-v-6a7fc61f] .el-input:hover .el-input-group__prepend:after{opacity:.5}.upload-list-item-url[data-v-6a7fc61f] .el-input.is-focus .el-input-group__prepend{background:var(--el-color-primary);color:#fff}.upload-list-item-url[data-v-6a7fc61f] .el-input.is-focus .el-input-group__prepend:after{background:hsla(0,0%,100%,.3);opacity:1}.upload-list-item-url[data-v-6a7fc61f] .el-input.is-focus .el-input-group__prepend{animation:prependPulse-6a7fc61f 2s ease-in-out infinite}@keyframes prependPulse-6a7fc61f{0%,to{opacity:1}50%{opacity:.95}}@media (max-width:768px){.upload-list-item-url[data-v-6a7fc61f] .el-input__wrapper{border-radius:8px}.upload-list-item-url[data-v-6a7fc61f] .el-input__inner{font-size:12px}.upload-list-item-url[data-v-6a7fc61f] .el-input-group__prepend{font-size:11px;padding:0 8px;border-radius:8px 0 0 8px}}[data-v-6a7fc61f] .el-upload-dragger{position:relative;overflow:hidden}[data-v-6a7fc61f] .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-6a7fc61f] .el-upload-dragger:after,[data-v-6a7fc61f] .el-upload-dragger:before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;z-index:0;transition:opacity .6s ease}[data-v-6a7fc61f] .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-6a7fc61f]:hover .el-upload-dragger:before{opacity:.3;animation:starScroll-6a7fc61f 60s linear infinite}.upload-card[data-v-6a7fc61f]:hover .el-upload-dragger:after{opacity:.6;animation:starScroll-6a7fc61f 40s linear infinite,starPulse-6a7fc61f 4s ease-in-out infinite}@keyframes starScroll-6a7fc61f{0%{background-position:0 0}to{background-position:100px 100px}}@keyframes starPulse-6a7fc61f{0%,to{opacity:.6}50%{opacity:.3}}.upload-list-item-progress[data-v-6a7fc61f]{margin-top:8px;width:28vw;padding:4px 8px;background:var(--progress-wrapper-bg,linear-gradient(135deg,rgba(64,158,255,.05) 0,rgba(64,158,255,.02) 100%));border-radius:12px;border:1px solid var(--progress-wrapper-border,rgba(64,158,255,.1))}.upload-list-item-progress[data-v-6a7fc61f] .el-progress{--el-color-primary:#409eff}.upload-list-item-progress[data-v-6a7fc61f] .el-progress-bar{padding-right:0;margin-right:0}.upload-list-item-progress[data-v-6a7fc61f] .el-progress-bar__outer{height:10px!important;border-radius:8px;background:var(--progress-outer-bg,linear-gradient(135deg,rgba(0,0,0,.06) 0,rgba(0,0,0,.03) 100%));box-shadow:inset 0 1px 3px rgba(0,0,0,.08);overflow:hidden}.upload-list-item-progress[data-v-6a7fc61f] .el-progress-bar__inner{border-radius:8px;background:linear-gradient(90deg,#409eff,#66b1ff 50%,#409eff)!important;box-shadow:0 0 12px rgba(64,158,255,.5),0 0 4px rgba(64,158,255,.3),inset 0 1px 0 hsla(0,0%,100%,.3);position:relative;overflow:hidden;transition:width .3s ease}.upload-list-item-progress[data-v-6a7fc61f] .el-progress-bar__inner:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2) 50%,transparent);pointer-events:none}.upload-list-item-progress[data-v-6a7fc61f] .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-6a7fc61f 1s linear infinite}.upload-list-item-progress[data-v-6a7fc61f] .el-progress--success .el-progress-bar__inner{background:linear-gradient(90deg,#67c23a,#85ce61 25%,#95d475 50%,#85ce61 75%,#67c23a)!important;background-size:200% 100%;box-shadow:0 0 12px rgba(103,194,58,.5),0 0 4px rgba(103,194,58,.3),inset 0 1px 0 hsla(0,0%,100%,.3);animation:none}.upload-list-item-progress[data-v-6a7fc61f] .el-progress--success .el-progress-bar__inner:after,.upload-list-item-progress[data-v-6a7fc61f] .el-progress--success .el-progress-bar__inner:before{animation:none;background:none}.upload-list-item-progress[data-v-6a7fc61f] .el-progress--exception .el-progress-bar__inner{background:linear-gradient(90deg,#f56c6c,#f78989 25%,#f9a7a7 50%,#f78989 75%,#f56c6c)!important;background-size:200% 100%;box-shadow:0 0 12px hsla(0,87%,69%,.5),0 0 4px hsla(0,87%,69%,.3),inset 0 1px 0 hsla(0,0%,100%,.3);animation:progressPulse-6a7fc61f 1s ease-in-out infinite}.upload-list-item-progress[data-v-6a7fc61f] .el-progress--exception .el-progress-bar__inner:before{animation:none;background:none}@keyframes progressShine-6a7fc61f{0%{background-position:0 0}to{background-position:200% 0}}@keyframes progressStripes-6a7fc61f{0%{transform:translateX(0)}to{transform:translateX(22.627px)}}@keyframes progressPulse-6a7fc61f{0%,to{opacity:1}50%{opacity:.7}}@media (max-width:768px){.upload-list-item-progress[data-v-6a7fc61f]{width:32vw;padding:3px 6px}.upload-list-item-progress[data-v-6a7fc61f] .el-progress-bar__outer{height:8px!important}}.modern-action-group[data-v-6a7fc61f]{display:flex;align-items:center;gap:6px;padding:4px;background:var(--modern-action-group-bg,rgba(64,158,255,.08));border-radius:14px;border:1px solid var(--modern-action-group-border,rgba(64,158,255,.15));box-shadow:0 2px 8px var(--modern-action-group-shadow,rgba(0,0,0,.06));transition:all .3s cubic-bezier(.4,0,.2,1)}.modern-action-group[data-v-6a7fc61f]:hover{background:var(--modern-action-group-hover-bg,rgba(64,158,255,.12));box-shadow:0 4px 16px var(--modern-action-group-hover-shadow,rgba(64,158,255,.15));transform:translateY(-1px)}.modern-action-btn[data-v-6a7fc61f]{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:10px;background:var(--modern-action-btn-bg,linear-gradient(135deg,#409eff 0,#66b1ff 100%));color:#fff;cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);font-size:14px;box-shadow:0 2px 6px rgba(64,158,255,.25);position:relative;overflow:hidden;outline:none!important}.modern-action-btn[data-v-6a7fc61f]:focus,.modern-action-btn[data-v-6a7fc61f]:focus-visible{outline:none!important}.modern-action-btn[data-v-6a7fc61f]:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2),transparent);transition:left .5s ease}.modern-action-btn[data-v-6a7fc61f]:hover{transform:translateY(-2px) scale(1.05);box-shadow:0 4px 12px rgba(64,158,255,.4)}.modern-action-btn[data-v-6a7fc61f]:hover:before{left:100%}.modern-action-btn[data-v-6a7fc61f]:active{transform:translateY(0) scale(.98);box-shadow:0 1px 4px rgba(64,158,255,.3)}.modern-action-btn-danger[data-v-6a7fc61f]{background:var(--modern-action-btn-danger-bg,linear-gradient(135deg,#f56c6c 0,#f78989 100%));box-shadow:0 2px 6px hsla(0,87%,69%,.25)}.modern-action-btn-danger[data-v-6a7fc61f]:hover{box-shadow:0 4px 12px hsla(0,87%,69%,.4)}.modern-dropdown-item-content[data-v-6a7fc61f]{display:flex;align-items:center;justify-content:space-between;width:100%;gap:12px;padding:4px 0}.modern-dropdown-item-content span[data-v-6a7fc61f]{font-weight:500;color:var(--el-text-color-primary)}.upload-list-item-name-wrapper[data-v-6a7fc61f]{display:flex;align-items:center;justify-content:center;padding:8px 16px;background:var(--file-name-bg,linear-gradient(135deg,rgba(64,158,255,.08) 0,rgba(64,158,255,.03) 100%));border-radius:10px;margin-bottom:8px;border:1px solid var(--file-name-border,rgba(64,158,255,.12));backdrop-filter:blur(4px);transition:all .3s ease}.upload-list-item-name-wrapper[data-v-6a7fc61f]:hover{background:var(--file-name-hover-bg,linear-gradient(135deg,rgba(64,158,255,.12) 0,rgba(64,158,255,.06) 100%));border-color:var(--file-name-hover-border,rgba(64,158,255,.2))}.upload-list-item-name[data-v-6a7fc61f]{font-size:14px;font-weight:600;max-width:28vw;color:var(--el-text-color-primary);letter-spacing:.3px;text-align:center}.modern-file-action-btn[data-v-6a7fc61f]{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:12px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);font-size:16px;position:relative;overflow:hidden;margin:4px 0}.modern-file-action-btn[data-v-6a7fc61f]:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;background:hsla(0,0%,100%,.3);border-radius:50%;transform:translate(-50%,-50%);transition:width .4s ease,height .4s ease}.modern-file-action-btn[data-v-6a7fc61f]:active:before{width:100%;height:100%}.modern-file-action-btn-primary[data-v-6a7fc61f]{background:var(--file-action-primary-bg,linear-gradient(145deg,#409eff 0,#53a8ff 50%,#66b1ff 100%));color:#fff;box-shadow:0 3px 10px rgba(64,158,255,.3),inset 0 1px 0 hsla(0,0%,100%,.2)}.modern-file-action-btn-primary[data-v-6a7fc61f]:hover{transform:translateY(-3px) scale(1.08);box-shadow:0 6px 20px rgba(64,158,255,.45),inset 0 1px 0 hsla(0,0%,100%,.25)}.modern-file-action-btn-primary[data-v-6a7fc61f]:active{transform:translateY(-1px) scale(1.02)}.modern-file-action-btn-danger[data-v-6a7fc61f]{background:var(--file-action-danger-bg,linear-gradient(145deg,#f56c6c 0,#f78989 50%,#f9a7a7 100%));color:#fff;box-shadow:0 3px 10px hsla(0,87%,69%,.3),inset 0 1px 0 hsla(0,0%,100%,.2)}.modern-file-action-btn-danger[data-v-6a7fc61f]:hover{transform:translateY(-3px) scale(1.08);box-shadow:0 6px 20px hsla(0,87%,69%,.45),inset 0 1px 0 hsla(0,0%,100%,.25)}.modern-file-action-btn-danger[data-v-6a7fc61f]:active{transform:translateY(-1px) scale(1.02)}.upload-list-item[data-v-6a7fc61f]{display:flex;align-items:center;justify-content:space-between;margin:8px 10px;border:1px solid var(--upload-list-item-border-color,rgba(64,158,255,.1));padding:10px 12px;border-radius:16px;background:var(--upload-list-item-bg,linear-gradient(135deg,hsla(0,0%,100%,.9) 0,hsla(0,0%,100%,.7) 100%));backdrop-filter:blur(10px);box-shadow:0 2px 8px var(--upload-list-item-shadow,rgba(0,0,0,.04));transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item[data-v-6a7fc61f]:hover{border-color:var(--upload-list-item-hover-border,rgba(64,158,255,.25));box-shadow:0 4px 16px var(--upload-list-item-hover-shadow,rgba(64,158,255,.12));transform:translateY(-2px)}.upload-list-item-action[data-v-6a7fc61f]{display:flex;flex-direction:column;align-items:center;gap:6px}.upload-list-dashboard-title[data-v-6a7fc61f]{font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px;padding:6px 14px;background:var(--dashboard-title-bg,linear-gradient(135deg,rgba(64,158,255,.06) 0,transparent 100%));border-radius:12px;color:var(--el-text-color-primary)}.upload-list-dashboard-title .el-icon[data-v-6a7fc61f]{font-size:16px;margin-right:4px;opacity:.85}@media (max-width:768px){.modern-action-group[data-v-6a7fc61f]{gap:4px;padding:3px;border-radius:12px}.modern-action-btn[data-v-6a7fc61f]{width:32px;height:32px;border-radius:8px;font-size:12px}.modern-file-action-btn[data-v-6a7fc61f]{width:34px;height:34px;border-radius:10px;font-size:14px}.upload-list-item-name-wrapper[data-v-6a7fc61f]{padding:4px 10px;border-radius:8px}.upload-list-item-name[data-v-6a7fc61f]{font-size:12px;width:32vw}.upload-list-dashboard-title[data-v-6a7fc61f]{font-size:12px;padding:4px 10px}}.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))}}#themeToggle[data-v-466b2b5c]{border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem}@media (max-width:768px){#themeToggle[data-v-466b2b5c]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-466b2b5c]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-466b2b5c]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-466b2b5c]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-466b2b5c]{transform:rotate(40deg)}.theme_toggle_g[data-v-466b2b5c]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-466b2b5c],.icon-fade-leave-active[data-v-466b2b5c]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-466b2b5c],.icon-fade-leave-from[data-v-466b2b5c]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-466b2b5c]{display:inline-block}.container[data-v-735d07b2]{background:var(--bg-color);min-height:100vh}.rotate[data-v-735d07b2]{animation:spin-735d07b2 2s ease-in-out}.scale[data-v-735d07b2]{animation:scale-735d07b2 .5s ease-in-out}@keyframes spin-735d07b2{0%{transform:rotate(0deg)}25%{transform:rotate(5deg)}50%{transform:rotate(0deg)}75%{transform:rotate(-3deg)}to{transform:rotate(0deg)}}@keyframes streamer-735d07b2{0%{background-position:200%}to{background-position:-200%}}@keyframes rotate-shake-735d07b2{0%{transform:rotate(0deg)}50%{transform:rotate(10deg)}to{transform:rotate(0deg)}}@keyframes shake-735d07b2{0%{transform:translateX(0)}50%{transform:translateX(-1px)}to{transform:translateX(0)}}@keyframes scale-735d07b2{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.desktop-only[data-v-735d07b2]{display:inline-block}.mobile-only[data-v-735d07b2]{display:none}@media (max-width:768px){.desktop-only[data-v-735d07b2]{display:none!important}.mobile-only[data-v-735d07b2]{display:flex!important}}.toggle-dark-button[data-v-735d07b2]{right:30px}.toggle-dark-button[data-v-735d07b2],.upload-method-button[data-v-735d07b2]{border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border-radius:12px;position:fixed;top:30px}.upload-method-button[data-v-735d07b2]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;color:var(--theme-toggle-color);right:130px;outline:none}@media (max-width:768px){.upload-method-button[data-v-735d07b2]{width:2rem;height:2rem}}.upload-method-icon[data-v-735d07b2]{outline:none}.history-button[data-v-735d07b2]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;position:fixed;top:30px;right:180px;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);z-index:100;border-radius:12px;outline:none}@media (max-width:768px){.history-button[data-v-735d07b2]{width:2rem;height:2rem;top:85px;right:80px}}.history-button[data-v-735d07b2]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.announcement-button[data-v-735d07b2]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;position:fixed;top:30px;right:230px;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);z-index:100;border-radius:12px;outline:none}.announcement-button[data-v-735d07b2]:hover:not(:disabled){transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.announcement-button[data-v-735d07b2]:disabled{opacity:.5;cursor:not-allowed}.mobile-more-dropdown[data-v-735d07b2]{position:fixed;top:30px;right:30px;z-index:100}.mobile-more-button[data-v-735d07b2]{width:2rem;height:2rem;display:flex;justify-content:center;align-items:center;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.mobile-more-button[data-v-735d07b2]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.upload-folder[data-v-735d07b2]{width:100px;height:2.5rem;position:fixed;top:30px;right:280px;z-index:100;border-radius:12px;transition:all .3s ease,width .4s ease}.upload-folder.no-announcement[data-v-735d07b2]{right:230px}.upload-folder.active[data-v-735d07b2]{width:200px}@media (max-width:768px){.upload-folder[data-v-735d07b2]{width:80px;height:2rem;right:110px}.upload-folder.no-announcement[data-v-735d07b2]{right:110px}.upload-folder.active[data-v-735d07b2]{width:120px}}.upload-folder[data-v-735d07b2] .el-input__wrapper{border-radius:12px}.info-container[data-v-735d07b2],.upload-folder[data-v-735d07b2] .el-input__wrapper{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border:none}.info-container[data-v-735d07b2]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;border-radius:12px;color:var(--theme-toggle-color);transition:all .3s ease;position:fixed;top:30px;right:80px;cursor:pointer}.info-icon[data-v-735d07b2]{outline:none}@media (max-width:768px){.info-container[data-v-735d07b2]{width:2rem;height:2rem;right:70px}}.toolbar-manage[data-v-735d07b2]{position:fixed;bottom:50px;right:30px;z-index:200}.toolbar-manage-button[data-v-735d07b2]{border:none;transition:all .3s ease,border-radius .4s ease;margin-left:0;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--toolbar-button-color);outline:none;border-radius:12px}.toolbar-manage-button.active[data-v-735d07b2]{border-radius:50%}.toolbar[data-v-735d07b2]{position:fixed;bottom:50px;right:30px;display:flex;flex-direction:column;align-items:center;z-index:100}.toolbar-button[data-v-735d07b2]{border:none;transition:all .3s ease;margin-left:0;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--toolbar-button-color)}.info-container[data-v-735d07b2]:hover,.toggle-dark-button[data-v-735d07b2]:hover,.toolbar-button[data-v-735d07b2]:hover,.toolbar-manage-button[data-v-735d07b2]:hover,.upload-folder[data-v-735d07b2]:hover,.upload-method-button[data-v-735d07b2]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.compress-button[data-v-735d07b2]{position:fixed;bottom:50px;right:30px;opacity:0;transition:all .3s ease,transform .4s cubic-bezier(.68,-.55,.27,1.55),opacity .3s cubic-bezier(.68,-.55,.27,1.55);pointer-events:none}.compress-button.active[data-v-735d07b2]{transform:translateY(-75px);opacity:1}.link-button[data-v-735d07b2]{position:fixed;bottom:50px;right:30px;opacity:0;transition:all .3s ease,transform .4s cubic-bezier(.68,-.55,.27,1.55),opacity .3s cubic-bezier(.68,-.55,.27,1.55);pointer-events:none}.link-button.active[data-v-735d07b2]{transform:translateY(-58px) translateX(-50px);opacity:1}.config-button[data-v-735d07b2]{position:fixed;bottom:50px;right:30px;opacity:0;transition:all .3s ease,transform .4s cubic-bezier(.68,-.55,.27,1.55),opacity .3s cubic-bezier(.68,-.55,.27,1.55);pointer-events:none}.config-button.active[data-v-735d07b2]{transform:translateY(-11px) translateX(-75px);opacity:1}.sign-out-button[data-v-735d07b2]{position:fixed;bottom:50px;right:30px;opacity:0;transition:all .3s ease,transform .4s cubic-bezier(.68,-.55,.27,1.55),opacity .3s cubic-bezier(.68,-.55,.27,1.55);pointer-events:none}.sign-out-button.active[data-v-735d07b2]{transform:translateY(42px) translateX(-68px);opacity:1}@media (min-width:768px){.compress-button[data-v-735d07b2]:hover{transform:translateY(-77px)}.link-button[data-v-735d07b2]:hover{transform:translateY(-60px) translateX(-52px)}.config-button[data-v-735d07b2]:hover{transform:translateY(-12px) translateX(-77px)}.sign-out-button[data-v-735d07b2]:hover{transform:translateY(44px) translateX(-70px)}.compress-icon[data-v-735d07b2]:hover{animation:scale-735d07b2 .5s ease-in-out}.config-icon[data-v-735d07b2]:hover{animation:spin-735d07b2 .5s ease-in-out}.link-icon[data-v-735d07b2]:hover{animation:rotate-shake-735d07b2 .5s ease-in-out}.sign-out-icon[data-v-735d07b2]:hover{animation:shake-735d07b2 .5s ease-in-out}}[data-v-735d07b2] .el-dialog{border-radius:12px;background-color:var(--dialog-bg-color);backdrop-filter:blur(10px);box-shadow:var(--dialog-box-shadow)}.dialog-action[data-v-735d07b2]{display:flex;justify-content:center;margin-top:20px}.header[data-v-735d07b2]{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-735d07b2]{font-size:2.5rem;font-weight:400;font-family:Righteous,Noto Sans SC,sans-serif;position:relative;padding-bottom:8px;cursor:pointer;transition:all .4s cubic-bezier(.4,0,.2,1);animation:float-735d07b2 4s ease-in-out infinite;letter-spacing:3px}.title[data-v-735d07b2]:hover{transform:scale(1.08) translateY(-3px);filter:drop-shadow(0 0 20px var(--el-upload-dragger-uniform-color))}.title[data-v-735d07b2]:after{content:"";position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:0;height:3px;background:linear-gradient(90deg,transparent,var(--el-upload-dragger-uniform-color),transparent);border-radius:3px;transition:width .5s cubic-bezier(.4,0,.2,1);box-shadow:0 0 10px var(--el-upload-dragger-uniform-color)}.title[data-v-735d07b2]:hover:after{width:80%}.main-title[data-v-735d07b2]{background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent;text-decoration:none;display:inline-block;animation:titleShimmer-735d07b2 3s ease-in-out infinite;position:relative;filter:drop-shadow(0 0 8px rgba(255,255,255,.3))}.title:hover .main-title[data-v-735d07b2]{animation:titleShimmer-735d07b2 1s ease-in-out infinite;filter:brightness(1.2)}@keyframes float-735d07b2{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes titleShimmer-735d07b2{0%{background-position:200%}to{background-position:-200%}}@media (max-width:768px){.title[data-v-735d07b2]{font-size:1.8rem;letter-spacing:1px}.title[data-v-735d07b2]:hover{transform:scale(1.05) translateY(-2px)}}.upload-home[data-v-735d07b2]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:94vh;background-color:var(--admin-container-bg-color)}.upload[data-v-735d07b2]{margin-bottom:5px;position:relative;top:-3vh}.question-icon[data-v-735d07b2]{margin:0 3px}.compress-slider[data-v-735d07b2]{width:80%;margin:0 auto}.footer[data-v-735d07b2]{height:6vh} \ No newline at end of file +.history-container[data-v-3ea1d874]{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-3ea1d874]:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;backdrop-filter:blur(20px);background:var(--admin-container-bg-color);z-index:-1;will-change:transform;transform:translateZ(0)}.history-container.active[data-v-3ea1d874]{clip-path:circle(150% at calc(100% - 200px) 50px);opacity:1}.history-header[data-v-3ea1d874]{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-3ea1d874]{display:flex;align-items:baseline;gap:15px}.header-left h2[data-v-3ea1d874]{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-3ea1d874]{color:var(--upload-text-color);font-size:14px;opacity:.8}.header-right[data-v-3ea1d874]{display:flex;gap:10px}.header-right .el-button[data-v-3ea1d874]{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border:none;color:var(--theme-toggle-color);transition:all .3s ease}.header-right .el-button[data-v-3ea1d874]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.header-right .el-button.el-button--danger[data-v-3ea1d874]{background:linear-gradient(135deg,#ff6b6b,#ee5a5a);color:#fff}.history-content[data-v-3ea1d874]{flex:1;overflow-y:auto;padding:20px 40px}.grid-view[data-v-3ea1d874]{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:20px}.grid-item[data-v-3ea1d874]{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:none;backdrop-filter:blur(10px)}.grid-item[data-v-3ea1d874]:hover{transform:translateY(-5px);box-shadow:var(--toolbar-button-shadow-hover)}.grid-preview[data-v-3ea1d874]{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-3ea1d874],.grid-preview video[data-v-3ea1d874]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper[data-v-3ea1d874]{font-size:48px;color:var(--theme-toggle-color);opacity:.5}.grid-overlay[data-v-3ea1d874]{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-3ea1d874]{opacity:1}.grid-actions[data-v-3ea1d874]{display:flex;gap:15px}.grid-actions .el-button[data-v-3ea1d874]{backdrop-filter:blur(10px)}.grid-info[data-v-3ea1d874]{padding:12px}.file-name[data-v-3ea1d874]{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-3ea1d874]{font-size:12px;color:var(--upload-text-color);opacity:.6}.list-view[data-v-3ea1d874]{display:flex;flex-direction:column;gap:10px}.list-item[data-v-3ea1d874]{display:flex;align-items:center;padding:12px 15px;background:var(--toolbar-button-bg-color);border-radius:12px;box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border:none;transition:all .3s ease}.list-item[data-v-3ea1d874]:hover{transform:translateX(5px);box-shadow:var(--toolbar-button-shadow-hover)}.list-preview[data-v-3ea1d874]{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-3ea1d874],.list-preview video[data-v-3ea1d874]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.file-icon-wrapper-small[data-v-3ea1d874]{font-size:24px;color:var(--theme-toggle-color);opacity:.5}.list-info[data-v-3ea1d874]{flex:1;min-width:0;margin-right:20px}.file-url[data-v-3ea1d874]{font-size:12px;color:var(--upload-text-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.6}.list-meta[data-v-3ea1d874]{margin-right:20px;text-align:right;min-width:140px}.list-actions[data-v-3ea1d874]{display:flex;gap:8px}.list-actions .el-button[data-v-3ea1d874]{backdrop-filter:blur(10px)}.empty-state[data-v-3ea1d874]{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-3ea1d874]{font-size:64px;margin-bottom:20px;color:var(--theme-toggle-color)}.history-content[data-v-3ea1d874]::-webkit-scrollbar{width:8px}.history-content[data-v-3ea1d874]::-webkit-scrollbar-track{background:transparent}.history-content[data-v-3ea1d874]::-webkit-scrollbar-thumb{background:var(--el-border-color);border-radius:4px}.history-content[data-v-3ea1d874]::-webkit-scrollbar-thumb:hover{background:var(--el-border-color-darker)}.action-btn-view[data-v-3ea1d874]{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-3ea1d874]:hover{box-shadow:var(--toolbar-button-shadow-hover);color:var(--el-color-primary)}.history-group[data-v-3ea1d874]{position:relative;padding-left:30px;border-left:2px solid var(--el-border-color-lighter);margin-left:10px;padding-bottom:30px}.history-group[data-v-3ea1d874]:last-child{border-left:2px solid transparent}.timeline-header[data-v-3ea1d874]{display:flex;align-items:center;margin-bottom:20px;position:relative}.timeline-dot[data-v-3ea1d874]{position:absolute;left:-38px;width:14px;height:14px;border-radius:50%;background:var(--el-upload-dragger-uniform-color);box-shadow:0 0 10px var(--el-upload-dragger-uniform-color);z-index:2;box-sizing:border-box}.date-label[data-v-3ea1d874]{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-3ea1d874]{display:flex;justify-content:center;padding:20px}.loading-indicator[data-v-3ea1d874]{display:flex;align-items:center;gap:8px;color:var(--el-upload-dragger-uniform-color)}.load-more-hint[data-v-3ea1d874],.no-more-hint[data-v-3ea1d874]{color:var(--upload-text-color);opacity:.5;font-size:14px}.no-more-hint[data-v-3ea1d874]{text-align:center;padding:20px}@media (max-width:768px){.history-header[data-v-3ea1d874]{padding:15px 20px}.header-left h2[data-v-3ea1d874]{font-size:20px}.history-content[data-v-3ea1d874]{padding:15px 20px}.grid-view[data-v-3ea1d874]{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:15px}.grid-preview[data-v-3ea1d874]{height:120px}.list-meta[data-v-3ea1d874]{display:none}.list-info[data-v-3ea1d874]{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}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:0.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-base);background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;margin:var(--el-dialog-margin-top,15vh) auto 50px;overflow-wrap:break-word;padding:var(--el-dialog-padding-primary);position:relative;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;border-radius:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{bottom:0;left:0;margin:0;overflow:auto;position:fixed;right:0;top:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px))}.el-dialog__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:48px;outline:none;padding:0;position:absolute;right:0;top:0;width:48px}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{color:var(--el-text-color-primary);font-size:var(--el-dialog-title-font-size);line-height:var(--el-dialog-font-line-height)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{box-sizing:border-box;padding-top:var(--el-dialog-padding-primary);text-align:right}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-modal-dialog.is-penetrable{pointer-events:none}.el-modal-dialog.is-penetrable .el-dialog{pointer-events:auto}.el-overlay-dialog{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-radio-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-radio-font-weight);height:32px;margin-right:30px;outline:none;position:relative;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{border-color:var(--el-border-color-lighter);cursor:not-allowed}.el-radio.is-bordered.el-radio--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.is-bordered.el-radio--small{border-radius:var(--el-border-radius-base);padding:0 11px 0 7px}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{cursor:pointer;display:inline-flex;outline:none;position:relative;vertical-align:middle;white-space:nowrap}.el-radio__input.is-disabled .el-radio__inner{border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled .el-radio__inner:after{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{background:var(--el-color-primary);border-color:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{background-color:var(--el-color-white);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{background-color:var(--el-radio-input-bg-color);border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);box-sizing:border-box;cursor:pointer;display:inline-block;height:var(--el-radio-input-height);position:relative;width:var(--el-radio-input-width)}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{border-radius:var(--el-radio-input-border-radius);content:"";height:4px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in;width:4px}.el-radio__original{bottom:0;left:0;margin:0;opacity:0;outline:none;position:absolute;right:0;top:0;z-index:-1}.el-radio__original:focus-visible+.el-radio__inner{border-radius:var(--el-radio-input-border-radius);outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio-group{align-items:center;display:inline-flex;flex-wrap:wrap;font-size:0}.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%}}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular);align-self:center;color:var(--el-text-color);font-size:var(--el-text-font-size);margin:0;overflow-wrap:break-word;padding:0}.el-text.is-truncated{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-text.is-line-clamp{display:-webkit-inline-box;-webkit-box-orient:vertical;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.el-card{--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-padding:20px;--el-card-bg-color:var(--el-fill-color-blank);background-color:var(--el-card-bg-color);border:1px solid var(--el-card-border-color);border-radius:var(--el-card-border-radius);color:var(--el-text-color-primary);display:flex;flex-direction:column;overflow:hidden;transition:var(--el-transition-duration)}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:var(--el-box-shadow-light)}.el-card__header{border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-card__body{flex:1;overflow:auto;padding:var(--el-card-padding)}.el-card__footer{border-top:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light);display:inline-block;outline:none;position:relative}.el-radio-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));line-height:1;margin:0;outline:var(--el-border);padding:8px 15px;position:relative;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button.is-active .el-radio-button__original-radio:not(:disabled)+.el-radio-button__inner{background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary));color:var(--el-radio-button-checked-text-color,var(--el-color-white))}.el-radio-button__original-radio{opacity:0;outline:none;position:absolute;z-index:-1}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));border-radius:var(--el-border-radius-base);box-shadow:none;outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2}.el-radio-button__original-radio:disabled+.el-radio-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.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-7444b7c2{0%{--border-angle:0deg}to{--border-angle:360deg}}.upload-form[data-v-7444b7c2],.upload-list-card[data-v-7444b7c2]{display:flex;flex-direction:column;justify-content:center;align-items:center}.upload-list-card[data-v-7444b7c2]{width:55vw;height:7vh;margin-top:10px;border-radius:15px;background-color:var(--upload-list-card-bg-color);backdrop-filter:blur(10px);border:var(--upload-list-card-border);box-shadow:var(--upload-list-card-box-shadow)!important;transition:height .3s ease;overflow:hidden}.upload-list-card[data-v-7444b7c2] .el-card__body{padding:0;width:100%;overflow:hidden}.upload-list-container[data-v-7444b7c2]{width:55vw;height:7vh;transition:height .3s ease;overflow:hidden}@media (max-width:768px){.upload-list-card[data-v-7444b7c2],.upload-list-container[data-v-7444b7c2]{width:70vw}}.upload-list-card.upload-list-busy[data-v-7444b7c2],.upload-list-container.upload-list-busy[data-v-7444b7c2]{height:40vh}.upload-list-card.is-uploading[data-v-7444b7c2]{border:1px solid var(--el-upload-dragger-uniform-color,#409eff)!important;box-shadow:0 0 20px color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 30%,transparent),0 0 40px color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 15%,transparent),inset 0 0 20px color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 8%,transparent)!important}.upload-list-item-content[data-v-7444b7c2]{display:flex;flex-direction:column;margin-left:10px}.upload-list-item-url-row[data-v-7444b7c2]{display:flex;flex-direction:row;align-items:center;width:38vw;gap:8px;margin-bottom:6px}.upload-list-item-url-row[data-v-7444b7c2]:last-child{margin-bottom:0}.upload-list-item-url[data-v-7444b7c2]{display:flex;flex-direction:column}@media (max-width:768px){.upload-list-item-content[data-v-7444b7c2]{margin-left:2px}.upload-list-item-url-row[data-v-7444b7c2]{width:42vw;flex-direction:column;gap:6px}}.upload-card-wrapper[data-v-7444b7c2]{position:relative;overflow:visible}.upload-card-glow[data-v-7444b7c2]{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-7444b7c2]{width:55vw;padding:20px;background:none}@media (max-width:768px){.upload-card[data-v-7444b7c2]{width:70vw}}.upload-card-busy[data-v-7444b7c2] .el-upload-dragger{height:17vh}[data-v-7444b7c2] .el-upload-dragger{display:flex;flex-direction:column;justify-content:center;align-items:center;height:45vh;border-radius:15px;border:var(--el-upload-dragger-border);opacity:.7;background-color:var(--el-upload-dragger-bg-color);backdrop-filter:blur(10px);transition:all .3s ease}[data-v-7444b7c2] .el-upload:focus .el-upload-dragger{border-color:var(--el-upload-dragger-border-color)}[data-v-7444b7c2] .el-upload-dragger.is-dragover,[data-v-7444b7c2] .el-upload-dragger:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.is-uploading[data-v-7444b7c2] .el-upload-dragger{border-color:transparent!important}.upload-card.is-uploading[data-v-7444b7c2]{position:relative;background:none}.upload-card.is-uploading[data-v-7444b7c2]: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,#409eff) 60deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 90deg,transparent 120deg,transparent 180deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 210deg,var(--el-upload-dragger-uniform-color,#409eff) 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-7444b7c2 2s linear infinite;pointer-events:none;z-index:1}.el-upload__text[data-v-7444b7c2]{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-7444b7c2]{font-size:small}}.el-upload__text.upload-list-busy[data-v-7444b7c2]{font-size:small}.el-icon--upload[data-v-7444b7c2]{font-size:100px;transition:font-size .3s ease;color:var(--el-icon--upload-color)}.el-icon--upload.upload-list-busy[data-v-7444b7c2]{font-size:60px}@media (max-width:768px){.el-icon--upload[data-v-7444b7c2]{font-size:50px}.el-icon--upload.upload-list-busy[data-v-7444b7c2]{font-size:30px}}.el-upload__tip[data-v-7444b7c2]{font-size:medium;color:var(--upload-text-color);-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (max-width:768px){.el-upload__tip[data-v-7444b7c2]{font-size:small}}.paste-card[data-v-7444b7c2]{display:flex;flex-direction:column;justify-content:center;align-items:center;height:45vh;border-radius:15px;border:var(--el-upload-dragger-border);box-shadow:none;opacity:.7;background-color:var(--el-upload-dragger-bg-color);backdrop-filter:blur(10px);transition:all .3s ease;box-sizing:border-box}.paste-card[data-v-7444b7c2]:hover{opacity:.8;box-shadow:var(--el-upload-dragger-hover-box-shadow)}.paste-card.is-uploading[data-v-7444b7c2]{position:relative;border-color:transparent!important;overflow:visible}.paste-card.is-uploading[data-v-7444b7c2]: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,#409eff) 60deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 90deg,transparent 120deg,transparent 180deg,color-mix(in srgb,var(--el-upload-dragger-uniform-color,#409eff) 70%,#fff) 210deg,var(--el-upload-dragger-uniform-color,#409eff) 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-7444b7c2 2s linear infinite;pointer-events:none;z-index:1}.paste-card[data-v-7444b7c2] .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-7444b7c2]{height:17vh}.upload-card-textarea[data-v-7444b7c2]{width:50vw;height:70%;border-radius:16px;background:var(--textarea-bg,linear-gradient(135deg,rgba(64,158,255,.03) 0,rgba(64,158,255,.01) 100%));backdrop-filter:blur(12px);transition:all .3s cubic-bezier(.4,0,.2,1);box-sizing:border-box;display:flex;position:relative}.upload-card-busy .upload-card-textarea[data-v-7444b7c2]{height:50%}.upload-card-textarea[data-v-7444b7c2]:before{content:"";position:absolute;inset:-1px;border-radius:17px;padding:1px;background:linear-gradient(135deg,rgba(64,158,255,.3),rgba(64,158,255,.1) 50%,rgba(64,158,255,.3));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none;opacity:.6;transition:opacity .3s ease}.upload-card-textarea[data-v-7444b7c2]:hover:before{opacity:1}.upload-card-textarea[data-v-7444b7c2]:focus-within:before{opacity:1;background:linear-gradient(135deg,rgba(64,158,255,.6),rgba(64,158,255,.2) 50%,rgba(64,158,255,.6))}[data-v-7444b7c2] .el-textarea__inner{border-radius:16px;background:var(--textarea-inner-bg,rgba(0,0,0,.02));backdrop-filter:blur(12px);transition:all .3s cubic-bezier(.4,0,.2,1);resize:none;border:1px solid transparent;padding:16px 20px;font-size:14px;line-height:1.6;color:var(--el-text-color-primary)}[data-v-7444b7c2] .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}[data-v-7444b7c2] .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder);font-weight:400;opacity:.7}[data-v-7444b7c2] .el-textarea__inner:hover{background:var(--textarea-inner-hover-bg,rgba(64,158,255,.03))}[data-v-7444b7c2] .el-textarea__inner:focus{border-color:transparent;box-shadow:0 0 0 3px rgba(64,158,255,.15),0 4px 20px rgba(64,158,255,.1),inset 0 1px 3px rgba(0,0,0,.05);background:var(--textarea-inner-focus-bg,rgba(64,158,255,.02))}.upload-card-textarea[data-v-7444b7c2] ::-webkit-scrollbar{width:6px;height:6px}.upload-card-textarea[data-v-7444b7c2] ::-webkit-scrollbar-track{background:transparent;border-radius:6px;margin:8px}.upload-card-textarea[data-v-7444b7c2] ::-webkit-scrollbar-thumb{background:linear-gradient(180deg,rgba(64,158,255,.4),rgba(64,158,255,.6));border-radius:6px;-webkit-transition:background .3s ease;transition:background .3s ease}.upload-card-textarea[data-v-7444b7c2] ::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,rgba(64,158,255,.6),rgba(64,158,255,.8))}.paste-card-actions[data-v-7444b7c2]{display:flex;justify-content:space-between;align-items:center;width:50vw;margin-top:3%}.paste-card-upload-button[data-v-7444b7c2]{min-width:100px;height:42px;border-radius:14px!important;font-weight:600;font-size:15px;letter-spacing:2px;background:linear-gradient(135deg,#409eff,#66b1ff)!important;border:none!important;box-shadow:0 4px 15px rgba(64,158,255,.35),inset 0 1px 0 hsla(0,0%,100%,.2);transition:all .3s cubic-bezier(.4,0,.2,1)!important;position:relative;overflow:hidden}.paste-card-upload-button[data-v-7444b7c2]:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.25),transparent);transition:left .6s ease}.paste-card-upload-button[data-v-7444b7c2]:hover{transform:translateY(-3px) scale(1.02);box-shadow:0 8px 25px rgba(64,158,255,.45),inset 0 1px 0 hsla(0,0%,100%,.25)}.paste-card-upload-button[data-v-7444b7c2]:hover:before{left:100%}.paste-card-upload-button[data-v-7444b7c2]:active{transform:translateY(-1px) scale(.98)}.upload-card-busy .paste-card-upload-button[data-v-7444b7c2]{min-width:70px;height:32px;border-radius:10px!important;font-size:13px;letter-spacing:1px}.upload-card-busy .paste-card-actions[data-v-7444b7c2]{margin-top:2%}.paste-card-method-group[data-v-7444b7c2]{background:var(--paste-method-group-bg,rgba(64,158,255,.08));border-radius:14px;padding:4px;border:1px solid var(--paste-method-group-border,rgba(64,158,255,.15))}.paste-card-method-group[data-v-7444b7c2] .el-radio-button__inner{transition:all .3s cubic-bezier(.4,0,.2,1);border-radius:10px!important;border:none!important;background:transparent;font-weight:500;padding:10px 20px;color:var(--el-text-color-regular)}.paste-card-method-group[data-v-7444b7c2] .el-radio-button:first-child .el-radio-button__inner,.paste-card-method-group[data-v-7444b7c2] .el-radio-button:last-child .el-radio-button__inner{border-radius:10px!important}.paste-card-method-group[data-v-7444b7c2] .el-radio-button__inner:hover{background:var(--paste-method-hover-bg,rgba(64,158,255,.12));color:var(--el-color-primary)}.paste-card-method-group[data-v-7444b7c2] .el-radio-button__original-radio:checked+.el-radio-button__inner{background:linear-gradient(135deg,#409eff,#66b1ff)!important;color:#fff!important;box-shadow:0 3px 10px rgba(64,158,255,.35)}@media (max-width:768px){.paste-card[data-v-7444b7c2]{height:auto;min-height:30vh;padding:6px;border-radius:12px}.upload-card-busy.paste-card[data-v-7444b7c2]{height:auto;min-height:18vh;padding:5px}.upload-card-textarea[data-v-7444b7c2]{margin-top:4px;width:calc(100% - 4px)!important}.upload-card-textarea[data-v-7444b7c2]:before{border-radius:11px}[data-v-7444b7c2] .el-textarea__inner{border-radius:10px;padding:8px 10px;font-size:12px}.paste-card-actions[data-v-7444b7c2]{width:100%!important;margin-top:6px;gap:6px}.paste-card-upload-button[data-v-7444b7c2]{height:30px;min-width:55px;border-radius:8px!important;font-size:12px;letter-spacing:.5px;padding:0 10px}.paste-card-method-group[data-v-7444b7c2]{border-radius:8px;padding:2px;height:30px;display:flex;align-items:center}.paste-card-method-group[data-v-7444b7c2] .el-radio-button__inner{padding:4px 10px;font-size:11px;border-radius:6px!important;height:26px;display:flex;align-items:center}}.upload-list-dashboard[data-v-7444b7c2]{display:flex;justify-content:space-between;align-items:center;height:7vh;padding:0 15px;position:sticky;top:0;z-index:1;border-radius:15px;transition:all .3s ease}.upload-list-dashboard.list-scrolled[data-v-7444b7c2]{background-color:var(--upload-list-dashboard-bg-color);box-shadow:var(--upload-list-dashboard-shadow)}.file-icon[data-v-7444b7c2]{font-size:30px;color:var(--upload-list-file-icon-color)}.upload-list-item-url[data-v-7444b7c2] .el-input{transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item-url[data-v-7444b7c2] .el-input:hover{transform:translateY(-1px)}.upload-list-item-url[data-v-7444b7c2] .el-input__wrapper{border-radius:10px;box-shadow:0 1px 3px rgba(0,0,0,.08);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-7444b7c2] .el-input-group>.el-input__wrapper{border-radius:0 9px 9px 0!important}.upload-list-item-url[data-v-7444b7c2] .el-input__wrapper:hover{box-shadow:0 2px 8px rgba(0,0,0,.12);border-color:var(--el-color-primary-light-5)}.upload-list-item-url[data-v-7444b7c2] .el-input__wrapper.is-focus{box-shadow:0 0 0 2px var(--el-color-primary-light-8),0 4px 12px rgba(0,0,0,.15);border-color:var(--el-color-primary)}.upload-list-item-url[data-v-7444b7c2] .el-input__wrapper.is-focus:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(64,158,255,.08),transparent);animation:shimmer-7444b7c2 2s infinite;z-index:0}@keyframes shimmer-7444b7c2{0%{left:-100%}to{left:100%}}.upload-list-item-url[data-v-7444b7c2] .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-7444b7c2] .el-input__inner::-moz-selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-7444b7c2] .el-input__inner::selection{background-color:var(--el-color-primary-light-7)}.upload-list-item-url[data-v-7444b7c2] .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-7444b7c2] .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-7444b7c2] .el-input:hover .el-input-group__prepend{background:var(--el-color-primary-light-8)}.upload-list-item-url[data-v-7444b7c2] .el-input:hover .el-input-group__prepend:after{opacity:.5}.upload-list-item-url[data-v-7444b7c2] .el-input.is-focus .el-input-group__prepend{background:var(--el-color-primary);color:#fff}.upload-list-item-url[data-v-7444b7c2] .el-input.is-focus .el-input-group__prepend:after{background:hsla(0,0%,100%,.3);opacity:1}.upload-list-item-url[data-v-7444b7c2] .el-input.is-focus .el-input-group__prepend{animation:prependPulse-7444b7c2 2s ease-in-out infinite}@keyframes prependPulse-7444b7c2{0%,to{opacity:1}50%{opacity:.95}}@media (max-width:768px){.upload-list-item-url[data-v-7444b7c2] .el-input__wrapper{border-radius:8px}.upload-list-item-url[data-v-7444b7c2] .el-input__inner{font-size:12px}.upload-list-item-url[data-v-7444b7c2] .el-input-group__prepend{font-size:11px;padding:0 8px;border-radius:8px 0 0 8px}}[data-v-7444b7c2] .el-upload-dragger{position:relative;overflow:hidden}[data-v-7444b7c2] .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-7444b7c2] .el-upload-dragger:after,[data-v-7444b7c2] .el-upload-dragger:before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;z-index:0;transition:opacity .6s ease}[data-v-7444b7c2] .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-7444b7c2]:hover .el-upload-dragger:before{opacity:.3;animation:starScroll-7444b7c2 60s linear infinite}.upload-card[data-v-7444b7c2]:hover .el-upload-dragger:after{opacity:.6;animation:starScroll-7444b7c2 40s linear infinite,starPulse-7444b7c2 4s ease-in-out infinite}@keyframes starScroll-7444b7c2{0%{background-position:0 0}to{background-position:100px 100px}}@keyframes starPulse-7444b7c2{0%,to{opacity:.6}50%{opacity:.3}}.upload-list-item-progress[data-v-7444b7c2]{margin-top:8px;width:28vw;padding:4px 8px;background:var(--progress-wrapper-bg,linear-gradient(135deg,rgba(64,158,255,.05) 0,rgba(64,158,255,.02) 100%));border-radius:12px;border:1px solid var(--progress-wrapper-border,rgba(64,158,255,.1))}.upload-list-item-progress[data-v-7444b7c2] .el-progress{--el-color-primary:#409eff}.upload-list-item-progress[data-v-7444b7c2] .el-progress-bar{padding-right:0;margin-right:0}.upload-list-item-progress[data-v-7444b7c2] .el-progress-bar__outer{height:10px!important;border-radius:8px;background:var(--progress-outer-bg,linear-gradient(135deg,rgba(0,0,0,.06) 0,rgba(0,0,0,.03) 100%));box-shadow:inset 0 1px 3px rgba(0,0,0,.08);overflow:hidden}.upload-list-item-progress[data-v-7444b7c2] .el-progress-bar__inner{border-radius:8px;background:linear-gradient(90deg,#409eff,#66b1ff 50%,#409eff)!important;box-shadow:0 0 12px rgba(64,158,255,.5),0 0 4px rgba(64,158,255,.3),inset 0 1px 0 hsla(0,0%,100%,.3);position:relative;overflow:hidden;transition:width .3s ease}.upload-list-item-progress[data-v-7444b7c2] .el-progress-bar__inner:after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2) 50%,transparent);pointer-events:none}.upload-list-item-progress[data-v-7444b7c2] .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-7444b7c2 1s linear infinite}.upload-list-item-progress[data-v-7444b7c2] .el-progress--success .el-progress-bar__inner{background:linear-gradient(90deg,#67c23a,#85ce61 25%,#95d475 50%,#85ce61 75%,#67c23a)!important;background-size:200% 100%;box-shadow:0 0 12px rgba(103,194,58,.5),0 0 4px rgba(103,194,58,.3),inset 0 1px 0 hsla(0,0%,100%,.3);animation:none}.upload-list-item-progress[data-v-7444b7c2] .el-progress--success .el-progress-bar__inner:after,.upload-list-item-progress[data-v-7444b7c2] .el-progress--success .el-progress-bar__inner:before{animation:none;background:none}.upload-list-item-progress[data-v-7444b7c2] .el-progress--exception .el-progress-bar__inner{background:linear-gradient(90deg,#f56c6c,#f78989 25%,#f9a7a7 50%,#f78989 75%,#f56c6c)!important;background-size:200% 100%;box-shadow:0 0 12px hsla(0,87%,69%,.5),0 0 4px hsla(0,87%,69%,.3),inset 0 1px 0 hsla(0,0%,100%,.3);animation:progressPulse-7444b7c2 1s ease-in-out infinite}.upload-list-item-progress[data-v-7444b7c2] .el-progress--exception .el-progress-bar__inner:before{animation:none;background:none}@keyframes progressShine-7444b7c2{0%{background-position:0 0}to{background-position:200% 0}}@keyframes progressStripes-7444b7c2{0%{transform:translateX(0)}to{transform:translateX(22.627px)}}@keyframes progressPulse-7444b7c2{0%,to{opacity:1}50%{opacity:.7}}@media (max-width:768px){.upload-list-item-progress[data-v-7444b7c2]{width:32vw;padding:3px 6px}.upload-list-item-progress[data-v-7444b7c2] .el-progress-bar__outer{height:8px!important}}.modern-action-group[data-v-7444b7c2]{display:flex;align-items:center;gap:6px;padding:4px;background:var(--modern-action-group-bg,rgba(64,158,255,.08));border-radius:14px;border:1px solid var(--modern-action-group-border,rgba(64,158,255,.15));box-shadow:0 2px 8px var(--modern-action-group-shadow,rgba(0,0,0,.06));transition:all .3s cubic-bezier(.4,0,.2,1)}.modern-action-group[data-v-7444b7c2]:hover{background:var(--modern-action-group-hover-bg,rgba(64,158,255,.12));box-shadow:0 4px 16px var(--modern-action-group-hover-shadow,rgba(64,158,255,.15));transform:translateY(-1px)}.modern-action-btn[data-v-7444b7c2]{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;border-radius:10px;background:var(--modern-action-btn-bg,linear-gradient(135deg,#409eff 0,#66b1ff 100%));color:#fff;cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);font-size:14px;box-shadow:0 2px 6px rgba(64,158,255,.25);position:relative;overflow:hidden;outline:none!important}.modern-action-btn[data-v-7444b7c2]:focus,.modern-action-btn[data-v-7444b7c2]:focus-visible{outline:none!important}.modern-action-btn[data-v-7444b7c2]:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2),transparent);transition:left .5s ease}.modern-action-btn[data-v-7444b7c2]:hover{transform:translateY(-2px) scale(1.05);box-shadow:0 4px 12px rgba(64,158,255,.4)}.modern-action-btn[data-v-7444b7c2]:hover:before{left:100%}.modern-action-btn[data-v-7444b7c2]:active{transform:translateY(0) scale(.98);box-shadow:0 1px 4px rgba(64,158,255,.3)}.modern-action-btn-danger[data-v-7444b7c2]{background:var(--modern-action-btn-danger-bg,linear-gradient(135deg,#f56c6c 0,#f78989 100%));box-shadow:0 2px 6px hsla(0,87%,69%,.25)}.modern-action-btn-danger[data-v-7444b7c2]:hover{box-shadow:0 4px 12px hsla(0,87%,69%,.4)}.modern-dropdown-item-content[data-v-7444b7c2]{display:flex;align-items:center;justify-content:space-between;width:100%;gap:12px;padding:4px 0}.modern-dropdown-item-content span[data-v-7444b7c2]{font-weight:500;color:var(--el-text-color-primary)}.upload-list-item-name-wrapper[data-v-7444b7c2]{display:flex;align-items:center;justify-content:center;padding:8px 16px;background:var(--file-name-bg,linear-gradient(135deg,rgba(64,158,255,.08) 0,rgba(64,158,255,.03) 100%));border-radius:10px;margin-bottom:8px;border:1px solid var(--file-name-border,rgba(64,158,255,.12));backdrop-filter:blur(4px);transition:all .3s ease}.upload-list-item-name-wrapper[data-v-7444b7c2]:hover{background:var(--file-name-hover-bg,linear-gradient(135deg,rgba(64,158,255,.12) 0,rgba(64,158,255,.06) 100%));border-color:var(--file-name-hover-border,rgba(64,158,255,.2))}.upload-list-item-name[data-v-7444b7c2]{font-size:14px;font-weight:600;max-width:28vw;color:var(--el-text-color-primary);letter-spacing:.3px;text-align:center}.modern-file-action-btn[data-v-7444b7c2]{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;border-radius:12px;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);font-size:16px;position:relative;overflow:hidden;margin:4px 0}.modern-file-action-btn[data-v-7444b7c2]:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;background:hsla(0,0%,100%,.3);border-radius:50%;transform:translate(-50%,-50%);transition:width .4s ease,height .4s ease}.modern-file-action-btn[data-v-7444b7c2]:active:before{width:100%;height:100%}.modern-file-action-btn-primary[data-v-7444b7c2]{background:var(--file-action-primary-bg,linear-gradient(145deg,#409eff 0,#53a8ff 50%,#66b1ff 100%));color:#fff;box-shadow:0 3px 10px rgba(64,158,255,.3),inset 0 1px 0 hsla(0,0%,100%,.2)}.modern-file-action-btn-primary[data-v-7444b7c2]:hover{transform:translateY(-3px) scale(1.08);box-shadow:0 6px 20px rgba(64,158,255,.45),inset 0 1px 0 hsla(0,0%,100%,.25)}.modern-file-action-btn-primary[data-v-7444b7c2]:active{transform:translateY(-1px) scale(1.02)}.modern-file-action-btn-danger[data-v-7444b7c2]{background:var(--file-action-danger-bg,linear-gradient(145deg,#f56c6c 0,#f78989 50%,#f9a7a7 100%));color:#fff;box-shadow:0 3px 10px hsla(0,87%,69%,.3),inset 0 1px 0 hsla(0,0%,100%,.2)}.modern-file-action-btn-danger[data-v-7444b7c2]:hover{transform:translateY(-3px) scale(1.08);box-shadow:0 6px 20px hsla(0,87%,69%,.45),inset 0 1px 0 hsla(0,0%,100%,.25)}.modern-file-action-btn-danger[data-v-7444b7c2]:active{transform:translateY(-1px) scale(1.02)}.upload-list-item[data-v-7444b7c2]{display:flex;align-items:center;justify-content:space-between;margin:8px 10px;border:1px solid var(--upload-list-item-border-color,rgba(64,158,255,.1));padding:10px 12px;border-radius:16px;background:var(--upload-list-item-bg,linear-gradient(135deg,hsla(0,0%,100%,.9) 0,hsla(0,0%,100%,.7) 100%));backdrop-filter:blur(10px);box-shadow:0 2px 8px var(--upload-list-item-shadow,rgba(0,0,0,.04));transition:all .3s cubic-bezier(.4,0,.2,1)}.upload-list-item[data-v-7444b7c2]:hover{border-color:var(--upload-list-item-hover-border,rgba(64,158,255,.25));box-shadow:0 4px 16px var(--upload-list-item-hover-shadow,rgba(64,158,255,.12));transform:translateY(-2px)}.upload-list-item-action[data-v-7444b7c2]{display:flex;flex-direction:column;align-items:center;gap:6px}.upload-list-dashboard-title[data-v-7444b7c2]{font-size:14px;font-weight:600;display:flex;align-items:center;gap:8px;padding:6px 14px;background:var(--dashboard-title-bg,linear-gradient(135deg,rgba(64,158,255,.06) 0,transparent 100%));border-radius:12px;color:var(--el-text-color-primary)}.upload-list-dashboard-title .el-icon[data-v-7444b7c2]{font-size:16px;margin-right:4px;opacity:.85}@media (max-width:768px){.modern-action-group[data-v-7444b7c2]{gap:4px;padding:3px;border-radius:12px}.modern-action-btn[data-v-7444b7c2]{width:32px;height:32px;border-radius:8px;font-size:12px}.modern-file-action-btn[data-v-7444b7c2]{width:34px;height:34px;border-radius:10px;font-size:14px}.upload-list-item-name-wrapper[data-v-7444b7c2]{padding:4px 10px;border-radius:8px}.upload-list-item-name[data-v-7444b7c2]{font-size:12px;width:32vw}.upload-list-dashboard-title[data-v-7444b7c2]{font-size:12px;padding:4px 10px}}.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))}}#themeToggle[data-v-466b2b5c]{border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem}@media (max-width:768px){#themeToggle[data-v-466b2b5c]{width:2rem;height:2rem}}.theme_toggle_circle1[data-v-466b2b5c]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-466b2b5c]{transition:all .5s ease-in-out;fill:var(--theme-toggle-bg-color)}.theme_toggle_svg[data-v-466b2b5c]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--theme-toggle-color)}.dark.theme_toggle_svg[data-v-466b2b5c]{transform:rotate(40deg)}.theme_toggle_g[data-v-466b2b5c]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-466b2b5c],.icon-fade-leave-active[data-v-466b2b5c]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-466b2b5c]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-466b2b5c],.icon-fade-leave-from[data-v-466b2b5c]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-466b2b5c]{display:inline-block}.container[data-v-735d07b2]{background:var(--bg-color);min-height:100vh}.rotate[data-v-735d07b2]{animation:spin-735d07b2 2s ease-in-out}.scale[data-v-735d07b2]{animation:scale-735d07b2 .5s ease-in-out}@keyframes spin-735d07b2{0%{transform:rotate(0deg)}25%{transform:rotate(5deg)}50%{transform:rotate(0deg)}75%{transform:rotate(-3deg)}to{transform:rotate(0deg)}}@keyframes streamer-735d07b2{0%{background-position:200%}to{background-position:-200%}}@keyframes rotate-shake-735d07b2{0%{transform:rotate(0deg)}50%{transform:rotate(10deg)}to{transform:rotate(0deg)}}@keyframes shake-735d07b2{0%{transform:translateX(0)}50%{transform:translateX(-1px)}to{transform:translateX(0)}}@keyframes scale-735d07b2{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.desktop-only[data-v-735d07b2]{display:inline-block}.mobile-only[data-v-735d07b2]{display:none}@media (max-width:768px){.desktop-only[data-v-735d07b2]{display:none!important}.mobile-only[data-v-735d07b2]{display:flex!important}}.toggle-dark-button[data-v-735d07b2]{right:30px}.toggle-dark-button[data-v-735d07b2],.upload-method-button[data-v-735d07b2]{border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border-radius:12px;position:fixed;top:30px}.upload-method-button[data-v-735d07b2]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;color:var(--theme-toggle-color);right:130px;outline:none}@media (max-width:768px){.upload-method-button[data-v-735d07b2]{width:2rem;height:2rem}}.upload-method-icon[data-v-735d07b2]{outline:none}.history-button[data-v-735d07b2]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;position:fixed;top:30px;right:180px;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);z-index:100;border-radius:12px;outline:none}@media (max-width:768px){.history-button[data-v-735d07b2]{width:2rem;height:2rem;top:85px;right:80px}}.history-button[data-v-735d07b2]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.announcement-button[data-v-735d07b2]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;position:fixed;top:30px;right:230px;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);z-index:100;border-radius:12px;outline:none}.announcement-button[data-v-735d07b2]:hover:not(:disabled){transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.announcement-button[data-v-735d07b2]:disabled{opacity:.5;cursor:not-allowed}.mobile-more-dropdown[data-v-735d07b2]{position:fixed;top:30px;right:30px;z-index:100}.mobile-more-button[data-v-735d07b2]{width:2rem;height:2rem;display:flex;justify-content:center;align-items:center;border:none;transition:all .3s ease;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--theme-toggle-color);border-radius:12px;outline:none;padding:0}.mobile-more-button[data-v-735d07b2]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.upload-folder[data-v-735d07b2]{width:100px;height:2.5rem;position:fixed;top:30px;right:280px;z-index:100;border-radius:12px;transition:all .3s ease,width .4s ease}.upload-folder.no-announcement[data-v-735d07b2]{right:230px}.upload-folder.active[data-v-735d07b2]{width:200px}@media (max-width:768px){.upload-folder[data-v-735d07b2]{width:80px;height:2rem;right:110px}.upload-folder.no-announcement[data-v-735d07b2]{right:110px}.upload-folder.active[data-v-735d07b2]{width:120px}}.upload-folder[data-v-735d07b2] .el-input__wrapper{border-radius:12px}.info-container[data-v-735d07b2],.upload-folder[data-v-735d07b2] .el-input__wrapper{background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);border:none}.info-container[data-v-735d07b2]{width:2.5rem;height:2.5rem;display:flex;justify-content:center;align-items:center;border-radius:12px;color:var(--theme-toggle-color);transition:all .3s ease;position:fixed;top:30px;right:80px;cursor:pointer}.info-icon[data-v-735d07b2]{outline:none}@media (max-width:768px){.info-container[data-v-735d07b2]{width:2rem;height:2rem;right:70px}}.toolbar-manage[data-v-735d07b2]{position:fixed;bottom:50px;right:30px;z-index:200}.toolbar-manage-button[data-v-735d07b2]{border:none;transition:all .3s ease,border-radius .4s ease;margin-left:0;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--toolbar-button-color);outline:none;border-radius:12px}.toolbar-manage-button.active[data-v-735d07b2]{border-radius:50%}.toolbar[data-v-735d07b2]{position:fixed;bottom:50px;right:30px;display:flex;flex-direction:column;align-items:center;z-index:100}.toolbar-button[data-v-735d07b2]{border:none;transition:all .3s ease;margin-left:0;background-color:var(--toolbar-button-bg-color);box-shadow:var(--toolbar-button-shadow);backdrop-filter:blur(10px);color:var(--toolbar-button-color)}.info-container[data-v-735d07b2]:hover,.toggle-dark-button[data-v-735d07b2]:hover,.toolbar-button[data-v-735d07b2]:hover,.toolbar-manage-button[data-v-735d07b2]:hover,.upload-folder[data-v-735d07b2]:hover,.upload-method-button[data-v-735d07b2]:hover{transform:scale(1.05);box-shadow:var(--toolbar-button-shadow-hover)}.compress-button[data-v-735d07b2]{position:fixed;bottom:50px;right:30px;opacity:0;transition:all .3s ease,transform .4s cubic-bezier(.68,-.55,.27,1.55),opacity .3s cubic-bezier(.68,-.55,.27,1.55);pointer-events:none}.compress-button.active[data-v-735d07b2]{transform:translateY(-75px);opacity:1}.link-button[data-v-735d07b2]{position:fixed;bottom:50px;right:30px;opacity:0;transition:all .3s ease,transform .4s cubic-bezier(.68,-.55,.27,1.55),opacity .3s cubic-bezier(.68,-.55,.27,1.55);pointer-events:none}.link-button.active[data-v-735d07b2]{transform:translateY(-58px) translateX(-50px);opacity:1}.config-button[data-v-735d07b2]{position:fixed;bottom:50px;right:30px;opacity:0;transition:all .3s ease,transform .4s cubic-bezier(.68,-.55,.27,1.55),opacity .3s cubic-bezier(.68,-.55,.27,1.55);pointer-events:none}.config-button.active[data-v-735d07b2]{transform:translateY(-11px) translateX(-75px);opacity:1}.sign-out-button[data-v-735d07b2]{position:fixed;bottom:50px;right:30px;opacity:0;transition:all .3s ease,transform .4s cubic-bezier(.68,-.55,.27,1.55),opacity .3s cubic-bezier(.68,-.55,.27,1.55);pointer-events:none}.sign-out-button.active[data-v-735d07b2]{transform:translateY(42px) translateX(-68px);opacity:1}@media (min-width:768px){.compress-button[data-v-735d07b2]:hover{transform:translateY(-77px)}.link-button[data-v-735d07b2]:hover{transform:translateY(-60px) translateX(-52px)}.config-button[data-v-735d07b2]:hover{transform:translateY(-12px) translateX(-77px)}.sign-out-button[data-v-735d07b2]:hover{transform:translateY(44px) translateX(-70px)}.compress-icon[data-v-735d07b2]:hover{animation:scale-735d07b2 .5s ease-in-out}.config-icon[data-v-735d07b2]:hover{animation:spin-735d07b2 .5s ease-in-out}.link-icon[data-v-735d07b2]:hover{animation:rotate-shake-735d07b2 .5s ease-in-out}.sign-out-icon[data-v-735d07b2]:hover{animation:shake-735d07b2 .5s ease-in-out}}[data-v-735d07b2] .el-dialog{border-radius:12px;background-color:var(--dialog-bg-color);backdrop-filter:blur(10px);box-shadow:var(--dialog-box-shadow)}.dialog-action[data-v-735d07b2]{display:flex;justify-content:center;margin-top:20px}.header[data-v-735d07b2]{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-735d07b2]{font-size:2.5rem;font-weight:400;font-family:Righteous,Noto Sans SC,sans-serif;position:relative;padding-bottom:8px;cursor:pointer;transition:all .4s cubic-bezier(.4,0,.2,1);animation:float-735d07b2 4s ease-in-out infinite;letter-spacing:3px}.title[data-v-735d07b2]:hover{transform:scale(1.08) translateY(-3px);filter:drop-shadow(0 0 20px var(--el-upload-dragger-uniform-color))}.title[data-v-735d07b2]:after{content:"";position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:0;height:3px;background:linear-gradient(90deg,transparent,var(--el-upload-dragger-uniform-color),transparent);border-radius:3px;transition:width .5s cubic-bezier(.4,0,.2,1);box-shadow:0 0 10px var(--el-upload-dragger-uniform-color)}.title[data-v-735d07b2]:hover:after{width:80%}.main-title[data-v-735d07b2]{background:var(--upload-main-title-color);background-size:200% auto;background-clip:text;-webkit-background-clip:text;color:transparent;text-decoration:none;display:inline-block;animation:titleShimmer-735d07b2 3s ease-in-out infinite;position:relative;filter:drop-shadow(0 0 8px rgba(255,255,255,.3))}.title:hover .main-title[data-v-735d07b2]{animation:titleShimmer-735d07b2 1s ease-in-out infinite;filter:brightness(1.2)}@keyframes float-735d07b2{0%,to{transform:translateY(0)}50%{transform:translateY(-5px)}}@keyframes titleShimmer-735d07b2{0%{background-position:200%}to{background-position:-200%}}@media (max-width:768px){.title[data-v-735d07b2]{font-size:1.8rem;letter-spacing:1px}.title[data-v-735d07b2]:hover{transform:scale(1.05) translateY(-2px)}}.upload-home[data-v-735d07b2]{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:94vh;background-color:var(--admin-container-bg-color)}.upload[data-v-735d07b2]{margin-bottom:5px;position:relative;top:-3vh}.question-icon[data-v-735d07b2]{margin:0 3px}.compress-slider[data-v-735d07b2]{width:80%;margin:0 auto}.footer[data-v-735d07b2]{height:6vh} \ No newline at end of file diff --git a/css/280.6f363073.css.gz b/css/280.6f363073.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..10d8f4e568a45721da833aae1bf0ce43cbc0c420 GIT binary patch literal 12809 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 bL2#QK>bip(@aX0D*W3RG6NExmOho|zLoxkE literal 0 HcmV?d00001 diff --git a/functions/api/huggingface/commitUpload.js b/functions/api/huggingface/commitUpload.js index 1b41125..09ace16 100644 --- a/functions/api/huggingface/commitUpload.js +++ b/functions/api/huggingface/commitUpload.js @@ -90,6 +90,7 @@ export async function onRequestPost(context) { Channel: "HuggingFace", ChannelName: hfChannel.name || "HuggingFace_env", FileSize: (fileSize / 1024 / 1024).toFixed(2), + FileSizeBytes: fileSize, HfRepo: hfChannel.repo, HfFilePath: filePath, HfToken: hfChannel.token, diff --git a/functions/upload/index.js b/functions/upload/index.js index 428e5f2..a4818fb 100644 --- a/functions/upload/index.js +++ b/functions/upload/index.js @@ -139,11 +139,8 @@ async function processFileUpload(context, formdata = null) { let imageDimensions = null; if (fileType.startsWith('image/')) { try { - // JPEG 需要更多数据(EXIF 可能很大),其他格式 512 字节足够 - const lowerType = fileType.toLowerCase(); - const isJpeg = lowerType === 'image/jpeg' || lowerType === 'image/jpg' || lowerType === 'image/pjpeg'; - const readSize = isJpeg ? 65536 : 512; - const headerBuffer = await file.slice(0, readSize).arrayBuffer(); + // 统一读取 64KB,足以覆盖 JPEG 的 EXIF 数据和其他格式 + const headerBuffer = await file.slice(0, 65536).arrayBuffer(); imageDimensions = getImageDimensions(headerBuffer, fileType); } catch (error) { console.error('Error reading image dimensions:', error); @@ -287,16 +284,12 @@ async function uploadFileToCloudflareR2(context, fullId, metadata, returnLink) { const R2DataBase = env.img_r2; - // 写入R2数据库,获取实际存储大小 - const r2Object = await R2DataBase.put(fullId, formdata.get('file')); + // 写入R2数据库 + await R2DataBase.put(fullId, formdata.get('file')); // 更新metadata metadata.Channel = "CloudflareR2"; metadata.ChannelName = r2Channel.name || "R2_env"; - // 使用 R2 返回的实际文件大小 - if (r2Object && r2Object.size) { - metadata.FileSize = (r2Object.size / 1024 / 1024).toFixed(2); - } // 图像审查,采用R2的publicUrl const R2PublicUrl = r2Channel.publicUrl; @@ -782,7 +775,6 @@ async function uploadFileToHuggingFace(context, fullId, metadata, returnLink) { // 更新 metadata metadata.Channel = "HuggingFace"; metadata.ChannelName = hfChannel.name || "HuggingFace_env"; - metadata.FileSize = (file.size / 1024 / 1024).toFixed(2); metadata.HfRepo = hfChannel.repo; metadata.HfFilePath = hfFilePath; metadata.HfToken = hfChannel.token; diff --git a/index.html b/index.html index 56d9342..f1245c7 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Sanyue ImgHub
\ No newline at end of file +Sanyue ImgHub
\ No newline at end of file diff --git a/index.html.gz b/index.html.gz index 1d7449028d1e722d9799e6f5fb28cb2a95fc490c..66e007849b0ac5bd8b5e221150ca016b1602fce0 100644 GIT binary patch literal 511 zcmVBawRJ1UD!iJUkaxw2(S^GQWTzA%KOk>RH(l9m@y67W^Y$_ zD(zn>15KV{Dc(2Rdb?a+Ix(1ZbUnKx^3lw_3e$ja*R@}U8Zx+rjts^Cjq?bW61&hs z?-e%`yGzDBP6vu6y`Wp1`4$%}3viukpM=`eU?4F?^?dAVU`z1@@pmUG$&Ni%7s6#R zC*^Dr3^o{#mK%%$Qq-j=9#Wz05cb)K!B9;3&H8$^Td!{Nha@Ul%+R+eRNv?8-N)s% zQTiG1w4(D$bb8)xyZNv|v%Sf6N@Ct*;>lyOh%8>BkBv6Cx?b*T^BSg@FTW-;RWi_{ z1CA8h>L*@BghVk;P!A00G_l{VYwb{jAxzrNYrVY>~oL|bZP z(UWKg{`(nwBBcIJYsxXfT4}JG#Y#@Vs=*eIV&^nJ`DX|M3 z3|?_du|H+p;=H41(kr^vk#BXvvI5tu?nS6QjRq1^ROe$?BU_5Eh`&2gOLpwBJ`pa9 zB`Ft+V6erwx7=bBkfN?c@stW}$FR*N42ELL@2;-P+pF>}e@dd3#R7egLJdP+-jpSl z%A5fYD>|-3r}J)`_01a1<}TMMiDi?CXOGDuvUrW&H(FzPeREzvmGBsYV_-V$$AuAdSsc5{;=d5%CUE9(;Cr>kO|>i*wZ-8h{{{2Yo;uhA007ab B@XP=J diff --git a/js/23.180d02c4.js b/js/23.180d02c4.js deleted file mode 100644 index 7b8bb03..0000000 --- a/js/23.180d02c4.js +++ /dev/null @@ -1,2 +0,0 @@ -(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[23],{200:function(e,t,o){"use strict";o(5331)},213:function(e,t,o){"use strict";o(5331),o(9104)},333:function(e,t,o){"use strict";o(5331),o(6711)},670:function(e,t,o){"use strict";o(5331),o(9648),o(9104),o(5970)},1393:function(e,t,o){o(6573),o(8100),o(7936),o(9577),o(1549),o(9797),o(9631),o(5623),o(4979),o(4603),o(7566),o(8721),function(t,o){e.exports=o()}(0,function(){return function(e){var t={};function o(s){if(t[s])return t[s].exports;var l=t[s]={i:s,l:!1,exports:{}};return e[s].call(l.exports,l,l.exports,o),l.l=!0,l.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 l in e)o.d(s,l,function(t){return e[t]}.bind(null,l));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 l(e){return["image/png","image/jpeg","image/gif"].some(t=>t===e)}o.r(t),o.d(t,"canvastoDataURL",function(){return i}),o.d(t,"canvastoFile",function(){return n}),o.d(t,"dataURLtoFile",function(){return c}),o.d(t,"dataURLtoImage",function(){return d}),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 y}),o.d(t,"compressAccurately",function(){return C}),o.d(t,"EImageType",function(){return s}),function(e){e.PNG="image/png",e.JPEG="image/jpeg",e.GIF="image/gif"}(s||(s={}));var a=function(e,t,o,s){return new(o||(o=Promise))(function(l,a){function i(e){try{r(s.next(e))}catch(e){a(e)}}function n(e){try{r(s.throw(e))}catch(e){a(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((s=s.apply(e,t||[])).next())})};function i(e,t=.92,o=s.JPEG){return a(this,void 0,void 0,function*(){return l(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(l,a){function i(e){try{r(s.next(e))}catch(e){a(e)}}function n(e){try{r(s.throw(e))}catch(e){a(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((s=s.apply(e,t||[])).next())})};function c(e,t){return r(this,void 0,void 0,function*(){const o=e.split(",");let s=o[0].match(/:(.*?);/)[1];const a=atob(o[1]);let i=a.length;const n=new Uint8Array(i);for(;i--;)n[i]=a.charCodeAt(i);return l(t)&&(s=t),new Blob([n],{type:s})})}function d(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(l,a){function i(e){try{r(s.next(e))}catch(e){a(e)}}function n(e){try{r(s.throw(e))}catch(e){a(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,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"),l=s.getContext("2d");let a,i;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;i=e.width*t,a=e.height*t}else i=o.width||o.height*e.width/e.height||e.width,a=o.height||o.width*e.height/e.width||e.height;switch([5,6,7,8].some(e=>e===o.orientation)?(s.height=i,s.width=a):(s.height=a,s.width=i),o.orientation){case 3:l.rotate(180*Math.PI/180),l.drawImage(e,-s.width,-s.height,s.width,s.height);break;case 6:l.rotate(90*Math.PI/180),l.drawImage(e,0,-s.width,s.height,s.width);break;case 8:l.rotate(270*Math.PI/180),l.drawImage(e,-s.height,0,s.height,s.width);break;case 2:l.translate(s.width,0),l.scale(-1,1),l.drawImage(e,0,0,s.width,s.height);break;case 4:l.translate(s.width,0),l.scale(-1,1),l.rotate(180*Math.PI/180),l.drawImage(e,-s.width,-s.height,s.width,s.height);break;case 5:l.translate(s.width,0),l.scale(-1,1),l.rotate(90*Math.PI/180),l.drawImage(e,0,-s.width,s.height,s.width);break;case 7:l.translate(s.width,0),l.scale(-1,1),l.rotate(270*Math.PI/180),l.drawImage(e,-s.height,0,s.height,s.width);break;default:l.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 b=function(e,t,o,s){return new(o||(o=Promise))(function(l,a){function i(e){try{r(s.next(e))}catch(e){a(e)}}function n(e){try{r(s.throw(e))}catch(e){a(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((s=s.apply(e,t||[])).next())})};function y(e,t={}){return b(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 a=o.split(",")[0].match(/:(.*?);/)[1],n=s.JPEG;l(t.type)&&(n=t.type,a=t.type);const r=yield d(o),u=yield m(r,Object.assign({},t)),h=yield i(u,t.quality,n),g=yield c(h,a);return g.size>e.size?e:g})}function C(e,t={}){return b(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,a=1024*t.size,n=t.size*t.accuracy*1024,r=yield p(e);let u=r.split(",")[0].match(/:(.*?);/)[1],h=s.JPEG;l(t.type)&&(h=t.type,u=t.type);const g=yield d(r),f=yield m(g,Object.assign({},t));let b,y=.5;const C=[null,null];for(let e=1;e<=7;e++){b=yield i(f,y,h);const t=.75*b.length;if(7===e){(ot)&&(b=[b,...C].filter(e=>e).sort((e,t)=>Math.abs(.75*e.length-a)-Math.abs(.75*t.length-a))[0]);break}if(ot))break;C[0]=b,y+=Math.pow(.5,e+1)}}const k=yield c(b,u);return k.size>e.size?e:k})}}])})},2388:function(e,t,o){"use strict";function s(e){if(!e||""===e.trim())return{valid:!0};if("/"===e)return{valid:!0};if(!e.startsWith("/"))return{valid:!1,error:'目标目录必须以 "/" 开头'};const t=/[\\:\*\?"'<>\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;return t.test(e)?{valid:!1,error:"目标目录包含非法字符,请使用合法的路径格式"}:e.includes("//")?{valid:!1,error:"目标目录不能包含连续的斜杠"}:{valid:!0}}o.d(t,{G:function(){return s}})},2893:function(e,t,o){"use strict";o(5331)},3597:function(e,t,o){"use strict";o(5331)},4396:function(e,t,o){"use strict";o(5331),o(4885)},4885:function(e,t,o){"use strict";o(5331)},5385:function(e,t,o){"use strict";o(5331)},5616:function(e,t,o){"use strict";o(5331),o(7197)},5970:function(e,t,o){"use strict";o(5331)},6334:function(e,t,o){e.exports=o(1393)},6682:function(e,t,o){"use strict";e.exports=o.p+"img/404.8ed11fb3.png"},6808:function(e,t,o){"use strict";o(5331),o(8785),o(200),o(5970),o(9104)},8075:function(e,t,o){"use strict";o(5331)},8785:function(e,t,o){"use strict";o(5331)},8830:function(e,t,o){"use strict";o(5331)},9104:function(e,t,o){"use strict";o(5331)},9811:function(e,t,o){"use strict";o.r(t),o.d(t,{default:function(){return Nt}});var s=o(8507),l=(o(5331),o(213),o(47)),a=(o(9648),o(6768)),i=o(4232);const n={class:"history-header"},r={class:"header-left"},c={class:"record-count"},d={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"],b={key:2,class:"file-icon-wrapper"},y={class:"grid-overlay"},C={class:"grid-actions"},k={class:"grid-info"},v=["title"],w={class:"upload-time"},F={key:1,class:"list-view"},L={class:"list-preview"},U=["src"],x=["src"],S={key:2,class:"file-icon-wrapper-small"},T={class:"list-info"},M=["title"],$=["title"],_={class:"list-meta"},E={class:"upload-time"},R={class:"list-actions"},A={key:0,class:"load-more-container"},I={key:0,class:"loading-indicator"},P={key:1,class:"load-more-hint"},N={key:1,class:"no-more-hint"},V={key:1,class:"empty-state"};function z(e,t,o,z,D,B){const W=(0,a.g2)("font-awesome-icon"),H=l.S2,j=s.R7;return(0,a.uX)(),(0,a.CE)("div",{class:(0,i.C4)(["history-container",{active:o.show}])},[(0,a.Lk)("div",n,[(0,a.Lk)("div",r,[t[4]||(t[4]=(0,a.Lk)("h2",null,"历史记录",-1)),(0,a.Lk)("span",c,"共 "+(0,i.v_)(D.totalCount)+" 条",1)]),(0,a.Lk)("div",d,[(0,a.bF)(j,{content:"切换视图",placement:"bottom"},{default:(0,a.k6)(()=>[(0,a.bF)(H,{circle:"",onClick:B.toggleViewMode},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"grid"===D.viewMode?"list":"th-large"},null,8,["icon"])]),_:1},8,["onClick"])]),_:1}),(0,a.bF)(j,{content:"清空记录",placement:"bottom"},{default:(0,a.k6)(()=>[(0,a.bF)(H,{circle:"",type:"danger",onClick:B.clearHistory},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"trash-alt"})]),_:1},8,["onClick"])]),_:1}),(0,a.bF)(H,{circle:"",onClick:t[0]||(t[0]=t=>e.$emit("close"))},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"times"})]),_:1})])]),D.historyList.length>0?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"history-content",ref:"historyContent",onScroll:t[3]||(t[3]=(...e)=>B.handleScroll&&B.handleScroll(...e))},[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(B.groupedHistory,e=>((0,a.uX)(),(0,a.CE)("div",{key:e.date,class:"history-group"},[(0,a.Lk)("div",u,[t[5]||(t[5]=(0,a.Lk)("div",{class:"timeline-dot"},null,-1)),(0,a.Lk)("span",p,(0,i.v_)(e.date),1)]),"grid"===D.viewMode?((0,a.uX)(),(0,a.CE)("div",h,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(e.items,e=>((0,a.uX)(),(0,a.CE)("div",{key:e.time,class:"grid-item"},[(0,a.Lk)("div",m,[B.isImage(e.name)?((0,a.uX)(),(0,a.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[1]||(t[1]=(...e)=>B.handleImageError&&B.handleImageError(...e))},null,40,g)):B.isVideo(e.name)?((0,a.uX)(),(0,a.CE)("video",{key:1,src:e.url,muted:""},null,8,f)):((0,a.uX)(),(0,a.CE)("div",b,[(0,a.bF)(W,{icon:"file",class:"file-icon"})])),(0,a.Lk)("div",y,[(0,a.Lk)("div",C,[(0,a.bF)(H,{circle:"",size:"default",type:"primary",onClick:t=>B.copyLink(e.url)},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"copy"})]),_:1},8,["onClick"]),(0,a.bF)(H,{circle:"",size:"default",class:"action-btn-view",onClick:t=>B.openLink(e.url)},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,a.bF)(H,{circle:"",size:"default",type:"danger",onClick:t=>B.deleteItem(e)},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"trash-alt"})]),_:1},8,["onClick"])])])]),(0,a.Lk)("div",k,[(0,a.Lk)("div",{class:"file-name",title:e.name},(0,i.v_)(e.name),9,v),(0,a.Lk)("div",w,(0,i.v_)(B.formatTime(e.time)),1)])]))),128))])):((0,a.uX)(),(0,a.CE)("div",F,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(e.items,e=>((0,a.uX)(),(0,a.CE)("div",{key:e.time,class:"list-item"},[(0,a.Lk)("div",L,[B.isImage(e.name)?((0,a.uX)(),(0,a.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[2]||(t[2]=(...e)=>B.handleImageError&&B.handleImageError(...e))},null,40,U)):B.isVideo(e.name)?((0,a.uX)(),(0,a.CE)("video",{key:1,src:e.url,muted:""},null,8,x)):((0,a.uX)(),(0,a.CE)("div",S,[(0,a.bF)(W,{icon:"file"})]))]),(0,a.Lk)("div",T,[(0,a.Lk)("div",{class:"file-name",title:e.name},(0,i.v_)(e.name),9,M),(0,a.Lk)("div",{class:"file-url",title:e.url},(0,i.v_)(e.url),9,$)]),(0,a.Lk)("div",_,[(0,a.Lk)("div",E,(0,i.v_)(B.formatTime(e.time)),1)]),(0,a.Lk)("div",R,[(0,a.bF)(H,{circle:"",size:"small",type:"primary",onClick:t=>B.copyLink(e.url)},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"copy"})]),_:1},8,["onClick"]),(0,a.bF)(H,{circle:"",size:"small",class:"action-btn-view",onClick:t=>B.openLink(e.url)},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,a.bF)(H,{circle:"",size:"small",type:"danger",onClick:t=>B.deleteItem(e)},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"trash-alt"})]),_:1},8,["onClick"])])]))),128))]))]))),128)),B.hasMore?((0,a.uX)(),(0,a.CE)("div",A,[D.loadingMore?((0,a.uX)(),(0,a.CE)("div",I,[(0,a.bF)(W,{icon:"spinner",spin:""}),t[6]||(t[6]=(0,a.Lk)("span",null,"加载中...",-1))])):((0,a.uX)(),(0,a.CE)("div",P,"下拉加载更多"))])):D.historyList.length>0?((0,a.uX)(),(0,a.CE)("div",N,"没有更多记录了")):(0,a.Q3)("",!0)],544)):((0,a.uX)(),(0,a.CE)("div",V,[(0,a.bF)(W,{icon:"history",class:"empty-icon"}),t[7]||(t[7]=(0,a.Lk)("p",null,"暂无上传记录",-1))]))],2)}o(4114),o(8111),o(2489),o(7588),o(1701),o(3110),o(8335);var D={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,l=t.clientHeight;s-o-l<100&&this.loadMore()},toggleViewMode(){this.viewMode="grid"===this.viewMode?"list":"grid",localStorage.setItem("historyViewMode",this.viewMode)},clearHistory(){this.$confirm("确定要清空所有上传记录吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{this.historyList=[],this.allHistory=[],this.totalCount=0,this.currentPage=0,localStorage.removeItem("uploadHistory"),this.$message.success("记录已清空")}).catch(()=>{})},deleteItem(e){this.$confirm("确定要删除这条记录吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",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("记录已删除")}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"),l=String(t.getDate()).padStart(2,"0"),a=String(t.getHours()).padStart(2,"0"),i=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return`${o}-${s}-${l} ${a}:${i}:${n}`},copyLink(e){navigator.clipboard.writeText(e).then(()=>{this.$message.success("链接已复制")}).catch(()=>{this.$message.error("复制失败")})},openLink(e){window.open(e,"_blank")},handleImageError(e){e.target.src=o(6682)}}},B=o(1241);const W=(0,B.A)(D,[["render",z],["__scopeId","data-v-3ea1d874"]]);var H=W,j=o(6975),X=o(1418),O=(o(333),o(4757)),Q=o(6018),q=(o(6808),o(200),o(9267)),G=(o(5616),o(5558)),J=(o(8075),o(6810)),K=(o(4396),o(4885),o(8559)),Y=(o(5970),o(9655)),Z=(o(2893),o(2086)),ee=(o(670),o(8830),o(3597),o(4253)),te=o(683),oe=(o(5385),o(9623)),se=(o(6711),o(7358)),le=o(813);o(4896);const ae={class:"upload-form"},ie={class:"upload-card-glow",ref:"uploadCardGlow"},ne={key:0,class:"upload-card"},re={class:"paste-card-actions"},ce={class:"upload-list-dashboard-action"},de={class:"modern-action-group"},ue={class:"modern-dropdown-item-content"},pe={class:"modern-action-btn modern-action-btn-danger"},he=["href"],me={key:0,style:{width:"10vw","border-radius":"12px"},autoplay:"",muted:"",playsinline:"",loop:""},ge=["src"],fe=["src","onError"],be={key:2,style:{width:"10vw","border-radius":"12px"}},ye={class:"upload-list-item-content"},Ce={class:"upload-list-item-name-wrapper"},ke={key:0,class:"upload-list-item-url"},ve={class:"upload-list-item-url-row"},we={class:"upload-list-item-url-row"},Fe={key:1,class:"upload-list-item-progress"},Le={class:"upload-list-item-action"},Ue=["onClick"],xe=["onClick"];function Se(e,t,n,r,c,d){const u=(0,a.g2)("CameraFilled"),p=le.tk,h=se.j5,m=oe.WK,g=l.S2,f=J.Zh,b=J.MQ,y=te.Ik,C=(0,a.g2)("List"),k=(0,a.g2)("Checked"),v=(0,a.g2)("Failed"),w=ee.$g,F=(0,a.g2)("font-awesome-icon"),L=s.R7,U=G.qi,x=Z.c6,S=Z.Iy,T=Z.dW,M=Y.ve,$=(0,a.g2)("Link"),_=(0,a.g2)("Delete"),E=K.kA;return(0,a.uX)(),(0,a.CE)("div",ae,[(0,a.Lk)("div",{class:"upload-card-wrapper",onMousemove:t[0]||(t[0]=(...e)=>d.handleUploadCardMouseMove&&d.handleUploadCardMouseMove(...e)),onMouseleave:t[1]||(t[1]=(...e)=>d.handleUploadCardMouseLeave&&d.handleUploadCardMouseLeave(...e))},[(0,a.Lk)("div",ie,null,512),"default"===n.uploadMethod?((0,a.uX)(),(0,a.Wv)(h,{key:0,class:(0,i.C4)(["upload-card",{"is-uploading":c.uploading,"upload-card-busy":c.fileList.length}]),drag:"",multiple:"","http-request":d.uploadFile,onSuccess:d.handleSuccess,"on-error":d.handleError,"before-upload":d.beforeUpload,"on-progress":d.handleProgress,"file-list":c.fileList,"show-file-list":!1},{default:(0,a.k6)(()=>[(0,a.bF)(p,{class:(0,i.C4)(["el-icon--upload",{"upload-list-busy":c.fileList.length}])},{default:(0,a.k6)(()=>[(0,a.bF)(u)]),_:1},8,["class"]),(0,a.Lk)("div",{class:(0,i.C4)(["el-upload__text",{"upload-list-busy":c.fileList.length}])},[...t[7]||(t[7]=[(0,a.Lk)("em",null,"拖拽",-1),(0,a.eW)(),(0,a.Lk)("em",null,"点击",-1),(0,a.eW)(" 或 ",-1),(0,a.Lk)("em",null,"Ctrl + V",-1),(0,a.eW)(" 粘贴上传",-1)])],2)]),_:1},8,["class","http-request","onSuccess","on-error","before-upload","on-progress","file-list"])):(0,a.Q3)("",!0)],32),"paste"===n.uploadMethod?((0,a.uX)(),(0,a.CE)("div",ne,[(0,a.bF)(y,{class:(0,i.C4)(["paste-card",{"is-uploading":c.uploading,"upload-card-busy":c.fileList.length}])},{default:(0,a.k6)(()=>[(0,a.bF)(m,{modelValue:c.pastedUrls,"onUpdate:modelValue":t[2]||(t[2]=e=>c.pastedUrls=e),class:"upload-card-textarea",placeholder:"粘贴外链上传,多个外链用换行分隔",type:"textarea",rows:c.fileList.length?4:14},null,8,["modelValue","rows"]),(0,a.Lk)("div",re,[(0,a.bF)(g,{class:"paste-card-upload-button",type:"primary",size:d.pasteCardMethodButtonSize,onClick:d.handleUploadPasteUrls},{default:(0,a.k6)(()=>[...t[8]||(t[8]=[(0,a.eW)(" 上 传 ",-1)])]),_:1},8,["size","onClick"]),(0,a.bF)(b,{modelValue:c.pasteUploadMethod,"onUpdate:modelValue":t[3]||(t[3]=e=>c.pasteUploadMethod=e),class:"paste-card-method-group",size:d.pasteCardMethodButtonSize},{default:(0,a.k6)(()=>[(0,a.bF)(f,{label:"save"},{default:(0,a.k6)(()=>[...t[9]||(t[9]=[(0,a.eW)("转存",-1)])]),_:1}),(0,a.bF)(f,{label:"external"},{default:(0,a.k6)(()=>[...t[10]||(t[10]=[(0,a.eW)("外链",-1)])]),_:1})]),_:1},8,["modelValue","size"])])]),_:1},8,["class"])])):(0,a.Q3)("",!0),(0,a.bF)(y,{class:(0,i.C4)(["upload-list-card",{"upload-list-busy":c.fileList.length,"is-uploading":c.uploading}])},{default:(0,a.k6)(()=>[(0,a.Lk)("div",{class:(0,i.C4)(["upload-list-container",{"upload-list-busy":c.fileList.length}])},[(0,a.bF)(E,{onScroll:d.handleScroll,ref:"scrollContainer"},{default:(0,a.k6)(()=>[(0,a.Lk)("div",{class:(0,i.C4)(["upload-list-dashboard",{"list-scrolled":c.listScrolled}])},[(0,a.bF)(w,{class:"upload-list-dashboard-title"},{default:(0,a.k6)(()=>[(0,a.bF)(p,null,{default:(0,a.k6)(()=>[(0,a.bF)(C)]),_:1}),(0,a.eW)((0,i.v_)(d.uploadingCount+d.waitingCount)+" ",1),(0,a.bF)(p,null,{default:(0,a.k6)(()=>[(0,a.bF)(k)]),_:1}),(0,a.eW)((0,i.v_)(d.uploadSuccessCount)+" ",1),(0,a.bF)(p,null,{default:(0,a.k6)(()=>[(0,a.bF)(v)]),_:1}),(0,a.eW)((0,i.v_)(d.uploadErrorCount),1)]),_:1}),(0,a.Lk)("div",ce,[(0,a.Lk)("div",de,[(0,a.bF)(L,{disabled:d.disableTooltip,content:"整体复制",placement:"top"},{default:(0,a.k6)(()=>[(0,a.Lk)("button",{class:"modern-action-btn",onClick:t[4]||(t[4]=(...e)=>d.copyAll&&d.copyAll(...e))},[(0,a.bF)(F,{icon:"copy"})])]),_:1},8,["disabled"]),(0,a.bF)(L,{disabled:d.disableTooltip,content:"失败重试",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(T,null,{dropdown:(0,a.k6)(()=>[(0,a.bF)(S,{class:"modern-dropdown-menu"},{default:(0,a.k6)(()=>[(0,a.bF)(x,null,{default:(0,a.k6)(()=>[(0,a.Lk)("div",ue,[t[11]||(t[11]=(0,a.Lk)("span",null,"自动重试",-1)),(0,a.bF)(U,{modelValue:c.autoReUpload,"onUpdate:modelValue":t[6]||(t[6]=e=>c.autoReUpload=e),onChange:d.handleAutoRetryChange,size:"small"},null,8,["modelValue","onChange"])])]),_:1})]),_:1})]),default:(0,a.k6)(()=>[(0,a.Lk)("button",{class:"modern-action-btn",onClick:t[5]||(t[5]=(...e)=>d.retryError&&d.retryError(...e))},[(0,a.bF)(F,{icon:"redo"})])]),_:1})]),_:1},8,["disabled"]),(0,a.bF)(L,{disabled:d.disableTooltip,content:"清空列表",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(T,null,{dropdown:(0,a.k6)(()=>[(0,a.bF)(S,{class:"modern-dropdown-menu"},{default:(0,a.k6)(()=>[(0,a.bF)(x,{onClick:d.clearFileList},{default:(0,a.k6)(()=>[...t[12]||(t[12]=[(0,a.eW)("清空全部",-1)])]),_:1},8,["onClick"]),(0,a.bF)(x,{onClick:d.clearSuccessList},{default:(0,a.k6)(()=>[...t[13]||(t[13]=[(0,a.eW)("清空已上传",-1)])]),_:1},8,["onClick"])]),_:1})]),default:(0,a.k6)(()=>[(0,a.Lk)("button",pe,[(0,a.bF)(F,{icon:"trash-alt"})])]),_:1})]),_:1},8,["disabled"])])])],2),((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(c.fileList.slice().reverse(),e=>((0,a.uX)(),(0,a.CE)("div",{class:"upload-list-item",key:e.name,span:8},[(0,a.Lk)("a",{href:e.url,target:"_blank",class:"upload-list-item-preview"},[d.isVideo(e.name)?((0,a.uX)(),(0,a.CE)("video",me,[(0,a.Lk)("source",{src:e.url,type:"video/mp4"},null,8,ge),t[14]||(t[14]=(0,a.eW)(" Your browser does not support the video tag. ",-1))])):d.isImage(e.name)?((0,a.uX)(),(0,a.CE)("img",{key:1,style:{width:"10vw","border-radius":"12px"},src:e.url,onError:t=>e.url=o(6682)},null,40,fe)):((0,a.uX)(),(0,a.CE)("div",be,[(0,a.bF)(F,{icon:"file",class:"file-icon"})]))],8,he),(0,a.Lk)("div",ye,[(0,a.Lk)("div",Ce,[(0,a.bF)(w,{class:"upload-list-item-name",truncated:""},{default:(0,a.k6)(()=>[(0,a.eW)((0,i.v_)(d.truncateFilename(e.name)),1)]),_:2},1024)]),"done"===e.status?((0,a.uX)(),(0,a.CE)("div",ke,[(0,a.Lk)("div",ve,[(0,a.bF)(m,{modelValue:e.finalURL,"onUpdate:modelValue":t=>e.finalURL=t,readonly:"",onClick:d.selectAllText,size:d.urlSize},{prepend:(0,a.k6)(()=>[...t[15]||(t[15]=[(0,a.eW)("URL",-1)])]),_:1},8,["modelValue","onUpdate:modelValue","onClick","size"]),(0,a.bF)(m,{modelValue:e.mdURL,"onUpdate:modelValue":t=>e.mdURL=t,readonly:"",onClick:d.selectAllText,size:d.urlSize},{prepend:(0,a.k6)(()=>[...t[16]||(t[16]=[(0,a.eW)("MarkDown",-1)])]),_:1},8,["modelValue","onUpdate:modelValue","onClick","size"])]),(0,a.Lk)("div",we,[(0,a.bF)(m,{modelValue:e.htmlURL,"onUpdate:modelValue":t=>e.htmlURL=t,readonly:"",onClick:d.selectAllText,size:d.urlSize},{prepend:(0,a.k6)(()=>[...t[17]||(t[17]=[(0,a.eW)("HTML",-1)])]),_:1},8,["modelValue","onUpdate:modelValue","onClick","size"]),(0,a.bF)(m,{modelValue:e.ubbURL,"onUpdate:modelValue":t=>e.ubbURL=t,readonly:"",onClick:d.selectAllText,size:d.urlSize},{prepend:(0,a.k6)(()=>[...t[18]||(t[18]=[(0,a.eW)("BBCode",-1)])]),_:1},8,["modelValue","onUpdate:modelValue","onClick","size"])])])):((0,a.uX)(),(0,a.CE)("div",Fe,[(0,a.bF)(M,{percentage:e.progreess,status:e.status,"show-text":!1},null,8,["percentage","status"])]))]),(0,a.Lk)("div",Le,[(0,a.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-primary",onClick:t=>d.handleCopy(e)},[(0,a.bF)(p,null,{default:(0,a.k6)(()=>[(0,a.bF)($)]),_:1})],8,Ue),(0,a.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-danger",onClick:t=>d.handleRemove(e)},[(0,a.bF)(p,null,{default:(0,a.k6)(()=>[(0,a.bF)(_)]),_:1})],8,xe)])]))),128))]),_:1},8,["onScroll"])],2)]),_:1},8,["class"])])}o(6573),o(8100),o(7936),o(116),o(8237),o(9577),o(1549),o(9797),o(9631),o(5623),o(4979),o(4603),o(7566),o(8721);var Te=o(457),Me=o(6334),$e=o(8401),_e={name:"UploadForm",props:{selectedUrlForm:{type:String,default:"url",required:!1},customerCompress:{type:Boolean,default:!0,required:!1},compressQuality:{type:Number,default:4,required:!1},compressBar:{type:Number,default:5,required:!1},serverCompress:{type:Boolean,default:!0,required:!1},uploadChannel:{type:String,default:"telegram",required:!1},channelName:{type:String,default:"",required:!1},uploadNameType:{type:String,default:"default",required:!1},useCustomUrl:{type:String,default:"false",required:!1},customUrlPrefix:{type:String,default:"",required:!1},autoRetry:{type:Boolean,default:!0,required:!1},urlPrefix:{type:String,default:"",required:!1},uploadMethod:{type:String,default:"default",required:!1},uploadFolder:{type:String,default:"",required:!1},convertToWebp:{type:Boolean,default:!1,required:!1}},data(){return{fileList:[],uploading:!1,maxUploading:6,exceptionList:[],listScrolled:!1,fileListLength:0,uploadCount:0,pastedUrls:"",pasteUploadMethod:"save",autoReUpload:!0,maxRetryCount:10,retryTimer:null,retryDelay:12e3,uploadQueue:[],activeUploads:0,maxConcurrentUploads:6,abortControllers:new Map}},watch:{fileList:{handler(){this.fileList.length>this.fileListLength&&this.$nextTick(()=>{setTimeout(()=>{this.$refs.scrollContainer&&this.$refs.scrollContainer.setScrollTop(0)},100)}),this.fileListLength=this.fileList.length},deep:!0},useCustomUrl:{handler(){"true"===this.useCustomUrl?this.fileList.forEach(e=>{"external"!==e.uploadChannel&&(e.finalURL=this.customUrlPrefix+e.srcID,e.mdURL=`![${e.name}](${this.customUrlPrefix+e.srcID})`,e.htmlURL=`${e.name}`,e.ubbURL=`[img]${this.customUrlPrefix+e.srcID}[/img]`)}):this.fileList.forEach(e=>{"external"!==e.uploadChannel&&(e.finalURL=this.rootUrl+e.srcID,e.mdURL=`![${e.name}](${this.rootUrl+e.srcID})`,e.htmlURL=`${e.name}`,e.ubbURL=`[img]${this.rootUrl+e.srcID}[/img]`)})},immediate:!0},customUrlPrefix:{handler(){"true"===this.useCustomUrl&&this.fileList.forEach(e=>{"external"!==e.uploadChannel&&(e.finalURL=this.customUrlPrefix+e.srcID,e.mdURL=`![${e.name}](${this.customUrlPrefix+e.srcID})`,e.htmlURL=`${e.name}`,e.ubbURL=`[img]${this.customUrlPrefix+e.srcID}[/img]`)})},immediate:!0},autoReUpload(e){this.$store.commit("setStoreAutoReUpload",e)}},computed:{...(0,$e.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,l;o>0?(s=e.substring(0,o),l=e.substring(o)):(s=e,l="");const a=l.length+4,i=t-a-3;return i<=0?e.substring(0,t-3)+"...":s.substring(0,i)+"..."+s.slice(-4)+l},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 l=20971520;e.file.size>l?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,l=this.autoRetry&&"external"!==s,a="external"===s?"default":this.uploadNameType,i=new AbortController;this.abortControllers.set(e.file.uid,i);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 this.computeSha256(e.file);n.append("sha256",t),console.log("SHA256 computed:",t)}catch(r){console.error("Failed to compute SHA256:",r)}(0,Te.A)({url:"/upload?serverCompress="+o+"&uploadChannel="+s+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+a+"&autoRetry="+l+"&uploadFolder="+this.uploadFolder,method:"post",data:n,withAuthCode:!0,signal:i.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 l="discord"===o?9437184:16777216,a=e.file.size,i=Math.ceil(a/l),n=t.serverCompress,r=this.autoRetry&&"external"!==o,c="external"===o?"default":this.uploadNameType;let d=null;if("huggingface"===o)try{console.log("Computing SHA256 for HuggingFace chunked upload..."),d=await this.computeSha256(e.file),console.log("SHA256 computed:",d)}catch(u){console.error("Failed to compute SHA256:",u)}try{const t=new FormData;t.append("originalFileName",e.file.name),t.append("originalFileType",e.file.type),t.append("totalChunks",i.toString());const p=await(0,Te.A)({url:"/upload?serverCompress="+n+"&uploadChannel="+o+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+c+"&autoRetry="+r+"&uploadFolder="+this.uploadFolder+"&initChunked=true",method:"post",data:t,withAuthCode:!0});if(!p.data.success)throw new Error("初始化分块上传失败: "+p.data.message);const h=p.data.uploadId;console.log("分块上传初始化成功,uploadId:",h);const m=this.fileList.find(t=>t.uid===e.file.uid);m&&(m.totalChunks=i,m.uploadId=h);const g=3,f=new Array(i).fill(0);let b=0,y=!1,C="",k=!1;const v=async t=>{if(y||k)return;const d=t*l,p=Math.min(d+l,a),m=e.file.slice(d,p),g=new FormData;g.append("file",m,`${e.file.name}.part${t.toString().padStart(3,"0")}`),g.append("chunkIndex",t.toString()),g.append("totalChunks",i.toString()),g.append("uploadId",h),g.append("originalFileName",e.file.name),g.append("originalFileType",e.file.type);let b=0;const v=3;while(b{if(y||k)return;const s=Math.round(o.loaded/o.total*100);f[t]=s;const l=Math.round(f.reduce((e,t)=>e+t,0)/i);e.onProgress({percent:l,file:e.file})}})}catch(u){if("CanceledError"===u.name||"ERR_CANCELED"===u.code)return k=!0,void console.log("分块上传已取消:",e.file.name);if(b++,console.warn(`分块 ${t+1}/${i} 上传失败 (重试 ${b}/${v}):`,u),b>=v)throw y=!0,C=`分块 ${t+1}/${i} 上传失败: ${u.message}`,new Error(C);await new Promise(e=>setTimeout(e,2e3*b))}}},w=[];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)}),u.response&&401!==u.response.status?(this.exceptionList.push(e),e.onError(u,e.file)):u.response||(this.exceptionList.push(e),e.onError(u,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.truncateFilename(e.name)+"已删除"})},async cleanupUploadResources(e,t=0){try{await(0,Te.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,o.finalURL=this.rootUrl+s,o.mdURL=`![${t.name}](${this.rootUrl+s})`,o.htmlURL=`${t.name}`,o.ubbURL=`[img]${this.rootUrl+s}[/img]`,o.srcID=s}o.progreess=100,o.status="success",this.saveToHistory(o),this.$message({type:"success",message: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.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.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?("url"===this.selectedUrlForm?navigator.clipboard.writeText(e.finalURL):"md"===this.selectedUrlForm?navigator.clipboard.writeText(e.mdURL):"html"===this.selectedUrlForm?navigator.clipboard.writeText(e.htmlURL):"ubb"===this.selectedUrlForm?navigator.clipboard.writeText(e.ubbURL):navigator.clipboard.writeText(e.finalURL),this.$message({type:"success",message:"复制成功"})):this.$message({type:"warning",message:"文件未上传成功,无法复制链接"})},beforeUpload(e){return new Promise(async(t,o)=>{let s=e;const l=this.convertToWebp&&e.type.includes("image")&&!e.type.includes("webp")&&!e.type.includes("gif")&&!e.type.includes("svg");if(l)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 a=s.type.includes("image")&&this.customerCompress&&s.size/1024/1024>this.compressBar,i=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(a)Me.compressAccurately(s,1024*this.compressQuality).then(t=>{t.size/1024/1024>1024&&"telegram"===this.uploadChannel&&(this.$message.error(s.name+"压缩后文件过大,无法上传!"),o("文件过大")),this.uploading=!0;const l=new File([t],s.name,{type:t.type});l.uid=e.uid;const a=this.uploadCount++,i=this.serverCompress&&l.size/1024/1024<10&&"telegram"===this.uploadChannel;0===a?n(l,i):setTimeout(()=>{n(l,i),this.uploadCount--},300*a)}).catch(e=>{this.$message.error(s.name+"压缩失败,无法上传!"),o(e)});else if(i){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(s.name+"文件过大,无法上传!"),o("文件过大")})},handleProgress(e){const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.progreess=e.percent)},copyAll(){if("url"===this.selectedUrlForm){const e=this.fileList.map(e=>{if("done"===e.status||"success"===e.status)return e.finalURL}).join("\n");navigator.clipboard.writeText(e)}else if("md"===this.selectedUrlForm){const e=this.fileList.map(e=>{if("done"===e.status||"success"===e.status)return e.mdURL}).join("\n");navigator.clipboard.writeText(e)}else if("html"===this.selectedUrlForm){const e=this.fileList.map(e=>{if("done"===e.status||"success"===e.status)return e.htmlURL}).join("\n");navigator.clipboard.writeText(e)}else if("ubb"===this.selectedUrlForm){const e=this.fileList.map(e=>{if("done"===e.status||"success"===e.status)return e.ubbURL}).join("\n");navigator.clipboard.writeText(e)}else{const e=this.fileList.map(e=>{if("done"===e.status||"success"===e.status)return e.finalURL}).join("\n");navigator.clipboard.writeText(e)}this.$message({type:"success",message:"整体复制成功"})},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.$message({type:"info",message:"文件列表为空"})},clearSuccessList(){this.uploadSuccessCount>0?(this.fileList=this.fileList.filter(e=>"done"!==e.status&&"success"!==e.status),this.$message({type:"success",message:"成功上传文件已清空"})):this.$message({type:"info",message:"成功上传文件为空"})},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`,i=`[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:l,htmlURL:a,ubbURL:i,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)&&Te.A.post("/api/fetchRes",{url:e},{responseType:"blob"}).then(o=>{o.headers["content-type"];if(200!=o.status)throw new Error("URL地址请求失败");{const a=o.headers["content-disposition"];if(a){const e=/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/,t=/filename\*\s*=\s*UTF-8''([^;\n]*)/;let o=e.exec(a);if(null!=o&&o[1]){s=o[1].replace(/['"]/g,"");try{s=decodeURIComponent(s)}catch(l){s=""}}""===s&&(o=t.exec(a),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 l=o.pathname.split(".").pop();(!l||""===l||l.length>10)&&(l="bin"),s="PastedFile"+Date.now()+t+"."+l}const i=o.data,n=new File([i],s,{type:i.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:"粘贴板中的URL地址请求失败"})})})},selectAllText(e){navigator.clipboard.writeText(e.target.value).then(()=>{this.$message({type:"success",message:"复制成功"})}).catch(()=>{this.$message({type:"error",message:"复制失败"})})},isImage(e){const t=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp","raw","cr2","nef","dng","eps","ai","emf","wmf"],o=e.split(".").pop().toLowerCase();return t.includes(o)},isVideo(e){const t=["mp4","webm","ogg","mkv"],o=e.split(".").pop().toLowerCase();return t.includes(o)},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:"无上传失败文件"})},handleAutoRetryChange(e){this.$message({type:e?"success":"info",message:e?"自动重试已开启":"自动重试已关闭"}),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:`${e.name} 已达到最大重试次数(${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 this.computeSha256(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()),l=btoa(String.fromCharCode(...s));e.onProgress({percent:10,file:e.file}),console.log("Getting LFS upload URL...");const a=await(0,Te.A)({url:"/api/huggingface/getUploadUrl",method:"post",data:{fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,sha256:t,fileSample:l,channelName:this.channelName,uploadNameType:this.uploadNameType,uploadFolder:this.uploadFolder},withAuthCode:!0,signal:o.signal});if(!a.data.success)throw new Error(a.data.error||"Failed to get upload URL");const i=a.data;if(console.log("Upload info:",i),i.alreadyExists)console.log("File already exists in LFS, skipping upload"),e.onProgress({percent:90,file:e.file});else if(i.needsLfs&&i.uploadAction){const{href:t,header:s}=i.uploadAction;if(s?.chunk_size)await this.uploadToHuggingFaceMultipart(e,i,o);else{console.log("Uploading to S3 (basic)...");const l=await fetch(t,{method:"PUT",headers:s||{},body:e.file,signal:o.signal});if(!l.ok){const e=await l.text();throw new Error(`S3 upload failed: ${l.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,Te.A)({url:"/api/huggingface/commitUpload",method:"post",data:{fullId:i.fullId,filePath:i.filePath,sha256:t,fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,channelName:i.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:l,header:a}=s,i=parseInt(a.chunk_size),n=Object.keys(a).filter(e=>/^[0-9]+$/.test(e));console.log(`Multipart upload: ${n.length} parts, chunk size: ${i}`);const r=[],c=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*i,l=Math.min(s+i,e.file.size),n=e.file.slice(s,l);console.log(`Uploading part ${u}/${c}`);const d=await fetch(a[u],{method:"PUT",body:n,signal:o?o.signal:void 0});if(!d.ok)throw new Error(`Failed to upload part ${u}: ${d.status}`);const p=d.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)/c*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 d=await fetch(l,{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(!d.ok){const e=await d.text();throw new Error(`Multipart complete failed: ${d.status} - ${e}`)}console.log("Multipart upload complete")},async computeSha256(e){const t=this.createSha256(),o=4194304;let s=0;while(se>>>t|e<<32-t,i=o=>{const s=new Uint32Array(64);for(let e=0;e<16;e++)s[e]=o[4*e]<<24|o[4*e+1]<<16|o[4*e+2]<<8|o[4*e+3];for(let e=16;e<64;e++){const t=a(s[e-15],7)^a(s[e-15],18)^s[e-15]>>>3,o=a(s[e-2],17)^a(s[e-2],19)^s[e-2]>>>10;s[e]=s[e-16]+t+s[e-7]+o>>>0}let[l,i,n,r,c,d,u,p]=t;for(let t=0;t<64;t++){const o=a(c,6)^a(c,11)^a(c,25),h=c&d^~c&u,m=p+o+h+e[t]+s[t]>>>0,g=a(l,2)^a(l,13)^a(l,22),f=l&i^l&n^i&n,b=g+f>>>0;p=u,u=d,d=c,c=r+m>>>0,r=n,n=i,i=l,l=m+b>>>0}t[0]=t[0]+l>>>0,t[1]=t[1]+i>>>0,t[2]=t[2]+n>>>0,t[3]=t[3]+r>>>0,t[4]=t[4]+c>>>0,t[5]=t[5]+d>>>0,t[6]=t[6]+u>>>0,t[7]=t[7]+p>>>0};return{update(e){l+=e.length;let t=0;if(s>0){const l=64-s,a=Math.min(l,e.length);o.set(e.subarray(0,a),s),s+=a,t=a,64===s&&(i(o),s=0)}while(t+64<=e.length)i(e.subarray(t,t+64)),t+=64;t56&&(o.fill(0,s,64),i(o),s=0),o.fill(0,s,56);const a=new DataView(o.buffer);a.setUint32(56,Math.floor(e/4294967296),!1),a.setUint32(60,e>>>0,!1),i(o);let n="";for(let o=0;o<8;o++)n+=t[o].toString(16).padStart(8,"0");return n}}},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,l=document.createElement("canvas"),a=l.getContext("2d");s.onload=()=>{l.width=s.width,l.height=s.height,a.drawImage(s,0,0),l.toBlob(l=>{if(l){const o=e.name,s=o.lastIndexOf("."),a=s>0?o.substring(0,s)+".webp":o+".webp",i=new File([l],a,{type:"image/webp"});i.uid=e.uid,t(i)}else o(new Error("WebP 转换失败"));URL.revokeObjectURL(s.src)},"image/webp",.92)},s.onerror=()=>{URL.revokeObjectURL(s.src),o(new Error("图片加载失败"))},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,l=e.clientY-o.top;t.style.opacity="1",t.style.left=s+"px",t.style.top=l+"px"},handleUploadCardMouseLeave(){const e=this.$refs.uploadCardGlow;e&&(e.style.opacity="0")}},beforeDestroy(){this.retryTimer&&clearTimeout(this.retryTimer)}};const Ee=(0,B.A)(_e,[["render",Se],["__scopeId","data-v-6a7fc61f"]]);var Re=Ee,Ae=o(732),Ie=o(4453);const Pe={class:"container"},Ne={class:"upload-home"},Ve={href:"https://cfbed.sanyue.de/qa/",target:"_blank",class:"info-container"},ze={class:"toolbar-manage"},De={class:"toolbar"},Be={class:"header"},We={class:"title"},He={class:"main-title",href:"https://github.com/MarSeventh/CloudFlare-ImgBed",target:"_blank"},je={class:"dialog-section"},Xe={class:"section-content"},Oe={class:"dialog-section"},Qe={class:"section-header"},qe={class:"section-content"},Ge={class:"setting-item"},Je={key:0,class:"setting-item"},Ke={class:"dialog-action"},Ye={class:"dialog-section"},Ze={class:"section-content"},et={class:"setting-item"},tt={key:0,class:"setting-item"},ot={class:"setting-label"},st={class:"setting-item"},lt={class:"setting-item"},at={class:"setting-label"},it={class:"dialog-section"},nt={class:"section-content"},rt={class:"dialog-section"},ct={class:"section-header"},dt={class:"section-content"},ut={class:"setting-item"},pt={class:"setting-label"},ht={class:"setting-item"},mt={key:0,class:"setting-item slider-item"},gt={class:"setting-label"},ft={class:"slider-wrapper"},bt={class:"slider-input-wrapper"},yt={key:1,class:"setting-item slider-item"},Ct={class:"setting-label"},kt={class:"slider-wrapper"},vt={class:"slider-input-wrapper"},wt={key:0,class:"dialog-section"},Ft={class:"section-header"},Lt={class:"section-content"},Ut={class:"setting-item"},xt={class:"dialog-action"},St=["innerHTML"],Tt={class:"dialog-footer"};function Mt(e,t,o,n,r,c){const d=Ie.A,u=(0,a.g2)("font-awesome-icon"),p=s.R7,h=oe.WK,m=l.S2,g=Z.c6,f=Z.Iy,b=Z.dW,y=Ae.A,C=Re,k=J.ll,v=J.MQ,w=G.qi,F=q.kZ,L=Q.P9,U=Q.AV,x=O.B8,S=X.lq,T=j.A,M=H;return(0,a.uX)(),(0,a.CE)("div",Pe,[(0,a.Lk)("div",Ne,[(0,a.bF)(d,{class:"toggle-dark-button desktop-only"}),(0,a.bF)(p,{content:"查看文档",placement:"bottom",disabled:c.disableTooltip},{default:(0,a.k6)(()=>[(0,a.Lk)("a",Ve,[(0,a.bF)(u,{icon:"book",class:"info-icon",size:"lg"})])]),_:1},8,["disabled"]),(0,a.bF)(h,{class:(0,i.C4)(["upload-folder",{active:r.isFolderInputActive,"no-announcement":!c.announcementAvailable}]),modelValue:r.uploadFolder,"onUpdate:modelValue":t[0]||(t[0]=e=>r.uploadFolder=e),placeholder:"上传目录",onFocus:t[1]||(t[1]=e=>r.isFolderInputActive=!0),onBlur:t[2]||(t[2]=e=>r.isFolderInputActive=!1)},null,8,["class","modelValue"]),(0,a.bF)(p,{content:"切换上传方式",placement:"bottom",disabled:c.disableTooltip},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:"upload-method-button desktop-only",onClick:c.handleChangeUploadMethod},{default:(0,a.k6)(()=>["default"===r.uploadMethod?((0,a.uX)(),(0,a.Wv)(u,{key:0,icon:"folder-open",class:"upload-method-icon",size:"lg"})):"paste"===r.uploadMethod?((0,a.uX)(),(0,a.Wv)(u,{key:1,icon:"paste",class:"upload-method-icon",size:"lg"})):(0,a.Q3)("",!0)]),_:1},8,["onClick"])]),_:1},8,["disabled"]),(0,a.bF)(p,{content:"上传记录",placement:"bottom",disabled:c.disableTooltip},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:"history-button desktop-only",onClick:t[3]||(t[3]=e=>r.showHistory=!0)},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"history",class:"history-icon",size:"lg"})]),_:1})]),_:1},8,["disabled"]),c.announcementAvailable?((0,a.uX)(),(0,a.Wv)(p,{key:0,content:"查看公告",placement:"bottom",disabled:c.disableTooltip},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:"announcement-button desktop-only",onClick:c.handleShowAnnouncement},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"bullhorn",class:"announcement-icon",size:"lg"})]),_:1},8,["onClick"])]),_:1},8,["disabled"])):(0,a.Q3)("",!0),(0,a.bF)(b,{class:"mobile-more-dropdown mobile-only",trigger:"click",onCommand:c.handleMobileMenuCommand},{dropdown:(0,a.k6)(()=>[(0,a.bF)(f,null,{default:(0,a.k6)(()=>[(0,a.bF)(g,{command:"toggleTheme"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:c.getThemeIcon(),style:{"margin-right":"8px"}},null,8,["icon"]),(0,a.eW)(" "+(0,i.v_)(c.getThemeText()),1)]),_:1}),(0,a.bF)(g,{command:"toggleUploadMethod"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"default"===r.uploadMethod?"paste":"folder-open",style:{"margin-right":"8px"}},null,8,["icon"]),(0,a.eW)(" "+(0,i.v_)("default"===r.uploadMethod?"粘贴上传":"文件上传"),1)]),_:1}),(0,a.bF)(g,{command:"showHistory"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"history",style:{"margin-right":"8px"}}),t[26]||(t[26]=(0,a.eW)(" 上传记录 ",-1))]),_:1}),(0,a.bF)(g,{command:"showAnnouncement",disabled:!c.announcementAvailable},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"bullhorn",style:{"margin-right":"8px"}}),t[27]||(t[27]=(0,a.eW)(" 查看公告 ",-1))]),_:1},8,["disabled"])]),_:1})]),default:(0,a.k6)(()=>[(0,a.bF)(m,{class:"mobile-more-button"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,a.Lk)("div",ze,[(0,a.bF)(m,{class:(0,i.C4)(["toolbar-manage-button",{active:r.isToolBarOpen}]),size:"large",onClick:c.handleOpenToolbar,circle:""},{default:(0,a.k6)(()=>[r.isToolBarOpen?((0,a.uX)(),(0,a.Wv)(u,{key:1,icon:"times",class:"manage-icon",size:"lg"})):((0,a.uX)(),(0,a.Wv)(u,{key:0,icon:"bars",class:"manage-icon",size:"lg"}))]),_:1},8,["class","onClick"])]),(0,a.Lk)("div",De,[(0,a.bF)(p,{disabled:c.disableTooltip,content:"上传设置",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:(0,i.C4)(["toolbar-button compress-button",{active:r.isToolBarOpen}]),size:"large",onClick:c.openCompressDialog,circle:""},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"cloud-upload",class:"compress-icon",size:"lg"})]),_:1},8,["class","onClick"])]),_:1},8,["disabled"]),(0,a.bF)(p,{disabled:c.disableTooltip,content:"链接格式",placement:"left"},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:(0,i.C4)(["toolbar-button link-button",{active:r.isToolBarOpen}]),size:"large",onClick:c.openUrlDialog,circle:""},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"link",class:"link-icon",size:"lg"})]),_:1},8,["class","onClick"])]),_:1},8,["disabled"]),(0,a.bF)(p,{disabled:c.disableTooltip,content:"系统管理",placement:"left"},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:(0,i.C4)(["toolbar-button config-button",{active:r.isToolBarOpen}]),size:"large",onClick:c.handleManage,circle:""},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"cog",class:"config-icon",size:"lg"})]),_:1},8,["class","onClick"])]),_:1},8,["disabled"]),(0,a.bF)(p,{disabled:c.disableTooltip,content:"退出登录",placement:"left"},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:(0,i.C4)(["toolbar-button sign-out-button",{active:r.isToolBarOpen}]),size:"large",onClick:c.handleLogout,circle:""},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"sign-out-alt",class:"sign-out-icon",size:"lg"})]),_:1},8,["class","onClick"])]),_:1},8,["disabled"])]),(0,a.Lk)("div",Be,[(0,a.bF)(y,{useConfigLink:!0}),(0,a.Lk)("h1",We,[(0,a.Lk)("a",He,(0,i.v_)(c.ownerName),1),t[28]||(t[28]=(0,a.eW)(" ImgHub",-1))])]),(0,a.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:c.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,a.bF)(F,{title:"链接格式设置",modelValue:r.showUrlDialog,"onUpdate:modelValue":t[8]||(t[8]=e=>r.showUrlDialog=e),width:c.dialogWidth,"show-close":!1,class:"settings-dialog"},{default:(0,a.k6)(()=>[(0,a.Lk)("div",je,[t[33]||(t[33]=(0,a.Lk)("div",{class:"section-header"},[(0,a.Lk)("span",{class:"section-title"},"默认复制链接")],-1)),(0,a.Lk)("div",Xe,[(0,a.bF)(v,{modelValue:r.selectedUrlForm,"onUpdate:modelValue":t[4]||(t[4]=e=>r.selectedUrlForm=e),onChange:c.changeUrlForm,class:"radio-card-group grid-2x2"},{default:(0,a.k6)(()=>[(0,a.bF)(k,{value:"url",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"link",class:"radio-icon"}),t[29]||(t[29]=(0,a.Lk)("span",null,"原始链接",-1))]),_:1}),(0,a.bF)(k,{value:"md",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"code",class:"radio-icon"}),t[30]||(t[30]=(0,a.Lk)("span",null,"MarkDown",-1))]),_:1}),(0,a.bF)(k,{value:"html",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[31]||(t[31]=(0,a.Lk)("span",null,"HTML",-1))]),_:1}),(0,a.bF)(k,{value:"ubb",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[32]||(t[32]=(0,a.Lk)("span",null,"BBCode",-1))]),_:1})]),_:1},8,["modelValue","onChange"])])]),(0,a.Lk)("div",Oe,[(0,a.Lk)("div",Qe,[t[34]||(t[34]=(0,a.Lk)("span",{class:"section-title"},"自定义链接",-1)),(0,a.bF)(p,{content:"默认链接为https://your.domain/file/xxx.jpg
如果启用自定义链接格式,只保留xxx.jpg部分,其他部分请自行输入",placement:"top","raw-content":""},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1})]),(0,a.Lk)("div",qe,[(0,a.Lk)("div",Ge,[t[35]||(t[35]=(0,a.Lk)("span",{class:"setting-label"},"启用自定义",-1)),(0,a.bF)(w,{modelValue:r.useCustomUrl,"onUpdate:modelValue":t[5]||(t[5]=e=>r.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===r.useCustomUrl?((0,a.uX)(),(0,a.CE)("div",Je,[t[36]||(t[36]=(0,a.Lk)("span",{class:"setting-label"},"自定义前缀",-1)),(0,a.bF)(h,{modelValue:r.customUrlPrefix,"onUpdate:modelValue":t[6]||(t[6]=e=>r.customUrlPrefix=e),placeholder:"请输入自定义链接前缀",class:"setting-input"},null,8,["modelValue"])])):(0,a.Q3)("",!0)])]),(0,a.Lk)("div",Ke,[(0,a.bF)(m,{type:"primary",onClick:t[7]||(t[7]=e=>r.showUrlDialog=!1),class:"confirm-btn"},{default:(0,a.k6)(()=>[...t[37]||(t[37]=[(0,a.eW)("确定",-1)])]),_:1})])]),_:1},8,["modelValue","width"]),(0,a.bF)(F,{title:"上传设置",modelValue:r.showCompressDialog,"onUpdate:modelValue":t[22]||(t[22]=e=>r.showCompressDialog=e),width:c.dialogWidth,"show-close":!1,class:"settings-dialog"},{default:(0,a.k6)(()=>[(0,a.Lk)("div",Ye,[t[47]||(t[47]=(0,a.Lk)("div",{class:"section-header"},[(0,a.Lk)("span",{class:"section-title"},"上传渠道")],-1)),(0,a.Lk)("div",Ze,[(0,a.Lk)("div",et,[t[43]||(t[43]=(0,a.Lk)("span",{class:"setting-label"},"渠道类型",-1)),(0,a.bF)(v,{modelValue:r.uploadChannel,"onUpdate:modelValue":t[9]||(t[9]=e=>r.uploadChannel=e),class:"radio-card-group compact"},{default:(0,a.k6)(()=>[(0,a.bF)(k,{label:"telegram",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"paper-plane",class:"channel-icon"}),t[38]||(t[38]=(0,a.Lk)("span",null,"TG",-1))]),_:1}),(0,a.bF)(k,{label:"cfr2",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"cloud",class:"channel-icon"}),t[39]||(t[39]=(0,a.Lk)("span",null,"R2",-1))]),_:1}),(0,a.bF)(k,{label:"s3",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"database",class:"channel-icon"}),t[40]||(t[40]=(0,a.Lk)("span",null,"S3",-1))]),_:1}),(0,a.bF)(k,{label:"discord",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"comments",class:"channel-icon"}),t[41]||(t[41]=(0,a.Lk)("span",null,"DC",-1))]),_:1}),(0,a.bF)(k,{label:"huggingface",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"robot",class:"channel-icon"}),t[42]||(t[42]=(0,a.Lk)("span",null,"HF",-1))]),_:1})]),_:1},8,["modelValue"])]),c.currentChannelList.length>1?((0,a.uX)(),(0,a.CE)("div",tt,[(0,a.Lk)("span",ot,[t[44]||(t[44]=(0,a.eW)(" 渠道名称 ",-1)),(0,a.bF)(p,{content:"选择具体的渠道名称,不选择则使用负载均衡或默认渠道",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"inline-help-icon"})]),_:1})]),(0,a.bF)(U,{modelValue:r.channelName,"onUpdate:modelValue":t[10]||(t[10]=e=>r.channelName=e),placeholder:"自动选择",clearable:"",class:"setting-input"},{default:(0,a.k6)(()=>[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(c.currentChannelList,e=>((0,a.uX)(),(0,a.Wv)(L,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])):(0,a.Q3)("",!0),(0,a.Lk)("div",st,[t[45]||(t[45]=(0,a.Lk)("span",{class:"setting-label"},"上传目录",-1)),(0,a.bF)(h,{modelValue:r.uploadFolder,"onUpdate:modelValue":t[11]||(t[11]=e=>r.uploadFolder=e),placeholder:"请输入上传目录路径",class:"setting-input"},null,8,["modelValue"])]),(0,a.Lk)("div",lt,[(0,a.Lk)("span",at,[t[46]||(t[46]=(0,a.eW)(" 自动切换 ",-1)),(0,a.bF)(p,{content:"对于非分块上传文件,上传失败自动切换到其他渠道上传",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"inline-help-icon"})]),_:1})]),(0,a.bF)(w,{modelValue:r.autoRetry,"onUpdate:modelValue":t[12]||(t[12]=e=>r.autoRetry=e)},null,8,["modelValue"])])])]),(0,a.Lk)("div",it,[t[52]||(t[52]=(0,a.Lk)("div",{class:"section-header"},[(0,a.Lk)("span",{class:"section-title"},"文件命名方式")],-1)),(0,a.Lk)("div",nt,[(0,a.bF)(v,{modelValue:r.uploadNameType,"onUpdate:modelValue":t[13]||(t[13]=e=>r.uploadNameType=e),class:"radio-card-group grid-2x2"},{default:(0,a.k6)(()=>[(0,a.bF)(k,{label:"default",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"cog",class:"radio-icon"}),t[48]||(t[48]=(0,a.Lk)("span",null,"默认",-1))]),_:1}),(0,a.bF)(k,{label:"index",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"hashtag",class:"radio-icon"}),t[49]||(t[49]=(0,a.Lk)("span",null,"仅前缀",-1))]),_:1}),(0,a.bF)(k,{label:"origin",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"file-signature",class:"radio-icon"}),t[50]||(t[50]=(0,a.Lk)("span",null,"仅原名",-1))]),_:1}),(0,a.bF)(k,{label:"short",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"compress-alt",class:"radio-icon"}),t[51]||(t[51]=(0,a.Lk)("span",null,"短链接",-1))]),_:1})]),_:1},8,["modelValue"])])]),(0,a.Lk)("div",rt,[(0,a.Lk)("div",ct,[t[53]||(t[53]=(0,a.Lk)("span",{class:"section-title"},"文件预处理",-1)),(0,a.bF)(p,{content:"上传前在本地进行格式转换和压缩,仅对图片文件生效",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1})]),(0,a.Lk)("div",dt,[(0,a.Lk)("div",ut,[(0,a.Lk)("span",pt,[t[54]||(t[54]=(0,a.eW)(" 转换为WebP ",-1)),(0,a.bF)(p,{content:"上传前将图片转换为WebP格式,可有效减小文件体积。转换失败时保持原格式上传",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"inline-help-icon"})]),_:1})]),(0,a.bF)(w,{modelValue:r.convertToWebp,"onUpdate:modelValue":t[14]||(t[14]=e=>r.convertToWebp=e)},null,8,["modelValue"])]),(0,a.Lk)("div",ht,[t[55]||(t[55]=(0,a.Lk)("span",{class:"setting-label"},"文件压缩",-1)),(0,a.bF)(w,{modelValue:r.customerCompress,"onUpdate:modelValue":t[15]||(t[15]=e=>r.customerCompress=e)},null,8,["modelValue"])]),r.customerCompress?((0,a.uX)(),(0,a.CE)("div",mt,[(0,a.Lk)("span",gt,[t[56]||(t[56]=(0,a.eW)(" 压缩阈值 ",-1)),(0,a.bF)(p,{content:"设置图片大小阈值,超过此值将自动压缩,单位MB",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"inline-help-icon"})]),_:1})]),(0,a.Lk)("div",ft,[(0,a.bF)(x,{modelValue:r.compressBar,"onUpdate:modelValue":t[16]||(t[16]=e=>r.compressBar=e),min:1,max:20,"format-tooltip":e=>`${e} MB`},null,8,["modelValue","format-tooltip"]),(0,a.Lk)("div",bt,[(0,a.bF)(S,{modelValue:r.compressBar,"onUpdate:modelValue":t[17]||(t[17]=e=>r.compressBar=e),min:1,max:20,step:1,"value-on-clear":1,class:"slider-input","controls-position":"right"},null,8,["modelValue"]),t[57]||(t[57]=(0,a.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,a.Q3)("",!0),r.customerCompress?((0,a.uX)(),(0,a.CE)("div",yt,[(0,a.Lk)("span",Ct,[t[58]||(t[58]=(0,a.eW)(" 期望大小 ",-1)),(0,a.bF)(p,{content:"设置压缩后图片大小期望值,单位MB",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"inline-help-icon"})]),_:1})]),(0,a.Lk)("div",kt,[(0,a.bF)(x,{modelValue:r.compressQuality,"onUpdate:modelValue":t[18]||(t[18]=e=>r.compressQuality=e),min:.5,max:r.compressBar,step:.1,"format-tooltip":e=>`${e} MB`},null,8,["modelValue","max","format-tooltip"]),(0,a.Lk)("div",vt,[(0,a.bF)(S,{modelValue:r.compressQuality,"onUpdate:modelValue":t[19]||(t[19]=e=>r.compressQuality=e),min:.5,max:r.compressBar,step:.1,precision:1,"value-on-clear":.5,class:"slider-input","controls-position":"right"},null,8,["modelValue","max"]),t[59]||(t[59]=(0,a.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,a.Q3)("",!0)])]),"telegram"===r.uploadChannel?((0,a.uX)(),(0,a.CE)("div",wt,[(0,a.Lk)("div",Ft,[t[60]||(t[60]=(0,a.Lk)("span",{class:"section-title"},"服务端压缩",-1)),(0,a.bF)(p,{content:"1. 在 Telegram 端进行压缩,仅对上传渠道为 Telegram 的图片文件生效
2. 若图片大小(本地压缩后大小)大于10MB,本设置自动失效
3. 若上传分辨率过大、透明背景等图片,建议关闭服务端压缩,否则可能出现未知问题",placement:"top","raw-content":""},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1})]),(0,a.Lk)("div",Lt,[(0,a.Lk)("div",Ut,[t[61]||(t[61]=(0,a.Lk)("span",{class:"setting-label"},"开启压缩",-1)),(0,a.bF)(w,{modelValue:r.serverCompress,"onUpdate:modelValue":t[20]||(t[20]=e=>r.serverCompress=e)},null,8,["modelValue"])])])])):(0,a.Q3)("",!0),(0,a.Lk)("div",xt,[(0,a.bF)(m,{type:"primary",onClick:t[21]||(t[21]=e=>r.showCompressDialog=!1),class:"confirm-btn"},{default:(0,a.k6)(()=>[...t[62]||(t[62]=[(0,a.eW)("确定",-1)])]),_:1})])]),_:1},8,["modelValue","width"])]),(0,a.bF)(T,{class:"footer"}),(0,a.bF)(F,{title:"公告",modelValue:r.showAnnouncementDialog,"onUpdate:modelValue":t[24]||(t[24]=e=>r.showAnnouncementDialog=e),width:c.dialogWidth,"show-close":!1,"close-on-click-modal":!1,"close-on-press-escape":!1,center:""},{footer:(0,a.k6)(()=>[(0,a.Lk)("span",Tt,[(0,a.bF)(m,{type:"primary",onClick:t[23]||(t[23]=e=>r.showAnnouncementDialog=!1)},{default:(0,a.k6)(()=>[...t[63]||(t[63]=[(0,a.eW)("我已知晓!",-1)])]),_:1})])]),default:(0,a.k6)(()=>[(0,a.Lk)("div",{innerHTML:r.announcementContent},null,8,St)]),_:1},8,["modelValue","width"]),(0,a.bF)(M,{show:r.showHistory,onClose:t[25]||(t[25]=e=>r.showHistory=!1)},null,8,["show"])])}o(3579);var $t=o(8903),_t=o(144),Et=o(4570),Rt=o.n(Et),At=o(2388),It={name:"UploadHome",mixins:[$t.A],data(){return{selectedUrlForm:(0,_t.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,isToolBarOpen:!1,uploadMethod:"default",uploadFolder:"",isFolderInputActive:!1,showAnnouncementDialog:!1,announcementContent:"",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){this.validateUploadFolder(e)?this.$store.commit("setStoreUploadFolder",e):this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})}},computed:{...(0,$e.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},currentChannelList(){return this.availableChannels[this.uploadChannel]||[]}},mounted(){this.initializeBackground("uploadBkImg",".container",!1,!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";const o=localStorage.getItem("visitedUploadHome"),s=this.userConfig?.announcement;!o&&s&&(this.announcementContent=s,this.showAnnouncementDialog=!0,localStorage.setItem("visitedUploadHome","true"))},components:{UploadForm:Re,Footer:j.A,ToggleDark:Ie.A,Logo:Ae.A,UploadHistory:H},methods:{async fetchAvailableChannels(){try{const e=await Te.A.get("/api/channels");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){const t=(0,At.G)(e);if(!t.valid){const e=t.error.replace("目标目录","上传目录");return this.$message.error(e),!1}return!0},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(){Rt().remove("authCode"),this.$router.push("/login"),this.$message.success("已退出登录")},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)},handleOpenToolbar(){this.isToolBarOpen=!this.isToolBarOpen,setTimeout(()=>{const e=document.querySelectorAll(".toolbar-button");e.forEach(e=>{e.style.pointerEvents=this.isToolBarOpen?"auto":"none"})},300)},handleChangeUploadMethod(){this.uploadMethod="default"===this.uploadMethod?"paste":"default",this.$store.commit("setUploadMethod",this.uploadMethod)},handleMobileMenuCommand(e){"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)):"toggleUploadMethod"===e?this.handleChangeUploadMethod():"showHistory"===e?this.showHistory=!0:"showAnnouncement"===e&&this.handleShowAnnouncement()},getThemeIcon(){return"auto"===this.themeMode?"sun":"light"===this.themeMode?"moon":"adjust"},getThemeText(){return"auto"===this.themeMode?"浅色模式":"light"===this.themeMode?"深色模式":"自动模式"},handleShowAnnouncement(){const e=this.userConfig?.announcement;e?(this.announcementContent=e,this.showAnnouncementDialog=!0):this.$message.info("暂无公告")}}};const Pt=(0,B.A)(It,[["render",Mt],["__scopeId","data-v-735d07b2"]]);var Nt=Pt}}]); -//# sourceMappingURL=23.180d02c4.js.map \ No newline at end of file diff --git a/js/23.180d02c4.js.gz b/js/23.180d02c4.js.gz deleted file mode 100644 index ec1ca453daab43544e79cf68213297b2299acbcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21745 zcmV)UK(N0biwFP!000023hljVm)pj*DEj^V3JOQ*0O}$d;7qoleo{-al}L`GAx_d_ zEHqh7!VRKm0PI$Wjk}z|wj7V=CC=d3$9ArB;*%2(8E))&{4rPTmOte$ytS(eKmi~~ zwj`hA-FMdVvYLe&cJ11=YuBzl$R4)0Hl$s=IW#-l>-~|l?U~Nr2tR5Kdi~L+)HdeU z*x%o1E9!9M_2rF?Qn`)BB~5E>jhv2e5l6*Q+(!zELmf3W~;~qhS@_91_>} z3?eImti_*|v5WnY>l9)DmGO@07JOqItcHaJB74f%+LHYZudVPF@ORknDm1YTC^E)Y z%R_eSn2z|z);I`Oc_R#sI;L&QcGwo#DE^x$$X0FRm=>1>yeUx!21Z2f7(OCu*GQn$ zQ^rIk@TaoB|BcPZaK~4>c*}C|!!8+O*WaVn#@HDRuxoDGxOGfJJ?yulx zG;&z$u5`@s_lB5k6|U?JHi^Bo#Qs%%a>aKor+3xtEiL7Zn5~P(JElFtE$I^Jj%+Li z3d(CNJ^Cp2c(t(EF^z%iC#Fx=Mql!mmSk)Y87m5EEcxL=;ZE2 ztZWfirqoohoB~#e+LeJsVuFrH7H|0NK;5*QE` zttlTPLI${eB$*QO739NkB()^GB1h5CB|d>ks(sV@#;y}0i){vI0DTM%NkT*>s%L0Q zAaBg%JamELJ!-=&*`OPeH86X4W$5%I#Q%P5h~pnUYfEaY9vNWSH%|G6VPGYIHT4z5 zXVx*D9n}i#|LS?e+*u?DS z^*f5IZdo>-IkjP2mtxE(>vV?G>JH+%BiHuH8JlcQtJh1_%bnAffLAgYy4agK?q0Uq z=}u?lnm)GorZrfP8=RwqU)>u{1;7i069mKg@$f?r7$Q+&^=l8Gi;5U+VfBFv=M90v z0@>T&mpx+~C<>)kGs(0Gu`yVMURn$~H2UaYX1AfaJS-V^{W6 z2jBF8;RPMj@ATn|DPtuFqS}sF+wZ$%cV=}r;uWh{?GgvC*)mos+frJxZ}7j7U$7j{ zH=Pb}Ewbjf9K2f~asq3zuLO#s`hD!k7IKupm1WQHRC74A>3KwjABD|9Q36FcaV_|6 zsLc{0hDVVdp~{r~zU84EVs#5z_)pmIM7)Z&OcaVy-X38!qIsDB$59e!${P=6#ur8Q zj8o7HkhqMEQ=W_!1YIcs;LQE+^<8v*JBdTWowuYN;&^_67+Cd&w&lwbl9W{&`vuP+ z8(Lc((CMzUWc9?Fvbv&d=!gcM`|vrUFke|(l0Cy$5cEOGV#8^pF`RT%v=T_H z8y`>!nxZnQaf;8;qtH?}-~EI*43e}Dh1>0{L)yRs4qf-=bZ(J-5&y9Y#ro$h+yvb!=-RzqZ@VcDUO zTp}Zn{q0H0s;63xlKUye4 z7YYvB%h>EQ@y1!4tPrUw0Sa*M)mmt$1Q5kP{BCNH7!;Zp|Rd3e< zYT2lw8mglP7pbvv3LAz&RN`9L@l99=Wli>YE5kw_>&Y;cR$OdG#TIN8vGKTLdbm(- z*{Vx?xQOWu?ZhS1@2d}ASkW6A+?u=lx4v9qBfh|a zph5pAY?+pgy9J*Vpc_;e+8B`C>Eq6J!SCY&y%`nY#+eX9;85B8?*nkr18^^W0B+7Z z0Ie`r^Y3!<7J0mnKh?{ z30Fu=M=65sMFi_AXe%Pv-c*96P;8<- zL#^`W>&6DvE5rZVRMLei*w9z;Nu$1smzS0CW<=#%Xb<(nk$pq0S5It)_iSrRu2UWB zSSBa^{e9;Yy*F2wJsCR0yu+fY6cZo( z_ygdMAG!fZ(n`p0S&_+YDE2~w6mvvRR~cAx}78@M+rl^c!O?`Y9x2b~fH3GeSq5}-}>U27nRdjMWStS-ES z&@Hz@t4#fN46B}Ry1w^_<@cdxx(glAC2PPpZwy@k8gkc z+k&(r6(*lNF?s7RUk###UD>#Py>

^)>0MCr@49FI<)*Ta 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 diff --git a/js/23.180d02c4.js.map b/js/23.180d02c4.js.map deleted file mode 100644 index ff3e0b7..0000000 --- a/js/23.180d02c4.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"js/23.180d02c4.js","mappings":"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","sources":["webpack://sanyue_imghub/./node_modules/image-conversion/build/conversion.js","webpack://sanyue_imghub/./src/utils/pathValidator.js","webpack://sanyue_imghub/./node_modules/image-conversion/index.js","webpack://sanyue_imghub/./src/components/UploadHistory.vue?ba5e","webpack://sanyue_imghub/./src/components/UploadHistory.vue","webpack://sanyue_imghub/./src/components/UploadHistory.vue?4b6c","webpack://sanyue_imghub/./src/components/UploadForm.vue?527f","webpack://sanyue_imghub/./src/components/UploadForm.vue","webpack://sanyue_imghub/./src/components/UploadForm.vue?0da8","webpack://sanyue_imghub/./src/views/UploadHome.vue?f1ff","webpack://sanyue_imghub/./src/views/UploadHome.vue","webpack://sanyue_imghub/./src/views/UploadHome.vue?af00"],"sourcesContent":["!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}))}}])}));","/**\r\n * 路径验证器模块\r\n * 提供共享的文件夹路径验证功能,供 AdminDashBoard 和 UploadHome 共同使用\r\n */\r\n\r\n/**\r\n * 验证文件夹路径的合法性\r\n * @param {string} path - 要验证的路径\r\n * @returns {{ valid: boolean, error?: string }} 验证结果\r\n */\r\nexport function validateFolderPath(path) {\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: '目标目录必须以 \"/\" 开头' \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: '目标目录包含非法字符,请使用合法的路径格式' \r\n };\r\n }\r\n \r\n // 检查路径是否包含连续的斜杠\r\n if (path.includes('//')) {\r\n return { \r\n valid: false, \r\n error: '目标目录不能包含连续的斜杠' \r\n };\r\n }\r\n \r\n return { valid: true };\r\n}\r\n","module.exports = require(\"./build/conversion.js\");\n","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, 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, [_cache[4] || (_cache[4] = _createElementVNode(\"h2\", null, \"历史记录\", -1)), _createElementVNode(\"span\", _hoisted_3, \"共 \" + _toDisplayString($data.totalCount) + \" 条\", 1)]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n content: \"切换视图\",\n placement: \"bottom\"\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 }), _createVNode(_component_el_tooltip, {\n content: \"清空记录\",\n placement: \"bottom\"\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 }), _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[5] || (_cache[5] = _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 }), _cache[6] || (_cache[6] = _createElementVNode(\"span\", null, \"加载中...\", -1))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_30, \"下拉加载更多\"))])) : $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, \"没有更多记录了\")) : _createCommentVNode(\"\", true)], 544)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n class: \"empty-icon\"\n }), _cache[7] || (_cache[7] = _createElementVNode(\"p\", null, \"暂无上传记录\", -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\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport \"core-js/modules/esnext.json.parse.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('确定要清空所有上传记录吗?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\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('记录已清空');\n }).catch(() => {});\n },\n deleteItem(item) {\n this.$confirm('确定要删除这条记录吗?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\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('记录已删除');\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('链接已复制');\n }).catch(() => {\n this.$message.error('复制失败');\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=3ea1d874&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=3ea1d874&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-3ea1d874\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, withCtx as _withCtx, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, 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 = {\n key: 0,\n class: \"upload-card\"\n};\nconst _hoisted_4 = {\n class: \"paste-card-actions\"\n};\nconst _hoisted_5 = {\n class: \"upload-list-dashboard-action\"\n};\nconst _hoisted_6 = {\n class: \"modern-action-group\"\n};\nconst _hoisted_7 = {\n class: \"modern-dropdown-item-content\"\n};\nconst _hoisted_8 = {\n class: \"modern-action-btn modern-action-btn-danger\"\n};\nconst _hoisted_9 = [\"href\"];\nconst _hoisted_10 = {\n key: 0,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n autoplay: \"\",\n muted: \"\",\n playsinline: \"\",\n loop: \"\"\n};\nconst _hoisted_11 = [\"src\"];\nconst _hoisted_12 = [\"src\", \"onError\"];\nconst _hoisted_13 = {\n key: 2,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n }\n};\nconst _hoisted_14 = {\n class: \"upload-list-item-content\"\n};\nconst _hoisted_15 = {\n class: \"upload-list-item-name-wrapper\"\n};\nconst _hoisted_16 = {\n key: 0,\n class: \"upload-list-item-url\"\n};\nconst _hoisted_17 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_18 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_19 = {\n key: 1,\n class: \"upload-list-item-progress\"\n};\nconst _hoisted_20 = {\n class: \"upload-list-item-action\"\n};\nconst _hoisted_21 = [\"onClick\"];\nconst _hoisted_22 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_CameraFilled = _resolveComponent(\"CameraFilled\");\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_radio_button = _resolveComponent(\"el-radio-button\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\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_el_progress = _resolveComponent(\"el-progress\");\n const _component_Link = _resolveComponent(\"Link\");\n const _component_Delete = _resolveComponent(\"Delete\");\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(() => [_createVNode(_component_CameraFilled)]),\n _: 1\n }, 8, [\"class\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"el-upload__text\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, [...(_cache[7] || (_cache[7] = [_createElementVNode(\"em\", null, \"拖拽\", -1), _createTextVNode(), _createElementVNode(\"em\", null, \"点击\", -1), _createTextVNode(\" 或 \", -1), _createElementVNode(\"em\", null, \"Ctrl + V\", -1), _createTextVNode(\" 粘贴上传\", -1)]))], 2)]),\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_3, [_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: \"粘贴外链上传,多个外链用换行分隔\",\n type: \"textarea\",\n rows: $data.fileList.length ? 4 : 14\n }, null, 8, [\"modelValue\", \"rows\"]), _createElementVNode(\"div\", _hoisted_4, [_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(() => [...(_cache[8] || (_cache[8] = [_createTextVNode(\" 上 传 \", -1)]))]),\n _: 1\n }, 8, [\"size\", \"onClick\"]), _createVNode(_component_el_radio_group, {\n modelValue: $data.pasteUploadMethod,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.pasteUploadMethod = $event),\n class: \"paste-card-method-group\",\n size: $options.pasteCardMethodButtonSize\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio_button, {\n label: \"save\"\n }, {\n default: _withCtx(() => [...(_cache[9] || (_cache[9] = [_createTextVNode(\"转存\", -1)]))]),\n _: 1\n }), _createVNode(_component_el_radio_button, {\n label: \"external\"\n }, {\n default: _withCtx(() => [...(_cache[10] || (_cache[10] = [_createTextVNode(\"外链\", -1)]))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"size\"])])]),\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 'is-uploading': $data.uploading\n }])\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-list-container\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, [_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_5, [_createElementVNode(\"div\", _hoisted_6, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"整体复制\",\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn\",\n onClick: _cache[4] || (_cache[4] = (...args) => $options.copyAll && $options.copyAll(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"失败重试\",\n placement: \"top\"\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_7, [_cache[11] || (_cache[11] = _createElementVNode(\"span\", null, \"自动重试\", -1)), _createVNode(_component_el_switch, {\n modelValue: $data.autoReUpload,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $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\",\n onClick: _cache[5] || (_cache[5] = (...args) => $options.retryError && $options.retryError(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"清空列表\",\n placement: \"top\"\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(() => [...(_cache[12] || (_cache[12] = [_createTextVNode(\"清空全部\", -1)]))]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_dropdown_item, {\n onClick: $options.clearSuccessList\n }, {\n default: _withCtx(() => [...(_cache[13] || (_cache[13] = [_createTextVNode(\"清空已上传\", -1)]))]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", _hoisted_8, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\"])])])], 2), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.fileList.slice().reverse(), file => {\n return _openBlock(), _createElementBlock(\"div\", {\n class: \"upload-list-item\",\n key: file.name,\n span: 8\n }, [_createElementVNode(\"a\", {\n href: file.url,\n target: \"_blank\",\n class: \"upload-list-item-preview\"\n }, [$options.isVideo(file.name) ? (_openBlock(), _createElementBlock(\"video\", _hoisted_10, [_createElementVNode(\"source\", {\n src: file.url,\n type: \"video/mp4\"\n }, null, 8, _hoisted_11), _cache[14] || (_cache[14] = _createTextVNode(\" Your browser does not support the video tag. \", -1))])) : $options.isImage(file.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 1,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n src: file.url,\n onError: $event => file.url = require('@/assets/404.png')\n }, null, 40, _hoisted_12)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })]))], 8, _hoisted_9), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", _hoisted_15, [_createVNode(_component_el_text, {\n class: \"upload-list-item-name\",\n truncated: \"\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.truncateFilename(file.name)), 1)]),\n _: 2\n }, 1024)]), file.status === 'done' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [_createElementVNode(\"div\", _hoisted_17, [_createVNode(_component_el_input, {\n modelValue: file.finalURL,\n \"onUpdate:modelValue\": $event => file.finalURL = $event,\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[15] || (_cache[15] = [_createTextVNode(\"URL\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: file.mdURL,\n \"onUpdate:modelValue\": $event => file.mdURL = $event,\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[16] || (_cache[16] = [_createTextVNode(\"MarkDown\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onClick\", \"size\"])]), _createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_input, {\n modelValue: file.htmlURL,\n \"onUpdate:modelValue\": $event => file.htmlURL = $event,\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[17] || (_cache[17] = [_createTextVNode(\"HTML\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: file.ubbURL,\n \"onUpdate:modelValue\": $event => file.ubbURL = $event,\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[18] || (_cache[18] = [_createTextVNode(\"BBCode\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onClick\", \"size\"])])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [_createVNode(_component_el_progress, {\n percentage: file.progreess,\n status: file.status,\n \"show-text\": false\n }, null, 8, [\"percentage\", \"status\"])]))]), _createElementVNode(\"div\", _hoisted_20, [_createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-primary\",\n onClick: $event => $options.handleCopy(file)\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Link)]),\n _: 1\n })], 8, _hoisted_21), _createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-danger\",\n onClick: $event => $options.handleRemove(file)\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Delete)]),\n _: 1\n })], 8, _hoisted_22)])]);\n }), 128))]),\n _: 1\n }, 8, [\"onScroll\"])], 2)]),\n _: 1\n }, 8, [\"class\"])]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array-buffer.detached.js\";\nimport \"core-js/modules/es.array-buffer.transfer.js\";\nimport \"core-js/modules/es.array-buffer.transfer-to-fixed-length.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.json.stringify.js\";\nimport \"core-js/modules/es.typed-array.with.js\";\nimport \"core-js/modules/esnext.json.parse.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 \"core-js/modules/web.url-search-params.delete.js\";\nimport \"core-js/modules/web.url-search-params.has.js\";\nimport \"core-js/modules/web.url-search-params.size.js\";\nimport axios from '@/utils/axios';\nimport * as imageConversion from 'image-conversion';\nimport { mapGetters } from 'vuex';\nexport default {\n name: 'UploadForm',\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 if (this.useCustomUrl === 'true') {\n this.fileList.forEach(item => {\n if (item.uploadChannel === 'external') {\n return;\n }\n item.finalURL = this.customUrlPrefix + item.srcID;\n item.mdURL = `![${item.name}](${this.customUrlPrefix + item.srcID})`;\n item.htmlURL = `\"${item.name}\"`;\n item.ubbURL = `[img]${this.customUrlPrefix + item.srcID}[/img]`;\n });\n } else {\n this.fileList.forEach(item => {\n if (item.uploadChannel === 'external') {\n return;\n }\n item.finalURL = this.rootUrl + item.srcID;\n item.mdURL = `![${item.name}](${this.rootUrl + item.srcID})`;\n item.htmlURL = `\"${item.name}\"`;\n item.ubbURL = `[img]${this.rootUrl + item.srcID}[/img]`;\n });\n }\n },\n immediate: true\n },\n customUrlPrefix: {\n handler() {\n if (this.useCustomUrl === 'true') {\n this.fileList.forEach(item => {\n if (item.uploadChannel === 'external') {\n return;\n }\n item.finalURL = this.customUrlPrefix + item.srcID;\n item.mdURL = `![${item.name}](${this.customUrlPrefix + item.srcID})`;\n item.htmlURL = `\"${item.name}\"`;\n item.ubbURL = `[img]${this.customUrlPrefix + item.srcID}[/img]`;\n });\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 this.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=' + 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 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 this.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', file.file.type);\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=' + this.uploadFolder + '&initChunked=true',\n method: 'post',\n data: initFormData,\n withAuthCode: true\n });\n if (!initResponse.data.success) {\n throw new Error('初始化分块上传失败: ' + 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', file.file.type);\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=' + 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 || '上传过程中发生错误');\n }\n\n // 第三步:所有分块上传完成,发送合并请求\n this.$message({\n type: 'info',\n message: '分块上传完成,正在合并文件,请耐心等待...',\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', file.file.type);\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=' + 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.truncateFilename(file.name) + '已删除'\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 fileItem.finalURL = this.rootUrl + srcID;\n fileItem.mdURL = `![${file.name}](${this.rootUrl + srcID})`;\n fileItem.htmlURL = `\"${file.name}\"`;\n fileItem.ubbURL = `[img]${this.rootUrl + srcID}[/img]`;\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.truncateFilename(file.name) + '上传成功'\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.truncateFilename(file.name) + '上传失败');\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.truncateFilename(file.name) + '上传失败');\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: '文件未上传成功,无法复制链接'\n });\n return;\n }\n if (this.selectedUrlForm === 'url') {\n navigator.clipboard.writeText(file.finalURL);\n } else if (this.selectedUrlForm === 'md') {\n navigator.clipboard.writeText(file.mdURL);\n } else if (this.selectedUrlForm === 'html') {\n navigator.clipboard.writeText(file.htmlURL);\n } else if (this.selectedUrlForm === 'ubb') {\n navigator.clipboard.writeText(file.ubbURL);\n } else {\n navigator.clipboard.writeText(file.finalURL);\n }\n this.$message({\n type: 'success',\n message: '复制成功'\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(processedFile.name + '压缩后文件过大,无法上传!');\n reject('文件过大');\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(processedFile.name + '压缩失败,无法上传!');\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(processedFile.name + '文件过大,无法上传!');\n reject('文件过大');\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 if (this.selectedUrlForm === 'url') {\n const urls = this.fileList.map(item => {\n if (item.status === 'done' || item.status === 'success') {\n return item.finalURL;\n }\n }).join('\\n');\n navigator.clipboard.writeText(urls);\n } else if (this.selectedUrlForm === 'md') {\n const urls = this.fileList.map(item => {\n if (item.status === 'done' || item.status === 'success') {\n return item.mdURL;\n }\n }).join('\\n');\n navigator.clipboard.writeText(urls);\n } else if (this.selectedUrlForm === 'html') {\n const urls = this.fileList.map(item => {\n if (item.status === 'done' || item.status === 'success') {\n return item.htmlURL;\n }\n }).join('\\n');\n navigator.clipboard.writeText(urls);\n } else if (this.selectedUrlForm === 'ubb') {\n const urls = this.fileList.map(item => {\n if (item.status === 'done' || item.status === 'success') {\n return item.ubbURL;\n }\n }).join('\\n');\n navigator.clipboard.writeText(urls);\n } else {\n const urls = this.fileList.map(item => {\n if (item.status === 'done' || item.status === 'success') {\n return item.finalURL;\n }\n }).join('\\n');\n navigator.clipboard.writeText(urls);\n }\n this.$message({\n type: 'success',\n message: '整体复制成功'\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: '文件列表已清空'\n });\n } else {\n this.$message({\n type: 'info',\n message: '文件列表为空'\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: '成功上传文件已清空'\n });\n } else {\n this.$message({\n type: 'info',\n message: '成功上传文件为空'\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 }).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: '粘贴板中的URL地址请求失败'\n });\n });\n }\n });\n }\n }\n },\n selectAllText(event) {\n // 复制到剪贴板\n navigator.clipboard.writeText(event.target.value).then(() => {\n this.$message({\n type: 'success',\n message: '复制成功'\n });\n }).catch(() => {\n this.$message({\n type: 'error',\n message: '复制失败'\n });\n });\n },\n // 判断是否为图片类型\n isImage(fileName) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp', 'raw', 'cr2', 'nef', 'dng', 'eps', 'ai', 'emf', 'wmf'];\n const extension = fileName.split('.').pop().toLowerCase();\n return imageExtensions.includes(extension);\n },\n // 判断是否为视频类型\n isVideo(fileName) {\n const videoExtensions = ['mp4', 'webm', 'ogg', 'mkv'];\n const extension = fileName.split('.').pop().toLowerCase();\n return videoExtensions.includes(extension);\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: '无上传失败文件'\n });\n }\n },\n handleAutoRetryChange(val) {\n this.$message({\n type: val ? 'success' : 'info',\n message: val ? '自动重试已开启' : '自动重试已关闭'\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: `${file.name} 已达到最大重试次数(${this.maxRetryCount}),停止重试`\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 this.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: '/api/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: '/api/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 // 计算文件的 SHA256 哈希(用于 HuggingFace 上传)\n // 使用增量哈希算法,支持任意大小文件\n async computeSha256(file) {\n // 使用纯 JavaScript 实现的增量 SHA256\n // 这样可以分块处理大文件,避免内存溢出\n const sha256 = this.createSha256();\n const CHUNK_SIZE = 4 * 1024 * 1024; // 4MB chunks - 更小的块减少内存压力\n let offset = 0;\n while (offset < file.size) {\n const chunk = file.slice(offset, Math.min(offset + CHUNK_SIZE, file.size));\n const buffer = await chunk.arrayBuffer();\n sha256.update(new Uint8Array(buffer));\n offset += CHUNK_SIZE;\n\n // 每处理 20MB 打印一次进度\n if (offset % (20 * 1024 * 1024) < CHUNK_SIZE) {\n console.log(`SHA256 progress: ${Math.min(100, Math.round(offset / file.size * 100))}%`);\n }\n }\n return sha256.digest();\n },\n // 创建增量 SHA256 哈希器(纯 JavaScript 实现)\n createSha256() {\n // SHA256 常量\n const K = new Uint32Array([0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]);\n let H = new Uint32Array([0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19]);\n let buffer = new Uint8Array(64);\n let bufferLength = 0;\n let totalLength = 0;\n const rotr = (x, n) => x >>> n | x << 32 - n;\n const processBlock = block => {\n const W = new Uint32Array(64);\n for (let i = 0; i < 16; i++) {\n W[i] = block[i * 4] << 24 | block[i * 4 + 1] << 16 | block[i * 4 + 2] << 8 | block[i * 4 + 3];\n }\n for (let i = 16; i < 64; i++) {\n const s0 = rotr(W[i - 15], 7) ^ rotr(W[i - 15], 18) ^ W[i - 15] >>> 3;\n const s1 = rotr(W[i - 2], 17) ^ rotr(W[i - 2], 19) ^ W[i - 2] >>> 10;\n W[i] = W[i - 16] + s0 + W[i - 7] + s1 >>> 0;\n }\n let [a, b, c, d, e, f, g, h] = H;\n for (let i = 0; i < 64; i++) {\n const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);\n const ch = e & f ^ ~e & g;\n const temp1 = h + S1 + ch + K[i] + W[i] >>> 0;\n const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);\n const maj = a & b ^ a & c ^ b & c;\n const temp2 = S0 + maj >>> 0;\n h = g;\n g = f;\n f = e;\n e = d + temp1 >>> 0;\n d = c;\n c = b;\n b = a;\n a = temp1 + temp2 >>> 0;\n }\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n H[5] = H[5] + f >>> 0;\n H[6] = H[6] + g >>> 0;\n H[7] = H[7] + h >>> 0;\n };\n return {\n update(data) {\n totalLength += data.length;\n let offset = 0;\n if (bufferLength > 0) {\n const needed = 64 - bufferLength;\n const toCopy = Math.min(needed, data.length);\n buffer.set(data.subarray(0, toCopy), bufferLength);\n bufferLength += toCopy;\n offset = toCopy;\n if (bufferLength === 64) {\n processBlock(buffer);\n bufferLength = 0;\n }\n }\n while (offset + 64 <= data.length) {\n processBlock(data.subarray(offset, offset + 64));\n offset += 64;\n }\n if (offset < data.length) {\n buffer.set(data.subarray(offset), 0);\n bufferLength = data.length - offset;\n }\n },\n digest() {\n const bitLength = totalLength * 8;\n\n // Padding\n buffer[bufferLength++] = 0x80;\n if (bufferLength > 56) {\n buffer.fill(0, bufferLength, 64);\n processBlock(buffer);\n bufferLength = 0;\n }\n buffer.fill(0, bufferLength, 56);\n\n // Length in bits (big-endian, 64-bit)\n const view = new DataView(buffer.buffer);\n view.setUint32(56, Math.floor(bitLength / 0x100000000), false);\n view.setUint32(60, bitLength >>> 0, false);\n processBlock(buffer);\n\n // Convert to hex\n let hex = '';\n for (let i = 0; i < 8; i++) {\n hex += H[i].toString(16).padStart(8, '0');\n }\n return hex;\n }\n };\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('图片加载失败'));\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=6a7fc61f&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=6a7fc61f&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-6a7fc61f\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"upload-home\"\n};\nconst _hoisted_3 = {\n href: \"https://cfbed.sanyue.de/qa/\",\n target: \"_blank\",\n class: \"info-container\"\n};\nconst _hoisted_4 = {\n class: \"toolbar-manage\"\n};\nconst _hoisted_5 = {\n class: \"toolbar\"\n};\nconst _hoisted_6 = {\n class: \"header\"\n};\nconst _hoisted_7 = {\n class: \"title\"\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-content\"\n};\nconst _hoisted_11 = {\n class: \"dialog-section\"\n};\nconst _hoisted_12 = {\n class: \"section-header\"\n};\nconst _hoisted_13 = {\n class: \"section-content\"\n};\nconst _hoisted_14 = {\n class: \"setting-item\"\n};\nconst _hoisted_15 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_16 = {\n class: \"dialog-action\"\n};\nconst _hoisted_17 = {\n class: \"dialog-section\"\n};\nconst _hoisted_18 = {\n class: \"section-content\"\n};\nconst _hoisted_19 = {\n class: \"setting-item\"\n};\nconst _hoisted_20 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_21 = {\n class: \"setting-label\"\n};\nconst _hoisted_22 = {\n class: \"setting-item\"\n};\nconst _hoisted_23 = {\n class: \"setting-item\"\n};\nconst _hoisted_24 = {\n class: \"setting-label\"\n};\nconst _hoisted_25 = {\n class: \"dialog-section\"\n};\nconst _hoisted_26 = {\n class: \"section-content\"\n};\nconst _hoisted_27 = {\n class: \"dialog-section\"\n};\nconst _hoisted_28 = {\n class: \"section-header\"\n};\nconst _hoisted_29 = {\n class: \"section-content\"\n};\nconst _hoisted_30 = {\n class: \"setting-item\"\n};\nconst _hoisted_31 = {\n class: \"setting-label\"\n};\nconst _hoisted_32 = {\n class: \"setting-item\"\n};\nconst _hoisted_33 = {\n key: 0,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_34 = {\n class: \"setting-label\"\n};\nconst _hoisted_35 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_36 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_37 = {\n key: 1,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_38 = {\n class: \"setting-label\"\n};\nconst _hoisted_39 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_40 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_41 = {\n key: 0,\n class: \"dialog-section\"\n};\nconst _hoisted_42 = {\n class: \"section-header\"\n};\nconst _hoisted_43 = {\n class: \"section-content\"\n};\nconst _hoisted_44 = {\n class: \"setting-item\"\n};\nconst _hoisted_45 = {\n class: \"dialog-action\"\n};\nconst _hoisted_46 = [\"innerHTML\"];\nconst _hoisted_47 = {\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_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_input = _resolveComponent(\"el-input\");\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_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_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_slider = _resolveComponent(\"el-slider\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\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_tooltip, {\n content: \"查看文档\",\n placement: \"bottom\",\n disabled: $options.disableTooltip\n }, {\n default: _withCtx(() => [_createElementVNode(\"a\", _hoisted_3, [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n class: \"info-icon\",\n size: \"lg\"\n })])]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_input, {\n class: _normalizeClass([\"upload-folder\", {\n 'active': $data.isFolderInputActive,\n 'no-announcement': !$options.announcementAvailable\n }]),\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.uploadFolder = $event),\n placeholder: \"上传目录\",\n onFocus: _cache[1] || (_cache[1] = $event => $data.isFolderInputActive = true),\n onBlur: _cache[2] || (_cache[2] = $event => $data.isFolderInputActive = false)\n }, null, 8, [\"class\", \"modelValue\"]), _createVNode(_component_el_tooltip, {\n content: \"切换上传方式\",\n placement: \"bottom\",\n disabled: $options.disableTooltip\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, [\"disabled\"]), _createVNode(_component_el_tooltip, {\n content: \"上传记录\",\n placement: \"bottom\",\n disabled: $options.disableTooltip\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"history-button desktop-only\",\n onClick: _cache[3] || (_cache[3] = $event => $data.showHistory = true)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n class: \"history-icon\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\"]), $options.announcementAvailable ? (_openBlock(), _createBlock(_component_el_tooltip, {\n key: 0,\n content: \"查看公告\",\n placement: \"bottom\",\n disabled: $options.disableTooltip\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"announcement-button desktop-only\",\n onClick: $options.handleShowAnnouncement\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n class: \"announcement-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\"])) : _createCommentVNode(\"\", true), _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 \"margin-right\": \"8px\"\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 \"margin-right\": \"8px\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($data.uploadMethod === 'default' ? '粘贴上传' : '文件上传'), 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 \"margin-right\": \"8px\"\n }\n }), _cache[26] || (_cache[26] = _createTextVNode(\" 上传记录 \", -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 \"margin-right\": \"8px\"\n }\n }), _cache[27] || (_cache[27] = _createTextVNode(\" 查看公告 \", -1))]),\n _: 1\n }, 8, [\"disabled\"])]),\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\", _hoisted_4, [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-manage-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.handleOpenToolbar,\n circle: \"\"\n }, {\n default: _withCtx(() => [!$data.isToolBarOpen ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"bars\",\n class: \"manage-icon\",\n size: \"lg\"\n })) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"times\",\n class: \"manage-icon\",\n size: \"lg\"\n }))]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"上传设置\",\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-button compress-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.openCompressDialog,\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud-upload\",\n class: \"compress-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"链接格式\",\n placement: \"left\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-button link-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.openUrlDialog,\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"link-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"系统管理\",\n placement: \"left\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-button config-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.handleManage,\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"config-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"退出登录\",\n placement: \"left\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-button sign-out-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.handleLogout,\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"sign-out-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\"])]), _createElementVNode(\"div\", _hoisted_6, [_createVNode(_component_Logo, {\n useConfigLink: true\n }), _createElementVNode(\"h1\", _hoisted_7, [_createElementVNode(\"a\", _hoisted_8, _toDisplayString($options.ownerName), 1), _cache[28] || (_cache[28] = _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: \"链接格式设置\",\n modelValue: $data.showUrlDialog,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.showUrlDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_9, [_cache[33] || (_cache[33] = _createElementVNode(\"div\", {\n class: \"section-header\"\n }, [_createElementVNode(\"span\", {\n class: \"section-title\"\n }, \"默认复制链接\")], -1)), _createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_radio_group, {\n modelValue: $data.selectedUrlForm,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $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 }), _cache[29] || (_cache[29] = _createElementVNode(\"span\", null, \"原始链接\", -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[30] || (_cache[30] = _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[31] || (_cache[31] = _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[32] || (_cache[32] = _createElementVNode(\"span\", null, \"BBCode\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])])]), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, [_cache[34] || (_cache[34] = _createElementVNode(\"span\", {\n class: \"section-title\"\n }, \"自定义链接\", -1)), _createVNode(_component_el_tooltip, {\n content: \"默认链接为https://your.domain/file/xxx.jpg
如果启用自定义链接格式,只保留xxx.jpg部分,其他部分请自行输入\",\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 })]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_cache[35] || (_cache[35] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"启用自定义\", -1)), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [_cache[36] || (_cache[36] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"自定义前缀\", -1)), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.customUrlPrefix = $event),\n placeholder: \"请输入自定义链接前缀\",\n class: \"setting-input\"\n }, null, 8, [\"modelValue\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[7] || (_cache[7] = $event => $data.showUrlDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [...(_cache[37] || (_cache[37] = [_createTextVNode(\"确定\", -1)]))]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"modelValue\", \"width\"]), _createVNode(_component_el_dialog, {\n title: \"上传设置\",\n modelValue: $data.showCompressDialog,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.showCompressDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_17, [_cache[47] || (_cache[47] = _createElementVNode(\"div\", {\n class: \"section-header\"\n }, [_createElementVNode(\"span\", {\n class: \"section-title\"\n }, \"上传渠道\")], -1)), _createElementVNode(\"div\", _hoisted_18, [_createElementVNode(\"div\", _hoisted_19, [_cache[43] || (_cache[43] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"渠道类型\", -1)), _createVNode(_component_el_radio_group, {\n modelValue: $data.uploadChannel,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.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_font_awesome_icon, {\n icon: \"paper-plane\",\n class: \"channel-icon\"\n }), _cache[38] || (_cache[38] = _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_font_awesome_icon, {\n icon: \"cloud\",\n class: \"channel-icon\"\n }), _cache[39] || (_cache[39] = _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_font_awesome_icon, {\n icon: \"database\",\n class: \"channel-icon\"\n }), _cache[40] || (_cache[40] = _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_font_awesome_icon, {\n icon: \"comments\",\n class: \"channel-icon\"\n }), _cache[41] || (_cache[41] = _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_font_awesome_icon, {\n icon: \"robot\",\n class: \"channel-icon\"\n }), _cache[42] || (_cache[42] = _createElementVNode(\"span\", null, \"HF\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])]), $options.currentChannelList.length > 1 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [_createElementVNode(\"span\", _hoisted_21, [_cache[44] || (_cache[44] = _createTextVNode(\" 渠道名称 \", -1)), _createVNode(_component_el_tooltip, {\n content: \"选择具体的渠道名称,不选择则使用负载均衡或默认渠道\",\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 })]), _createVNode(_component_el_select, {\n modelValue: $data.channelName,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.channelName = $event),\n placeholder: \"自动选择\",\n clearable: \"\",\n class: \"setting-input\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.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, [\"modelValue\"])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_22, [_cache[45] || (_cache[45] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"上传目录\", -1)), _createVNode(_component_el_input, {\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.uploadFolder = $event),\n placeholder: \"请输入上传目录路径\",\n class: \"setting-input\"\n }, null, 8, [\"modelValue\"])]), _createElementVNode(\"div\", _hoisted_23, [_createElementVNode(\"span\", _hoisted_24, [_cache[46] || (_cache[46] = _createTextVNode(\" 自动切换 \", -1)), _createVNode(_component_el_tooltip, {\n content: \"对于非分块上传文件,上传失败自动切换到其他渠道上传\",\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 })]), _createVNode(_component_el_switch, {\n modelValue: $data.autoRetry,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.autoRetry = $event)\n }, null, 8, [\"modelValue\"])])])]), _createElementVNode(\"div\", _hoisted_25, [_cache[52] || (_cache[52] = _createElementVNode(\"div\", {\n class: \"section-header\"\n }, [_createElementVNode(\"span\", {\n class: \"section-title\"\n }, \"文件命名方式\")], -1)), _createElementVNode(\"div\", _hoisted_26, [_createVNode(_component_el_radio_group, {\n modelValue: $data.uploadNameType,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $data.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 }), _cache[48] || (_cache[48] = _createElementVNode(\"span\", null, \"默认\", -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 }), _cache[49] || (_cache[49] = _createElementVNode(\"span\", null, \"仅前缀\", -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 }), _cache[50] || (_cache[50] = _createElementVNode(\"span\", null, \"仅原名\", -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 }), _cache[51] || (_cache[51] = _createElementVNode(\"span\", null, \"短链接\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_27, [_createElementVNode(\"div\", _hoisted_28, [_cache[53] || (_cache[53] = _createElementVNode(\"span\", {\n class: \"section-title\"\n }, \"文件预处理\", -1)), _createVNode(_component_el_tooltip, {\n content: \"上传前在本地进行格式转换和压缩,仅对图片文件生效\",\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 })]), _createElementVNode(\"div\", _hoisted_29, [_createElementVNode(\"div\", _hoisted_30, [_createElementVNode(\"span\", _hoisted_31, [_cache[54] || (_cache[54] = _createTextVNode(\" 转换为WebP \", -1)), _createVNode(_component_el_tooltip, {\n content: \"上传前将图片转换为WebP格式,可有效减小文件体积。转换失败时保持原格式上传\",\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 })]), _createVNode(_component_el_switch, {\n modelValue: $data.convertToWebp,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.convertToWebp = $event)\n }, null, 8, [\"modelValue\"])]), _createElementVNode(\"div\", _hoisted_32, [_cache[55] || (_cache[55] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"文件压缩\", -1)), _createVNode(_component_el_switch, {\n modelValue: $data.customerCompress,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.customerCompress = $event)\n }, null, 8, [\"modelValue\"])]), $data.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [_createElementVNode(\"span\", _hoisted_34, [_cache[56] || (_cache[56] = _createTextVNode(\" 压缩阈值 \", -1)), _createVNode(_component_el_tooltip, {\n content: \"设置图片大小阈值,超过此值将自动压缩,单位MB\",\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 })]), _createElementVNode(\"div\", _hoisted_35, [_createVNode(_component_el_slider, {\n modelValue: $data.compressBar,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.compressBar = $event),\n min: 1,\n max: 20,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"modelValue\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_36, [_createVNode(_component_el_input_number, {\n modelValue: $data.compressBar,\n \"onUpdate:modelValue\": _cache[17] || (_cache[17] = $event => $data.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, [\"modelValue\"]), _cache[57] || (_cache[57] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true), $data.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_37, [_createElementVNode(\"span\", _hoisted_38, [_cache[58] || (_cache[58] = _createTextVNode(\" 期望大小 \", -1)), _createVNode(_component_el_tooltip, {\n content: \"设置压缩后图片大小期望值,单位MB\",\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 })]), _createElementVNode(\"div\", _hoisted_39, [_createVNode(_component_el_slider, {\n modelValue: $data.compressQuality,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.compressQuality = $event),\n min: 0.5,\n max: $data.compressBar,\n step: 0.1,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"modelValue\", \"max\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_40, [_createVNode(_component_el_input_number, {\n modelValue: $data.compressQuality,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.compressQuality = $event),\n min: 0.5,\n max: $data.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, [\"modelValue\", \"max\"]), _cache[59] || (_cache[59] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true)])]), $data.uploadChannel === 'telegram' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_41, [_createElementVNode(\"div\", _hoisted_42, [_cache[60] || (_cache[60] = _createElementVNode(\"span\", {\n class: \"section-title\"\n }, \"服务端压缩\", -1)), _createVNode(_component_el_tooltip, {\n content: \"1. 在 Telegram 端进行压缩,仅对上传渠道为 Telegram 的图片文件生效
2. 若图片大小(本地压缩后大小)大于10MB,本设置自动失效
3. 若上传分辨率过大、透明背景等图片,建议关闭服务端压缩,否则可能出现未知问题\",\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 })]), _createElementVNode(\"div\", _hoisted_43, [_createElementVNode(\"div\", _hoisted_44, [_cache[61] || (_cache[61] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"开启压缩\", -1)), _createVNode(_component_el_switch, {\n modelValue: $data.serverCompress,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.serverCompress = $event)\n }, null, 8, [\"modelValue\"])])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_45, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[21] || (_cache[21] = $event => $data.showCompressDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [...(_cache[62] || (_cache[62] = [_createTextVNode(\"确定\", -1)]))]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"modelValue\", \"width\"])]), _createVNode(_component_Footer, {\n class: \"footer\"\n }), _createVNode(_component_el_dialog, {\n title: \"公告\",\n modelValue: $data.showAnnouncementDialog,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $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_47, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[23] || (_cache[23] = $event => $data.showAnnouncementDialog = false)\n }, {\n default: _withCtx(() => [...(_cache[63] || (_cache[63] = [_createTextVNode(\"我已知晓!\", -1)]))]),\n _: 1\n })])]),\n default: _withCtx(() => [_createElementVNode(\"div\", {\n innerHTML: $data.announcementContent\n }, null, 8, _hoisted_46)]),\n _: 1\n }, 8, [\"modelValue\", \"width\"]), _createVNode(_component_UploadHistory, {\n show: $data.showHistory,\n onClose: _cache[25] || (_cache[25] = $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.for-each.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport UploadForm from '@/components/UploadForm.vue';\nimport Footer from '@/components/Footer.vue';\nimport ToggleDark from '@/components/ToggleDark.vue';\nimport Logo from '@/components/Logo.vue';\nimport UploadHistory from '@/components/UploadHistory.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nimport axios from '@/utils/axios';\nimport { ref } from 'vue';\nimport cookies from 'vue-cookies';\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 isToolBarOpen: false,\n //是否打开工具栏\n uploadMethod: 'default',\n //上传方式\n uploadFolder: '',\n // 上传文件夹\n isFolderInputActive: false,\n showAnnouncementDialog: false,\n // 控制公告弹窗的显示\n announcementContent: '',\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 // 验证上传文件夹路径的合法性\n if (this.validateUploadFolder(val)) {\n this.$store.commit('setStoreUploadFolder', val);\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 // 当前渠道类型对应的渠道列表\n currentChannelList() {\n return this.availableChannels[this.uploadChannel] || [];\n }\n },\n mounted() {\n // 初始化背景图,启用自动创建元素\n this.initializeBackground('uploadBkImg', '.container', false, 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\n // 首次访问公告\n const visited = localStorage.getItem('visitedUploadHome');\n const announcement = this.userConfig?.announcement;\n if (!visited && announcement) {\n this.announcementContent = announcement;\n this.showAnnouncementDialog = true;\n localStorage.setItem('visitedUploadHome', 'true');\n }\n },\n components: {\n UploadForm,\n Footer,\n ToggleDark,\n Logo,\n UploadHistory\n },\n methods: {\n // 获取可用渠道列表\n async fetchAvailableChannels() {\n try {\n const response = await axios.get('/api/channels');\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) {\n const result = validateFolderPath(path);\n if (!result.valid) {\n // 将错误消息中的\"目标目录\"替换为\"上传目录\"以保持原有的提示风格\n const errorMessage = result.error.replace('目标目录', '上传目录');\n this.$message.error(errorMessage);\n return false;\n }\n return true;\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 cookies.remove('authCode');\n this.$router.push('/login');\n this.$message.success('已退出登录');\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 handleOpenToolbar() {\n this.isToolBarOpen = !this.isToolBarOpen;\n // 等过渡动画结束,向active类添加pointer-events属性,使其可以点击\n setTimeout(() => {\n const buttons = document.querySelectorAll('.toolbar-button');\n buttons.forEach(button => {\n button.style.pointerEvents = this.isToolBarOpen ? 'auto' : 'none';\n });\n }, 300);\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 === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\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 '浅色模式';\n if (this.themeMode === 'light') return '深色模式';\n return '自动模式';\n },\n handleShowAnnouncement() {\n const announcement = this.userConfig?.announcement;\n if (announcement) {\n this.announcementContent = announcement;\n this.showAnnouncementDialog = true;\n } else {\n this.$message.info('暂无公告');\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHome.vue?vue&type=template&id=735d07b2&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=735d07b2&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-735d07b2\"]])\n\nexport default __exports__"],"names":["t","e","module","exports","this","n","r","o","i","l","call","m","c","d","Object","defineProperty","enumerable","get","Symbol","toStringTag","value","__esModule","create","bind","default","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","type","Image","onload","onerror","Error","src","document","createElement","href","window","URL","createObjectURL","download","Date","now","toString","body","appendChild","createEvent","initEvent","dispatchEvent","removeChild","FileReader","onloadend","target","result","readAsDataURL","h","assign","getContext","Number","scale","width","height","orientation","rotate","Math","PI","drawImage","translate","fetch","blob","y","quality","isNaN","size","accuracy","filter","sort","abs","pow","v","validateFolderPath","path","trim","valid","startsWith","error","invalidChars","test","includes","_hoisted_1","class","_hoisted_2","_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","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","_component_el_button","_component_el_tooltip","show","totalCount","content","placement","circle","onClick","toggleViewMode","icon","viewMode","_","clearHistory","$event","$emit","historyList","ref","onScroll","args","handleScroll","groupedHistory","group","date","items","item","time","isImage","name","url","loading","onError","handleImageError","isVideo","muted","copyLink","openLink","deleteItem","title","formatTime","hasMore","loadingMore","spin","props","Boolean","data","allHistory","pageSize","currentPage","watch","val","resetAndLoad","computed","groups","forEach","dateStr","getFullYear","String","getMonth","padStart","getDate","push","keys","map","mounted","savedMode","localStorage","getItem","methods","loadAllHistory","loadMore","history","JSON","parse","console","setTimeout","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","__exports__","style","autoplay","playsinline","loop","_component_CameraFilled","_component_el_icon","_component_el_upload","_component_el_input","_component_el_radio_button","_component_el_radio_group","_component_el_card","_component_List","_component_Checked","_component_Failed","_component_el_text","_component_el_switch","_component_el_dropdown_item","_component_el_dropdown_menu","_component_el_dropdown","_component_el_progress","_component_Link","_component_Delete","_component_el_scrollbar","onMousemove","handleUploadCardMouseMove","onMouseleave","handleUploadCardMouseLeave","uploadMethod","uploading","fileList","drag","multiple","uploadFile","onSuccess","handleSuccess","handleError","beforeUpload","handleProgress","modelValue","pastedUrls","placeholder","rows","pasteCardMethodButtonSize","handleUploadPasteUrls","pasteUploadMethod","label","listScrolled","uploadingCount","waitingCount","uploadSuccessCount","uploadErrorCount","disabled","disableTooltip","copyAll","dropdown","autoReUpload","onChange","handleAutoRetryChange","retryError","clearFileList","clearSuccessList","reverse","file","span","truncated","truncateFilename","status","finalURL","readonly","selectAllText","urlSize","prepend","mdURL","htmlURL","ubbURL","percentage","progreess","handleCopy","handleRemove","selectedUrlForm","required","customerCompress","compressQuality","compressBar","serverCompress","uploadChannel","channelName","uploadNameType","useCustomUrl","customUrlPrefix","autoRetry","urlPrefix","uploadFolder","convertToWebp","maxUploading","exceptionList","fileListLength","uploadCount","maxRetryCount","retryTimer","retryDelay","uploadQueue","activeUploads","maxConcurrentUploads","abortControllers","Map","handler","$nextTick","$refs","scrollContainer","setScrollTop","deep","srcID","rootUrl","immediate","$store","commit","innerWidth","location","protocol","host","addEventListener","handlePaste","storeAutoReUpload","beforeUnmount","removeEventListener","filename","maxLength","lastDotIndex","lastIndexOf","ext","substring","keepEnd","keepStart","find","uid","waitingItem","uploadingItem","fileItem","uploadSingleFile","HF_DIRECT_THRESHOLD","uploadToHuggingFaceDirect","DISCORD_CHUNK_THRESHOLD","uploadFileInChunks","CHUNK_THRESHOLD","processUploadQueue","nextFile","shift","onUploadComplete","max","needServerCompress","abortController","AbortController","set","formData","FormData","append","log","sha256","computeSha256","err","axios","encodeURIComponent","method","withAuthCode","signal","onUploadProgress","progressEvent","percentCompleted","round","loaded","total","onProgress","percent","res","code","response","finally","delete","CHUNK_SIZE","fileSize","totalChunks","ceil","precomputedSha256","initFormData","initResponse","message","uploadId","maxConcurrency","chunkProgress","Array","fill","nextChunkIndex","hasError","errorMsg","isCancelled","uploadChunk","async","chunkIndex","min","chunk","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","event","urls","join","controller","clear","tagName","clipboardData","uploadFromUrl","validUrls","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","arrayBuffer","fileSample","btoa","fromCharCode","uploadInfoRes","fileType","uploadInfo","alreadyExists","needsLfs","uploadAction","header","chunk_size","uploadToHuggingFaceMultipart","uploadRes","ok","commitRes","fullId","filePath","formattedResponse","completionUrl","chunkSize","parseInt","parts","completeParts","totalParts","part","DOMException","index","undefined","etag","partNumber","progress","completeResponse","oid","createSha256","offset","buffer","update","digest","K","Uint32Array","H","bufferLength","totalLength","rotr","x","processBlock","block","W","s0","s1","S1","ch","temp1","S0","maj","temp2","needed","toCopy","subarray","bitLength","view","DataView","setUint32","floor","hex","img","canvas","ctx","originalName","newName","webpFile","revokeObjectURL","glow","uploadCardGlow","rect","currentTarget","getBoundingClientRect","clientX","left","clientY","top","opacity","beforeDestroy","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_component_ToggleDark","_component_Logo","_component_UploadForm","_component_el_radio","_component_el_dialog","_component_el_option","_component_el_select","_component_el_slider","_component_el_input_number","_component_Footer","_component_UploadHistory","isFolderInputActive","announcementAvailable","onFocus","onBlur","handleChangeUploadMethod","showHistory","handleShowAnnouncement","trigger","onCommand","handleMobileMenuCommand","command","getThemeIcon","getThemeText","isToolBarOpen","handleOpenToolbar","openCompressDialog","openUrlDialog","handleManage","handleLogout","useConfigLink","ownerName","showUrlDialog","dialogWidth","changeUrlForm","showCompressDialog","currentChannelList","clearable","step","precision","showAnnouncementDialog","center","footer","innerHTML","announcementContent","onClose","mixins","backgroundManager","availableChannels","useDefaultWallPaper","themeMode","updateCompressConfig","updateStoreUploadChannel","newChannelList","savedChannelName","storeChannelName","updateStoreUploadNameType","validateUploadFolder","storeUploadFolder","userConfig","announcement","initializeBackground","uploadCopyUrlForm","compressConfig","parseBoolean","defaultCustomerCompress","parseNumber","defaultCompressQuality","defaultCompressBar","defaultConvertToWebp","storeUploadChannel","defaultUploadChannel","storeAutoRetry","storeUploadNameType","defaultUploadNameType","customUrlSettings","storeUploadMethod","fetchAvailableChannels","defaultUploadFolder","cusDarkMode","getters","useDarkMode","visited","components","UploadForm","Footer","ToggleDark","Logo","UploadHistory","defaultChannelName","errorMessage","$router","defaultValue","num","parseFloat","buttons","querySelectorAll","button","pointerEvents","info"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/js/23.180d02c4.js.map.gz b/js/23.180d02c4.js.map.gz deleted file mode 100644 index ebd0105c6cb464a9a467349e2b788bced774207d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57013 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�Co^G)rl6khhyq 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.r(t),o.d(t,"canvastoDataURL",function(){return i}),o.d(t,"canvastoFile",function(){return n}),o.d(t,"dataURLtoFile",function(){return c}),o.d(t,"dataURLtoImage",function(){return d}),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 y}),o.d(t,"compressAccurately",function(){return C}),o.d(t,"EImageType",function(){return s}),function(e){e.PNG="image/png",e.JPEG="image/jpeg",e.GIF="image/gif"}(s||(s={}));var a=function(e,t,o,s){return new(o||(o=Promise))(function(l,a){function i(e){try{r(s.next(e))}catch(e){a(e)}}function n(e){try{r(s.throw(e))}catch(e){a(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((s=s.apply(e,t||[])).next())})};function i(e,t=.92,o=s.JPEG){return a(this,void 0,void 0,function*(){return l(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(l,a){function i(e){try{r(s.next(e))}catch(e){a(e)}}function n(e){try{r(s.throw(e))}catch(e){a(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((s=s.apply(e,t||[])).next())})};function c(e,t){return r(this,void 0,void 0,function*(){const o=e.split(",");let s=o[0].match(/:(.*?);/)[1];const a=atob(o[1]);let i=a.length;const n=new Uint8Array(i);for(;i--;)n[i]=a.charCodeAt(i);return l(t)&&(s=t),new Blob([n],{type:s})})}function d(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(l,a){function i(e){try{r(s.next(e))}catch(e){a(e)}}function n(e){try{r(s.throw(e))}catch(e){a(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,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"),l=s.getContext("2d");let a,i;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;i=e.width*t,a=e.height*t}else i=o.width||o.height*e.width/e.height||e.width,a=o.height||o.width*e.height/e.width||e.height;switch([5,6,7,8].some(e=>e===o.orientation)?(s.height=i,s.width=a):(s.height=a,s.width=i),o.orientation){case 3:l.rotate(180*Math.PI/180),l.drawImage(e,-s.width,-s.height,s.width,s.height);break;case 6:l.rotate(90*Math.PI/180),l.drawImage(e,0,-s.width,s.height,s.width);break;case 8:l.rotate(270*Math.PI/180),l.drawImage(e,-s.height,0,s.height,s.width);break;case 2:l.translate(s.width,0),l.scale(-1,1),l.drawImage(e,0,0,s.width,s.height);break;case 4:l.translate(s.width,0),l.scale(-1,1),l.rotate(180*Math.PI/180),l.drawImage(e,-s.width,-s.height,s.width,s.height);break;case 5:l.translate(s.width,0),l.scale(-1,1),l.rotate(90*Math.PI/180),l.drawImage(e,0,-s.width,s.height,s.width);break;case 7:l.translate(s.width,0),l.scale(-1,1),l.rotate(270*Math.PI/180),l.drawImage(e,-s.height,0,s.height,s.width);break;default:l.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 b=function(e,t,o,s){return new(o||(o=Promise))(function(l,a){function i(e){try{r(s.next(e))}catch(e){a(e)}}function n(e){try{r(s.throw(e))}catch(e){a(e)}}function r(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(i,n)}r((s=s.apply(e,t||[])).next())})};function y(e,t={}){return b(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 a=o.split(",")[0].match(/:(.*?);/)[1],n=s.JPEG;l(t.type)&&(n=t.type,a=t.type);const r=yield d(o),u=yield m(r,Object.assign({},t)),h=yield i(u,t.quality,n),g=yield c(h,a);return g.size>e.size?e:g})}function C(e,t={}){return b(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,a=1024*t.size,n=t.size*t.accuracy*1024,r=yield p(e);let u=r.split(",")[0].match(/:(.*?);/)[1],h=s.JPEG;l(t.type)&&(h=t.type,u=t.type);const g=yield d(r),f=yield m(g,Object.assign({},t));let b,y=.5;const C=[null,null];for(let e=1;e<=7;e++){b=yield i(f,y,h);const t=.75*b.length;if(7===e){(ot)&&(b=[b,...C].filter(e=>e).sort((e,t)=>Math.abs(.75*e.length-a)-Math.abs(.75*t.length-a))[0]);break}if(ot))break;C[0]=b,y+=Math.pow(.5,e+1)}}const k=yield c(b,u);return k.size>e.size?e:k})}}])})},2388:function(e,t,o){"use strict";function s(e){if(!e||""===e.trim())return{valid:!0};if("/"===e)return{valid:!0};if(!e.startsWith("/"))return{valid:!1,error:'目标目录必须以 "/" 开头'};const t=/[\\:\*\?"'<>\| \(\)\[\]\{\}#%\^`~;@&=\+\$,]/;return t.test(e)?{valid:!1,error:"目标目录包含非法字符,请使用合法的路径格式"}:e.includes("//")?{valid:!1,error:"目标目录不能包含连续的斜杠"}:{valid:!0}}o.d(t,{G:function(){return s}})},2893:function(e,t,o){"use strict";o(5331)},3220:function(e,t,o){"use strict";o.r(t),o.d(t,{default:function(){return Nt}});var s=o(8507),l=(o(5331),o(213),o(47)),a=(o(9648),o(6768)),i=o(4232);const n={class:"history-header"},r={class:"header-left"},c={class:"record-count"},d={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"],b={key:2,class:"file-icon-wrapper"},y={class:"grid-overlay"},C={class:"grid-actions"},k={class:"grid-info"},v=["title"],w={class:"upload-time"},F={key:1,class:"list-view"},L={class:"list-preview"},U=["src"],x=["src"],S={key:2,class:"file-icon-wrapper-small"},T={class:"list-info"},M=["title"],$=["title"],_={class:"list-meta"},E={class:"upload-time"},R={class:"list-actions"},A={key:0,class:"load-more-container"},I={key:0,class:"loading-indicator"},P={key:1,class:"load-more-hint"},N={key:1,class:"no-more-hint"},V={key:1,class:"empty-state"};function z(e,t,o,z,D,B){const W=(0,a.g2)("font-awesome-icon"),H=l.S2,j=s.R7;return(0,a.uX)(),(0,a.CE)("div",{class:(0,i.C4)(["history-container",{active:o.show}])},[(0,a.Lk)("div",n,[(0,a.Lk)("div",r,[t[4]||(t[4]=(0,a.Lk)("h2",null,"历史记录",-1)),(0,a.Lk)("span",c,"共 "+(0,i.v_)(D.totalCount)+" 条",1)]),(0,a.Lk)("div",d,[(0,a.bF)(j,{content:"切换视图",placement:"bottom"},{default:(0,a.k6)(()=>[(0,a.bF)(H,{circle:"",onClick:B.toggleViewMode},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"grid"===D.viewMode?"list":"th-large"},null,8,["icon"])]),_:1},8,["onClick"])]),_:1}),(0,a.bF)(j,{content:"清空记录",placement:"bottom"},{default:(0,a.k6)(()=>[(0,a.bF)(H,{circle:"",type:"danger",onClick:B.clearHistory},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"trash-alt"})]),_:1},8,["onClick"])]),_:1}),(0,a.bF)(H,{circle:"",onClick:t[0]||(t[0]=t=>e.$emit("close"))},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"times"})]),_:1})])]),D.historyList.length>0?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"history-content",ref:"historyContent",onScroll:t[3]||(t[3]=(...e)=>B.handleScroll&&B.handleScroll(...e))},[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(B.groupedHistory,e=>((0,a.uX)(),(0,a.CE)("div",{key:e.date,class:"history-group"},[(0,a.Lk)("div",u,[t[5]||(t[5]=(0,a.Lk)("div",{class:"timeline-dot"},null,-1)),(0,a.Lk)("span",p,(0,i.v_)(e.date),1)]),"grid"===D.viewMode?((0,a.uX)(),(0,a.CE)("div",h,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(e.items,e=>((0,a.uX)(),(0,a.CE)("div",{key:e.time,class:"grid-item"},[(0,a.Lk)("div",m,[B.isImage(e.name)?((0,a.uX)(),(0,a.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[1]||(t[1]=(...e)=>B.handleImageError&&B.handleImageError(...e))},null,40,g)):B.isVideo(e.name)?((0,a.uX)(),(0,a.CE)("video",{key:1,src:e.url,muted:""},null,8,f)):((0,a.uX)(),(0,a.CE)("div",b,[(0,a.bF)(W,{icon:"file",class:"file-icon"})])),(0,a.Lk)("div",y,[(0,a.Lk)("div",C,[(0,a.bF)(H,{circle:"",size:"default",type:"primary",onClick:t=>B.copyLink(e.url)},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"copy"})]),_:1},8,["onClick"]),(0,a.bF)(H,{circle:"",size:"default",class:"action-btn-view",onClick:t=>B.openLink(e.url)},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,a.bF)(H,{circle:"",size:"default",type:"danger",onClick:t=>B.deleteItem(e)},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"trash-alt"})]),_:1},8,["onClick"])])])]),(0,a.Lk)("div",k,[(0,a.Lk)("div",{class:"file-name",title:e.name},(0,i.v_)(e.name),9,v),(0,a.Lk)("div",w,(0,i.v_)(B.formatTime(e.time)),1)])]))),128))])):((0,a.uX)(),(0,a.CE)("div",F,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(e.items,e=>((0,a.uX)(),(0,a.CE)("div",{key:e.time,class:"list-item"},[(0,a.Lk)("div",L,[B.isImage(e.name)?((0,a.uX)(),(0,a.CE)("img",{key:0,src:e.url,loading:"lazy",onError:t[2]||(t[2]=(...e)=>B.handleImageError&&B.handleImageError(...e))},null,40,U)):B.isVideo(e.name)?((0,a.uX)(),(0,a.CE)("video",{key:1,src:e.url,muted:""},null,8,x)):((0,a.uX)(),(0,a.CE)("div",S,[(0,a.bF)(W,{icon:"file"})]))]),(0,a.Lk)("div",T,[(0,a.Lk)("div",{class:"file-name",title:e.name},(0,i.v_)(e.name),9,M),(0,a.Lk)("div",{class:"file-url",title:e.url},(0,i.v_)(e.url),9,$)]),(0,a.Lk)("div",_,[(0,a.Lk)("div",E,(0,i.v_)(B.formatTime(e.time)),1)]),(0,a.Lk)("div",R,[(0,a.bF)(H,{circle:"",size:"small",type:"primary",onClick:t=>B.copyLink(e.url)},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"copy"})]),_:1},8,["onClick"]),(0,a.bF)(H,{circle:"",size:"small",class:"action-btn-view",onClick:t=>B.openLink(e.url)},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"external-link-alt"})]),_:1},8,["onClick"]),(0,a.bF)(H,{circle:"",size:"small",type:"danger",onClick:t=>B.deleteItem(e)},{default:(0,a.k6)(()=>[(0,a.bF)(W,{icon:"trash-alt"})]),_:1},8,["onClick"])])]))),128))]))]))),128)),B.hasMore?((0,a.uX)(),(0,a.CE)("div",A,[D.loadingMore?((0,a.uX)(),(0,a.CE)("div",I,[(0,a.bF)(W,{icon:"spinner",spin:""}),t[6]||(t[6]=(0,a.Lk)("span",null,"加载中...",-1))])):((0,a.uX)(),(0,a.CE)("div",P,"下拉加载更多"))])):D.historyList.length>0?((0,a.uX)(),(0,a.CE)("div",N,"没有更多记录了")):(0,a.Q3)("",!0)],544)):((0,a.uX)(),(0,a.CE)("div",V,[(0,a.bF)(W,{icon:"history",class:"empty-icon"}),t[7]||(t[7]=(0,a.Lk)("p",null,"暂无上传记录",-1))]))],2)}o(4114),o(8111),o(2489),o(7588),o(1701),o(3110),o(8335);var D={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,l=t.clientHeight;s-o-l<100&&this.loadMore()},toggleViewMode(){this.viewMode="grid"===this.viewMode?"list":"grid",localStorage.setItem("historyViewMode",this.viewMode)},clearHistory(){this.$confirm("确定要清空所有上传记录吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{this.historyList=[],this.allHistory=[],this.totalCount=0,this.currentPage=0,localStorage.removeItem("uploadHistory"),this.$message.success("记录已清空")}).catch(()=>{})},deleteItem(e){this.$confirm("确定要删除这条记录吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",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("记录已删除")}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"),l=String(t.getDate()).padStart(2,"0"),a=String(t.getHours()).padStart(2,"0"),i=String(t.getMinutes()).padStart(2,"0"),n=String(t.getSeconds()).padStart(2,"0");return`${o}-${s}-${l} ${a}:${i}:${n}`},copyLink(e){navigator.clipboard.writeText(e).then(()=>{this.$message.success("链接已复制")}).catch(()=>{this.$message.error("复制失败")})},openLink(e){window.open(e,"_blank")},handleImageError(e){e.target.src=o(6682)}}},B=o(1241);const W=(0,B.A)(D,[["render",z],["__scopeId","data-v-3ea1d874"]]);var H=W,j=o(6975),X=o(1418),O=(o(333),o(4757)),Q=o(6018),q=(o(6808),o(200),o(9267)),G=(o(5616),o(5558)),J=(o(8075),o(6810)),K=(o(4396),o(4885),o(8559)),Y=(o(5970),o(9655)),Z=(o(2893),o(2086)),ee=(o(670),o(8830),o(3597),o(4253)),te=o(683),oe=(o(5385),o(9623)),se=(o(6711),o(7358)),le=o(813);o(4896);const ae={class:"upload-form"},ie={class:"upload-card-glow",ref:"uploadCardGlow"},ne={key:0,class:"upload-card"},re={class:"paste-card-actions"},ce={class:"upload-list-dashboard-action"},de={class:"modern-action-group"},ue={class:"modern-dropdown-item-content"},pe={class:"modern-action-btn modern-action-btn-danger"},he=["href"],me={key:0,style:{width:"10vw","border-radius":"12px"},autoplay:"",muted:"",playsinline:"",loop:""},ge=["src"],fe=["src","onError"],be={key:2,style:{width:"10vw","border-radius":"12px"}},ye={class:"upload-list-item-content"},Ce={class:"upload-list-item-name-wrapper"},ke={key:0,class:"upload-list-item-url"},ve={class:"upload-list-item-url-row"},we={class:"upload-list-item-url-row"},Fe={key:1,class:"upload-list-item-progress"},Le={class:"upload-list-item-action"},Ue=["onClick"],xe=["onClick"];function Se(e,t,n,r,c,d){const u=(0,a.g2)("CameraFilled"),p=le.tk,h=se.j5,m=oe.WK,g=l.S2,f=J.Zh,b=J.MQ,y=te.Ik,C=(0,a.g2)("List"),k=(0,a.g2)("Checked"),v=(0,a.g2)("Failed"),w=ee.$g,F=(0,a.g2)("font-awesome-icon"),L=s.R7,U=G.qi,x=Z.c6,S=Z.Iy,T=Z.dW,M=Y.ve,$=(0,a.g2)("Link"),_=(0,a.g2)("Delete"),E=K.kA;return(0,a.uX)(),(0,a.CE)("div",ae,[(0,a.Lk)("div",{class:"upload-card-wrapper",onMousemove:t[0]||(t[0]=(...e)=>d.handleUploadCardMouseMove&&d.handleUploadCardMouseMove(...e)),onMouseleave:t[1]||(t[1]=(...e)=>d.handleUploadCardMouseLeave&&d.handleUploadCardMouseLeave(...e))},[(0,a.Lk)("div",ie,null,512),"default"===n.uploadMethod?((0,a.uX)(),(0,a.Wv)(h,{key:0,class:(0,i.C4)(["upload-card",{"is-uploading":c.uploading,"upload-card-busy":c.fileList.length}]),drag:"",multiple:"","http-request":d.uploadFile,onSuccess:d.handleSuccess,"on-error":d.handleError,"before-upload":d.beforeUpload,"on-progress":d.handleProgress,"file-list":c.fileList,"show-file-list":!1},{default:(0,a.k6)(()=>[(0,a.bF)(p,{class:(0,i.C4)(["el-icon--upload",{"upload-list-busy":c.fileList.length}])},{default:(0,a.k6)(()=>[(0,a.bF)(u)]),_:1},8,["class"]),(0,a.Lk)("div",{class:(0,i.C4)(["el-upload__text",{"upload-list-busy":c.fileList.length}])},[...t[7]||(t[7]=[(0,a.Lk)("em",null,"拖拽",-1),(0,a.eW)(),(0,a.Lk)("em",null,"点击",-1),(0,a.eW)(" 或 ",-1),(0,a.Lk)("em",null,"Ctrl + V",-1),(0,a.eW)(" 粘贴上传",-1)])],2)]),_:1},8,["class","http-request","onSuccess","on-error","before-upload","on-progress","file-list"])):(0,a.Q3)("",!0)],32),"paste"===n.uploadMethod?((0,a.uX)(),(0,a.CE)("div",ne,[(0,a.bF)(y,{class:(0,i.C4)(["paste-card",{"is-uploading":c.uploading,"upload-card-busy":c.fileList.length}])},{default:(0,a.k6)(()=>[(0,a.bF)(m,{modelValue:c.pastedUrls,"onUpdate:modelValue":t[2]||(t[2]=e=>c.pastedUrls=e),class:"upload-card-textarea",placeholder:"粘贴外链上传,多个外链用换行分隔",type:"textarea",rows:c.fileList.length?4:14},null,8,["modelValue","rows"]),(0,a.Lk)("div",re,[(0,a.bF)(g,{class:"paste-card-upload-button",type:"primary",size:d.pasteCardMethodButtonSize,onClick:d.handleUploadPasteUrls},{default:(0,a.k6)(()=>[...t[8]||(t[8]=[(0,a.eW)(" 上 传 ",-1)])]),_:1},8,["size","onClick"]),(0,a.bF)(b,{modelValue:c.pasteUploadMethod,"onUpdate:modelValue":t[3]||(t[3]=e=>c.pasteUploadMethod=e),class:"paste-card-method-group",size:d.pasteCardMethodButtonSize},{default:(0,a.k6)(()=>[(0,a.bF)(f,{label:"save"},{default:(0,a.k6)(()=>[...t[9]||(t[9]=[(0,a.eW)("转存",-1)])]),_:1}),(0,a.bF)(f,{label:"external"},{default:(0,a.k6)(()=>[...t[10]||(t[10]=[(0,a.eW)("外链",-1)])]),_:1})]),_:1},8,["modelValue","size"])])]),_:1},8,["class"])])):(0,a.Q3)("",!0),(0,a.bF)(y,{class:(0,i.C4)(["upload-list-card",{"upload-list-busy":c.fileList.length,"is-uploading":c.uploading}])},{default:(0,a.k6)(()=>[(0,a.Lk)("div",{class:(0,i.C4)(["upload-list-container",{"upload-list-busy":c.fileList.length}])},[(0,a.bF)(E,{onScroll:d.handleScroll,ref:"scrollContainer"},{default:(0,a.k6)(()=>[(0,a.Lk)("div",{class:(0,i.C4)(["upload-list-dashboard",{"list-scrolled":c.listScrolled}])},[(0,a.bF)(w,{class:"upload-list-dashboard-title"},{default:(0,a.k6)(()=>[(0,a.bF)(p,null,{default:(0,a.k6)(()=>[(0,a.bF)(C)]),_:1}),(0,a.eW)((0,i.v_)(d.uploadingCount+d.waitingCount)+" ",1),(0,a.bF)(p,null,{default:(0,a.k6)(()=>[(0,a.bF)(k)]),_:1}),(0,a.eW)((0,i.v_)(d.uploadSuccessCount)+" ",1),(0,a.bF)(p,null,{default:(0,a.k6)(()=>[(0,a.bF)(v)]),_:1}),(0,a.eW)((0,i.v_)(d.uploadErrorCount),1)]),_:1}),(0,a.Lk)("div",ce,[(0,a.Lk)("div",de,[(0,a.bF)(L,{disabled:d.disableTooltip,content:"整体复制",placement:"top"},{default:(0,a.k6)(()=>[(0,a.Lk)("button",{class:"modern-action-btn",onClick:t[4]||(t[4]=(...e)=>d.copyAll&&d.copyAll(...e))},[(0,a.bF)(F,{icon:"copy"})])]),_:1},8,["disabled"]),(0,a.bF)(L,{disabled:d.disableTooltip,content:"失败重试",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(T,null,{dropdown:(0,a.k6)(()=>[(0,a.bF)(S,{class:"modern-dropdown-menu"},{default:(0,a.k6)(()=>[(0,a.bF)(x,null,{default:(0,a.k6)(()=>[(0,a.Lk)("div",ue,[t[11]||(t[11]=(0,a.Lk)("span",null,"自动重试",-1)),(0,a.bF)(U,{modelValue:c.autoReUpload,"onUpdate:modelValue":t[6]||(t[6]=e=>c.autoReUpload=e),onChange:d.handleAutoRetryChange,size:"small"},null,8,["modelValue","onChange"])])]),_:1})]),_:1})]),default:(0,a.k6)(()=>[(0,a.Lk)("button",{class:"modern-action-btn",onClick:t[5]||(t[5]=(...e)=>d.retryError&&d.retryError(...e))},[(0,a.bF)(F,{icon:"redo"})])]),_:1})]),_:1},8,["disabled"]),(0,a.bF)(L,{disabled:d.disableTooltip,content:"清空列表",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(T,null,{dropdown:(0,a.k6)(()=>[(0,a.bF)(S,{class:"modern-dropdown-menu"},{default:(0,a.k6)(()=>[(0,a.bF)(x,{onClick:d.clearFileList},{default:(0,a.k6)(()=>[...t[12]||(t[12]=[(0,a.eW)("清空全部",-1)])]),_:1},8,["onClick"]),(0,a.bF)(x,{onClick:d.clearSuccessList},{default:(0,a.k6)(()=>[...t[13]||(t[13]=[(0,a.eW)("清空已上传",-1)])]),_:1},8,["onClick"])]),_:1})]),default:(0,a.k6)(()=>[(0,a.Lk)("button",pe,[(0,a.bF)(F,{icon:"trash-alt"})])]),_:1})]),_:1},8,["disabled"])])])],2),((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(c.fileList.slice().reverse(),e=>((0,a.uX)(),(0,a.CE)("div",{class:"upload-list-item",key:e.name,span:8},[(0,a.Lk)("a",{href:e.url,target:"_blank",class:"upload-list-item-preview"},[d.isVideo(e.name)?((0,a.uX)(),(0,a.CE)("video",me,[(0,a.Lk)("source",{src:e.url,type:"video/mp4"},null,8,ge),t[14]||(t[14]=(0,a.eW)(" Your browser does not support the video tag. ",-1))])):d.isImage(e.name)?((0,a.uX)(),(0,a.CE)("img",{key:1,style:{width:"10vw","border-radius":"12px"},src:e.url,onError:t=>e.url=o(6682)},null,40,fe)):((0,a.uX)(),(0,a.CE)("div",be,[(0,a.bF)(F,{icon:"file",class:"file-icon"})]))],8,he),(0,a.Lk)("div",ye,[(0,a.Lk)("div",Ce,[(0,a.bF)(w,{class:"upload-list-item-name",truncated:""},{default:(0,a.k6)(()=>[(0,a.eW)((0,i.v_)(d.truncateFilename(e.name)),1)]),_:2},1024)]),"done"===e.status?((0,a.uX)(),(0,a.CE)("div",ke,[(0,a.Lk)("div",ve,[(0,a.bF)(m,{modelValue:e.finalURL,"onUpdate:modelValue":t=>e.finalURL=t,readonly:"",onClick:d.selectAllText,size:d.urlSize},{prepend:(0,a.k6)(()=>[...t[15]||(t[15]=[(0,a.eW)("URL",-1)])]),_:1},8,["modelValue","onUpdate:modelValue","onClick","size"]),(0,a.bF)(m,{modelValue:e.mdURL,"onUpdate:modelValue":t=>e.mdURL=t,readonly:"",onClick:d.selectAllText,size:d.urlSize},{prepend:(0,a.k6)(()=>[...t[16]||(t[16]=[(0,a.eW)("MarkDown",-1)])]),_:1},8,["modelValue","onUpdate:modelValue","onClick","size"])]),(0,a.Lk)("div",we,[(0,a.bF)(m,{modelValue:e.htmlURL,"onUpdate:modelValue":t=>e.htmlURL=t,readonly:"",onClick:d.selectAllText,size:d.urlSize},{prepend:(0,a.k6)(()=>[...t[17]||(t[17]=[(0,a.eW)("HTML",-1)])]),_:1},8,["modelValue","onUpdate:modelValue","onClick","size"]),(0,a.bF)(m,{modelValue:e.ubbURL,"onUpdate:modelValue":t=>e.ubbURL=t,readonly:"",onClick:d.selectAllText,size:d.urlSize},{prepend:(0,a.k6)(()=>[...t[18]||(t[18]=[(0,a.eW)("BBCode",-1)])]),_:1},8,["modelValue","onUpdate:modelValue","onClick","size"])])])):((0,a.uX)(),(0,a.CE)("div",Fe,[(0,a.bF)(M,{percentage:e.progreess,status:e.status,"show-text":!1},null,8,["percentage","status"])]))]),(0,a.Lk)("div",Le,[(0,a.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-primary",onClick:t=>d.handleCopy(e)},[(0,a.bF)(p,null,{default:(0,a.k6)(()=>[(0,a.bF)($)]),_:1})],8,Ue),(0,a.Lk)("button",{class:"modern-file-action-btn modern-file-action-btn-danger",onClick:t=>d.handleRemove(e)},[(0,a.bF)(p,null,{default:(0,a.k6)(()=>[(0,a.bF)(_)]),_:1})],8,xe)])]))),128))]),_:1},8,["onScroll"])],2)]),_:1},8,["class"])])}o(6573),o(8100),o(7936),o(116),o(8237),o(9577),o(1549),o(9797),o(9631),o(5623),o(4979),o(4603),o(7566),o(8721);var Te=o(457),Me=o(6334),$e=o(8401),_e={name:"UploadForm",props:{selectedUrlForm:{type:String,default:"url",required:!1},customerCompress:{type:Boolean,default:!0,required:!1},compressQuality:{type:Number,default:4,required:!1},compressBar:{type:Number,default:5,required:!1},serverCompress:{type:Boolean,default:!0,required:!1},uploadChannel:{type:String,default:"telegram",required:!1},channelName:{type:String,default:"",required:!1},uploadNameType:{type:String,default:"default",required:!1},useCustomUrl:{type:String,default:"false",required:!1},customUrlPrefix:{type:String,default:"",required:!1},autoRetry:{type:Boolean,default:!0,required:!1},urlPrefix:{type:String,default:"",required:!1},uploadMethod:{type:String,default:"default",required:!1},uploadFolder:{type:String,default:"",required:!1},convertToWebp:{type:Boolean,default:!1,required:!1}},data(){return{fileList:[],uploading:!1,maxUploading:6,exceptionList:[],listScrolled:!1,fileListLength:0,uploadCount:0,pastedUrls:"",pasteUploadMethod:"save",autoReUpload:!0,maxRetryCount:10,retryTimer:null,retryDelay:12e3,uploadQueue:[],activeUploads:0,maxConcurrentUploads:6,abortControllers:new Map}},watch:{fileList:{handler(){this.fileList.length>this.fileListLength&&this.$nextTick(()=>{setTimeout(()=>{this.$refs.scrollContainer&&this.$refs.scrollContainer.setScrollTop(0)},100)}),this.fileListLength=this.fileList.length},deep:!0},useCustomUrl:{handler(){"true"===this.useCustomUrl?this.fileList.forEach(e=>{"external"!==e.uploadChannel&&(e.finalURL=this.customUrlPrefix+e.srcID,e.mdURL=`![${e.name}](${this.customUrlPrefix+e.srcID})`,e.htmlURL=`${e.name}`,e.ubbURL=`[img]${this.customUrlPrefix+e.srcID}[/img]`)}):this.fileList.forEach(e=>{"external"!==e.uploadChannel&&(e.finalURL=this.rootUrl+e.srcID,e.mdURL=`![${e.name}](${this.rootUrl+e.srcID})`,e.htmlURL=`${e.name}`,e.ubbURL=`[img]${this.rootUrl+e.srcID}[/img]`)})},immediate:!0},customUrlPrefix:{handler(){"true"===this.useCustomUrl&&this.fileList.forEach(e=>{"external"!==e.uploadChannel&&(e.finalURL=this.customUrlPrefix+e.srcID,e.mdURL=`![${e.name}](${this.customUrlPrefix+e.srcID})`,e.htmlURL=`${e.name}`,e.ubbURL=`[img]${this.customUrlPrefix+e.srcID}[/img]`)})},immediate:!0},autoReUpload(e){this.$store.commit("setStoreAutoReUpload",e)}},computed:{...(0,$e.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,l;o>0?(s=e.substring(0,o),l=e.substring(o)):(s=e,l="");const a=l.length+4,i=t-a-3;return i<=0?e.substring(0,t-3)+"...":s.substring(0,i)+"..."+s.slice(-4)+l},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 l=20971520;e.file.size>l?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,l=this.autoRetry&&"external"!==s,a="external"===s?"default":this.uploadNameType,i=new AbortController;this.abortControllers.set(e.file.uid,i);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 this.computeSha256(e.file);n.append("sha256",t),console.log("SHA256 computed:",t)}catch(r){console.error("Failed to compute SHA256:",r)}(0,Te.A)({url:"/upload?serverCompress="+o+"&uploadChannel="+s+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+a+"&autoRetry="+l+"&uploadFolder="+this.uploadFolder,method:"post",data:n,withAuthCode:!0,signal:i.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 l="discord"===o?9437184:16777216,a=e.file.size,i=Math.ceil(a/l),n=t.serverCompress,r=this.autoRetry&&"external"!==o,c="external"===o?"default":this.uploadNameType;let d=null;if("huggingface"===o)try{console.log("Computing SHA256 for HuggingFace chunked upload..."),d=await this.computeSha256(e.file),console.log("SHA256 computed:",d)}catch(u){console.error("Failed to compute SHA256:",u)}try{const t=new FormData;t.append("originalFileName",e.file.name),t.append("originalFileType",e.file.type),t.append("totalChunks",i.toString());const p=await(0,Te.A)({url:"/upload?serverCompress="+n+"&uploadChannel="+o+(this.channelName?"&channelName="+encodeURIComponent(this.channelName):"")+"&uploadNameType="+c+"&autoRetry="+r+"&uploadFolder="+this.uploadFolder+"&initChunked=true",method:"post",data:t,withAuthCode:!0});if(!p.data.success)throw new Error("初始化分块上传失败: "+p.data.message);const h=p.data.uploadId;console.log("分块上传初始化成功,uploadId:",h);const m=this.fileList.find(t=>t.uid===e.file.uid);m&&(m.totalChunks=i,m.uploadId=h);const g=3,f=new Array(i).fill(0);let b=0,y=!1,C="",k=!1;const v=async t=>{if(y||k)return;const d=t*l,p=Math.min(d+l,a),m=e.file.slice(d,p),g=new FormData;g.append("file",m,`${e.file.name}.part${t.toString().padStart(3,"0")}`),g.append("chunkIndex",t.toString()),g.append("totalChunks",i.toString()),g.append("uploadId",h),g.append("originalFileName",e.file.name),g.append("originalFileType",e.file.type);let b=0;const v=3;while(b{if(y||k)return;const s=Math.round(o.loaded/o.total*100);f[t]=s;const l=Math.round(f.reduce((e,t)=>e+t,0)/i);e.onProgress({percent:l,file:e.file})}})}catch(u){if("CanceledError"===u.name||"ERR_CANCELED"===u.code)return k=!0,void console.log("分块上传已取消:",e.file.name);if(b++,console.warn(`分块 ${t+1}/${i} 上传失败 (重试 ${b}/${v}):`,u),b>=v)throw y=!0,C=`分块 ${t+1}/${i} 上传失败: ${u.message}`,new Error(C);await new Promise(e=>setTimeout(e,2e3*b))}}},w=[];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)}),u.response&&401!==u.response.status?(this.exceptionList.push(e),e.onError(u,e.file)):u.response||(this.exceptionList.push(e),e.onError(u,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.truncateFilename(e.name)+"已删除"})},async cleanupUploadResources(e,t=0){try{await(0,Te.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,o.finalURL=this.rootUrl+s,o.mdURL=`![${t.name}](${this.rootUrl+s})`,o.htmlURL=`${t.name}`,o.ubbURL=`[img]${this.rootUrl+s}[/img]`,o.srcID=s}o.progreess=100,o.status="success",this.saveToHistory(o),this.$message({type:"success",message: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.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.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?("url"===this.selectedUrlForm?navigator.clipboard.writeText(e.finalURL):"md"===this.selectedUrlForm?navigator.clipboard.writeText(e.mdURL):"html"===this.selectedUrlForm?navigator.clipboard.writeText(e.htmlURL):"ubb"===this.selectedUrlForm?navigator.clipboard.writeText(e.ubbURL):navigator.clipboard.writeText(e.finalURL),this.$message({type:"success",message:"复制成功"})):this.$message({type:"warning",message:"文件未上传成功,无法复制链接"})},beforeUpload(e){return new Promise(async(t,o)=>{let s=e;const l=this.convertToWebp&&e.type.includes("image")&&!e.type.includes("webp")&&!e.type.includes("gif")&&!e.type.includes("svg");if(l)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 a=s.type.includes("image")&&this.customerCompress&&s.size/1024/1024>this.compressBar,i=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(a)Me.compressAccurately(s,1024*this.compressQuality).then(t=>{t.size/1024/1024>1024&&"telegram"===this.uploadChannel&&(this.$message.error(s.name+"压缩后文件过大,无法上传!"),o("文件过大")),this.uploading=!0;const l=new File([t],s.name,{type:t.type});l.uid=e.uid;const a=this.uploadCount++,i=this.serverCompress&&l.size/1024/1024<10&&"telegram"===this.uploadChannel;0===a?n(l,i):setTimeout(()=>{n(l,i),this.uploadCount--},300*a)}).catch(e=>{this.$message.error(s.name+"压缩失败,无法上传!"),o(e)});else if(i){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(s.name+"文件过大,无法上传!"),o("文件过大")})},handleProgress(e){const t=this.fileList.find(t=>t.uid===e.file.uid);t&&(t.progreess=e.percent)},copyAll(){if("url"===this.selectedUrlForm){const e=this.fileList.map(e=>{if("done"===e.status||"success"===e.status)return e.finalURL}).join("\n");navigator.clipboard.writeText(e)}else if("md"===this.selectedUrlForm){const e=this.fileList.map(e=>{if("done"===e.status||"success"===e.status)return e.mdURL}).join("\n");navigator.clipboard.writeText(e)}else if("html"===this.selectedUrlForm){const e=this.fileList.map(e=>{if("done"===e.status||"success"===e.status)return e.htmlURL}).join("\n");navigator.clipboard.writeText(e)}else if("ubb"===this.selectedUrlForm){const e=this.fileList.map(e=>{if("done"===e.status||"success"===e.status)return e.ubbURL}).join("\n");navigator.clipboard.writeText(e)}else{const e=this.fileList.map(e=>{if("done"===e.status||"success"===e.status)return e.finalURL}).join("\n");navigator.clipboard.writeText(e)}this.$message({type:"success",message:"整体复制成功"})},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.$message({type:"info",message:"文件列表为空"})},clearSuccessList(){this.uploadSuccessCount>0?(this.fileList=this.fileList.filter(e=>"done"!==e.status&&"success"!==e.status),this.$message({type:"success",message:"成功上传文件已清空"})):this.$message({type:"info",message:"成功上传文件为空"})},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`,i=`[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:l,htmlURL:a,ubbURL:i,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)&&Te.A.post("/api/fetchRes",{url:e},{responseType:"blob"}).then(o=>{o.headers["content-type"];if(200!=o.status)throw new Error("URL地址请求失败");{const a=o.headers["content-disposition"];if(a){const e=/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/,t=/filename\*\s*=\s*UTF-8''([^;\n]*)/;let o=e.exec(a);if(null!=o&&o[1]){s=o[1].replace(/['"]/g,"");try{s=decodeURIComponent(s)}catch(l){s=""}}""===s&&(o=t.exec(a),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 l=o.pathname.split(".").pop();(!l||""===l||l.length>10)&&(l="bin"),s="PastedFile"+Date.now()+t+"."+l}const i=o.data,n=new File([i],s,{type:i.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:"粘贴板中的URL地址请求失败"})})})},selectAllText(e){navigator.clipboard.writeText(e.target.value).then(()=>{this.$message({type:"success",message:"复制成功"})}).catch(()=>{this.$message({type:"error",message:"复制失败"})})},isImage(e){const t=["jpg","jpeg","png","gif","bmp","webp","svg","tiff","ico","avif","heic","jfif","pjpeg","pjp","raw","cr2","nef","dng","eps","ai","emf","wmf"],o=e.split(".").pop().toLowerCase();return t.includes(o)},isVideo(e){const t=["mp4","webm","ogg","mkv"],o=e.split(".").pop().toLowerCase();return t.includes(o)},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:"无上传失败文件"})},handleAutoRetryChange(e){this.$message({type:e?"success":"info",message:e?"自动重试已开启":"自动重试已关闭"}),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:`${e.name} 已达到最大重试次数(${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 this.computeSha256(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()),l=btoa(String.fromCharCode(...s));e.onProgress({percent:10,file:e.file}),console.log("Getting LFS upload URL...");const a=await(0,Te.A)({url:"/api/huggingface/getUploadUrl",method:"post",data:{fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,sha256:t,fileSample:l,channelName:this.channelName,uploadNameType:this.uploadNameType,uploadFolder:this.uploadFolder},withAuthCode:!0,signal:o.signal});if(!a.data.success)throw new Error(a.data.error||"Failed to get upload URL");const i=a.data;if(console.log("Upload info:",i),i.alreadyExists)console.log("File already exists in LFS, skipping upload"),e.onProgress({percent:90,file:e.file});else if(i.needsLfs&&i.uploadAction){const{href:t,header:s}=i.uploadAction;if(s?.chunk_size)await this.uploadToHuggingFaceMultipart(e,i,o);else{console.log("Uploading to S3 (basic)...");const l=await fetch(t,{method:"PUT",headers:s||{},body:e.file,signal:o.signal});if(!l.ok){const e=await l.text();throw new Error(`S3 upload failed: ${l.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,Te.A)({url:"/api/huggingface/commitUpload",method:"post",data:{fullId:i.fullId,filePath:i.filePath,sha256:t,fileSize:e.file.size,fileName:e.file.name,fileType:e.file.type,channelName:i.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:l,header:a}=s,i=parseInt(a.chunk_size),n=Object.keys(a).filter(e=>/^[0-9]+$/.test(e));console.log(`Multipart upload: ${n.length} parts, chunk size: ${i}`);const r=[],c=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*i,l=Math.min(s+i,e.file.size),n=e.file.slice(s,l);console.log(`Uploading part ${u}/${c}`);const d=await fetch(a[u],{method:"PUT",body:n,signal:o?o.signal:void 0});if(!d.ok)throw new Error(`Failed to upload part ${u}: ${d.status}`);const p=d.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)/c*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 d=await fetch(l,{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(!d.ok){const e=await d.text();throw new Error(`Multipart complete failed: ${d.status} - ${e}`)}console.log("Multipart upload complete")},async computeSha256(e){const t=this.createSha256(),o=4194304;let s=0;while(se>>>t|e<<32-t,i=o=>{const s=new Uint32Array(64);for(let e=0;e<16;e++)s[e]=o[4*e]<<24|o[4*e+1]<<16|o[4*e+2]<<8|o[4*e+3];for(let e=16;e<64;e++){const t=a(s[e-15],7)^a(s[e-15],18)^s[e-15]>>>3,o=a(s[e-2],17)^a(s[e-2],19)^s[e-2]>>>10;s[e]=s[e-16]+t+s[e-7]+o>>>0}let[l,i,n,r,c,d,u,p]=t;for(let t=0;t<64;t++){const o=a(c,6)^a(c,11)^a(c,25),h=c&d^~c&u,m=p+o+h+e[t]+s[t]>>>0,g=a(l,2)^a(l,13)^a(l,22),f=l&i^l&n^i&n,b=g+f>>>0;p=u,u=d,d=c,c=r+m>>>0,r=n,n=i,i=l,l=m+b>>>0}t[0]=t[0]+l>>>0,t[1]=t[1]+i>>>0,t[2]=t[2]+n>>>0,t[3]=t[3]+r>>>0,t[4]=t[4]+c>>>0,t[5]=t[5]+d>>>0,t[6]=t[6]+u>>>0,t[7]=t[7]+p>>>0};return{update(e){l+=e.length;let t=0;if(s>0){const l=64-s,a=Math.min(l,e.length);o.set(e.subarray(0,a),s),s+=a,t=a,64===s&&(i(o),s=0)}while(t+64<=e.length)i(e.subarray(t,t+64)),t+=64;t56&&(o.fill(0,s,64),i(o),s=0),o.fill(0,s,56);const a=new DataView(o.buffer);a.setUint32(56,Math.floor(e/4294967296),!1),a.setUint32(60,e>>>0,!1),i(o);let n="";for(let o=0;o<8;o++)n+=t[o].toString(16).padStart(8,"0");return n}}},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,l=document.createElement("canvas"),a=l.getContext("2d");s.onload=()=>{l.width=s.width,l.height=s.height,a.drawImage(s,0,0),l.toBlob(l=>{if(l){const o=e.name,s=o.lastIndexOf("."),a=s>0?o.substring(0,s)+".webp":o+".webp",i=new File([l],a,{type:"image/webp"});i.uid=e.uid,t(i)}else o(new Error("WebP 转换失败"));URL.revokeObjectURL(s.src)},"image/webp",.92)},s.onerror=()=>{URL.revokeObjectURL(s.src),o(new Error("图片加载失败"))},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,l=e.clientY-o.top;t.style.opacity="1",t.style.left=s+"px",t.style.top=l+"px"},handleUploadCardMouseLeave(){const e=this.$refs.uploadCardGlow;e&&(e.style.opacity="0")}},beforeDestroy(){this.retryTimer&&clearTimeout(this.retryTimer)}};const Ee=(0,B.A)(_e,[["render",Se],["__scopeId","data-v-7444b7c2"]]);var Re=Ee,Ae=o(732),Ie=o(4453);const Pe={class:"container"},Ne={class:"upload-home"},Ve={href:"https://cfbed.sanyue.de/qa/",target:"_blank",class:"info-container"},ze={class:"toolbar-manage"},De={class:"toolbar"},Be={class:"header"},We={class:"title"},He={class:"main-title",href:"https://github.com/MarSeventh/CloudFlare-ImgBed",target:"_blank"},je={class:"dialog-section"},Xe={class:"section-content"},Oe={class:"dialog-section"},Qe={class:"section-header"},qe={class:"section-content"},Ge={class:"setting-item"},Je={key:0,class:"setting-item"},Ke={class:"dialog-action"},Ye={class:"dialog-section"},Ze={class:"section-content"},et={class:"setting-item"},tt={key:0,class:"setting-item"},ot={class:"setting-label"},st={class:"setting-item"},lt={class:"setting-item"},at={class:"setting-label"},it={class:"dialog-section"},nt={class:"section-content"},rt={class:"dialog-section"},ct={class:"section-header"},dt={class:"section-content"},ut={class:"setting-item"},pt={class:"setting-label"},ht={class:"setting-item"},mt={key:0,class:"setting-item slider-item"},gt={class:"setting-label"},ft={class:"slider-wrapper"},bt={class:"slider-input-wrapper"},yt={key:1,class:"setting-item slider-item"},Ct={class:"setting-label"},kt={class:"slider-wrapper"},vt={class:"slider-input-wrapper"},wt={key:0,class:"dialog-section"},Ft={class:"section-header"},Lt={class:"section-content"},Ut={class:"setting-item"},xt={class:"dialog-action"},St=["innerHTML"],Tt={class:"dialog-footer"};function Mt(e,t,o,n,r,c){const d=Ie.A,u=(0,a.g2)("font-awesome-icon"),p=s.R7,h=oe.WK,m=l.S2,g=Z.c6,f=Z.Iy,b=Z.dW,y=Ae.A,C=Re,k=J.ll,v=J.MQ,w=G.qi,F=q.kZ,L=Q.P9,U=Q.AV,x=O.B8,S=X.lq,T=j.A,M=H;return(0,a.uX)(),(0,a.CE)("div",Pe,[(0,a.Lk)("div",Ne,[(0,a.bF)(d,{class:"toggle-dark-button desktop-only"}),(0,a.bF)(p,{content:"查看文档",placement:"bottom",disabled:c.disableTooltip},{default:(0,a.k6)(()=>[(0,a.Lk)("a",Ve,[(0,a.bF)(u,{icon:"book",class:"info-icon",size:"lg"})])]),_:1},8,["disabled"]),(0,a.bF)(h,{class:(0,i.C4)(["upload-folder",{active:r.isFolderInputActive,"no-announcement":!c.announcementAvailable}]),modelValue:r.uploadFolder,"onUpdate:modelValue":t[0]||(t[0]=e=>r.uploadFolder=e),placeholder:"上传目录",onFocus:t[1]||(t[1]=e=>r.isFolderInputActive=!0),onBlur:t[2]||(t[2]=e=>r.isFolderInputActive=!1)},null,8,["class","modelValue"]),(0,a.bF)(p,{content:"切换上传方式",placement:"bottom",disabled:c.disableTooltip},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:"upload-method-button desktop-only",onClick:c.handleChangeUploadMethod},{default:(0,a.k6)(()=>["default"===r.uploadMethod?((0,a.uX)(),(0,a.Wv)(u,{key:0,icon:"folder-open",class:"upload-method-icon",size:"lg"})):"paste"===r.uploadMethod?((0,a.uX)(),(0,a.Wv)(u,{key:1,icon:"paste",class:"upload-method-icon",size:"lg"})):(0,a.Q3)("",!0)]),_:1},8,["onClick"])]),_:1},8,["disabled"]),(0,a.bF)(p,{content:"上传记录",placement:"bottom",disabled:c.disableTooltip},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:"history-button desktop-only",onClick:t[3]||(t[3]=e=>r.showHistory=!0)},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"history",class:"history-icon",size:"lg"})]),_:1})]),_:1},8,["disabled"]),c.announcementAvailable?((0,a.uX)(),(0,a.Wv)(p,{key:0,content:"查看公告",placement:"bottom",disabled:c.disableTooltip},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:"announcement-button desktop-only",onClick:c.handleShowAnnouncement},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"bullhorn",class:"announcement-icon",size:"lg"})]),_:1},8,["onClick"])]),_:1},8,["disabled"])):(0,a.Q3)("",!0),(0,a.bF)(b,{class:"mobile-more-dropdown mobile-only",trigger:"click",onCommand:c.handleMobileMenuCommand},{dropdown:(0,a.k6)(()=>[(0,a.bF)(f,null,{default:(0,a.k6)(()=>[(0,a.bF)(g,{command:"toggleTheme"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:c.getThemeIcon(),style:{"margin-right":"8px"}},null,8,["icon"]),(0,a.eW)(" "+(0,i.v_)(c.getThemeText()),1)]),_:1}),(0,a.bF)(g,{command:"toggleUploadMethod"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"default"===r.uploadMethod?"paste":"folder-open",style:{"margin-right":"8px"}},null,8,["icon"]),(0,a.eW)(" "+(0,i.v_)("default"===r.uploadMethod?"粘贴上传":"文件上传"),1)]),_:1}),(0,a.bF)(g,{command:"showHistory"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"history",style:{"margin-right":"8px"}}),t[26]||(t[26]=(0,a.eW)(" 上传记录 ",-1))]),_:1}),(0,a.bF)(g,{command:"showAnnouncement",disabled:!c.announcementAvailable},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"bullhorn",style:{"margin-right":"8px"}}),t[27]||(t[27]=(0,a.eW)(" 查看公告 ",-1))]),_:1},8,["disabled"])]),_:1})]),default:(0,a.k6)(()=>[(0,a.bF)(m,{class:"mobile-more-button"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"ellipsis-v",size:"lg"})]),_:1})]),_:1},8,["onCommand"]),(0,a.Lk)("div",ze,[(0,a.bF)(m,{class:(0,i.C4)(["toolbar-manage-button",{active:r.isToolBarOpen}]),size:"large",onClick:c.handleOpenToolbar,circle:""},{default:(0,a.k6)(()=>[r.isToolBarOpen?((0,a.uX)(),(0,a.Wv)(u,{key:1,icon:"times",class:"manage-icon",size:"lg"})):((0,a.uX)(),(0,a.Wv)(u,{key:0,icon:"bars",class:"manage-icon",size:"lg"}))]),_:1},8,["class","onClick"])]),(0,a.Lk)("div",De,[(0,a.bF)(p,{disabled:c.disableTooltip,content:"上传设置",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:(0,i.C4)(["toolbar-button compress-button",{active:r.isToolBarOpen}]),size:"large",onClick:c.openCompressDialog,circle:""},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"cloud-upload",class:"compress-icon",size:"lg"})]),_:1},8,["class","onClick"])]),_:1},8,["disabled"]),(0,a.bF)(p,{disabled:c.disableTooltip,content:"链接格式",placement:"left"},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:(0,i.C4)(["toolbar-button link-button",{active:r.isToolBarOpen}]),size:"large",onClick:c.openUrlDialog,circle:""},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"link",class:"link-icon",size:"lg"})]),_:1},8,["class","onClick"])]),_:1},8,["disabled"]),(0,a.bF)(p,{disabled:c.disableTooltip,content:"系统管理",placement:"left"},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:(0,i.C4)(["toolbar-button config-button",{active:r.isToolBarOpen}]),size:"large",onClick:c.handleManage,circle:""},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"cog",class:"config-icon",size:"lg"})]),_:1},8,["class","onClick"])]),_:1},8,["disabled"]),(0,a.bF)(p,{disabled:c.disableTooltip,content:"退出登录",placement:"left"},{default:(0,a.k6)(()=>[(0,a.bF)(m,{class:(0,i.C4)(["toolbar-button sign-out-button",{active:r.isToolBarOpen}]),size:"large",onClick:c.handleLogout,circle:""},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"sign-out-alt",class:"sign-out-icon",size:"lg"})]),_:1},8,["class","onClick"])]),_:1},8,["disabled"])]),(0,a.Lk)("div",Be,[(0,a.bF)(y,{useConfigLink:!0}),(0,a.Lk)("h1",We,[(0,a.Lk)("a",He,(0,i.v_)(c.ownerName),1),t[28]||(t[28]=(0,a.eW)(" ImgHub",-1))])]),(0,a.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:c.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,a.bF)(F,{title:"链接格式设置",modelValue:r.showUrlDialog,"onUpdate:modelValue":t[8]||(t[8]=e=>r.showUrlDialog=e),width:c.dialogWidth,"show-close":!1,class:"settings-dialog"},{default:(0,a.k6)(()=>[(0,a.Lk)("div",je,[t[33]||(t[33]=(0,a.Lk)("div",{class:"section-header"},[(0,a.Lk)("span",{class:"section-title"},"默认复制链接")],-1)),(0,a.Lk)("div",Xe,[(0,a.bF)(v,{modelValue:r.selectedUrlForm,"onUpdate:modelValue":t[4]||(t[4]=e=>r.selectedUrlForm=e),onChange:c.changeUrlForm,class:"radio-card-group grid-2x2"},{default:(0,a.k6)(()=>[(0,a.bF)(k,{value:"url",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"link",class:"radio-icon"}),t[29]||(t[29]=(0,a.Lk)("span",null,"原始链接",-1))]),_:1}),(0,a.bF)(k,{value:"md",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"code",class:"radio-icon"}),t[30]||(t[30]=(0,a.Lk)("span",null,"MarkDown",-1))]),_:1}),(0,a.bF)(k,{value:"html",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"code-branch",class:"radio-icon"}),t[31]||(t[31]=(0,a.Lk)("span",null,"HTML",-1))]),_:1}),(0,a.bF)(k,{value:"ubb",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"quote-right",class:"radio-icon"}),t[32]||(t[32]=(0,a.Lk)("span",null,"BBCode",-1))]),_:1})]),_:1},8,["modelValue","onChange"])])]),(0,a.Lk)("div",Oe,[(0,a.Lk)("div",Qe,[t[34]||(t[34]=(0,a.Lk)("span",{class:"section-title"},"自定义链接",-1)),(0,a.bF)(p,{content:"默认链接为https://your.domain/file/xxx.jpg
如果启用自定义链接格式,只保留xxx.jpg部分,其他部分请自行输入",placement:"top","raw-content":""},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1})]),(0,a.Lk)("div",qe,[(0,a.Lk)("div",Ge,[t[35]||(t[35]=(0,a.Lk)("span",{class:"setting-label"},"启用自定义",-1)),(0,a.bF)(w,{modelValue:r.useCustomUrl,"onUpdate:modelValue":t[5]||(t[5]=e=>r.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===r.useCustomUrl?((0,a.uX)(),(0,a.CE)("div",Je,[t[36]||(t[36]=(0,a.Lk)("span",{class:"setting-label"},"自定义前缀",-1)),(0,a.bF)(h,{modelValue:r.customUrlPrefix,"onUpdate:modelValue":t[6]||(t[6]=e=>r.customUrlPrefix=e),placeholder:"请输入自定义链接前缀",class:"setting-input"},null,8,["modelValue"])])):(0,a.Q3)("",!0)])]),(0,a.Lk)("div",Ke,[(0,a.bF)(m,{type:"primary",onClick:t[7]||(t[7]=e=>r.showUrlDialog=!1),class:"confirm-btn"},{default:(0,a.k6)(()=>[...t[37]||(t[37]=[(0,a.eW)("确定",-1)])]),_:1})])]),_:1},8,["modelValue","width"]),(0,a.bF)(F,{title:"上传设置",modelValue:r.showCompressDialog,"onUpdate:modelValue":t[22]||(t[22]=e=>r.showCompressDialog=e),width:c.dialogWidth,"show-close":!1,class:"settings-dialog"},{default:(0,a.k6)(()=>[(0,a.Lk)("div",Ye,[t[47]||(t[47]=(0,a.Lk)("div",{class:"section-header"},[(0,a.Lk)("span",{class:"section-title"},"上传渠道")],-1)),(0,a.Lk)("div",Ze,[(0,a.Lk)("div",et,[t[43]||(t[43]=(0,a.Lk)("span",{class:"setting-label"},"渠道类型",-1)),(0,a.bF)(v,{modelValue:r.uploadChannel,"onUpdate:modelValue":t[9]||(t[9]=e=>r.uploadChannel=e),class:"radio-card-group compact"},{default:(0,a.k6)(()=>[(0,a.bF)(k,{label:"telegram",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"paper-plane",class:"channel-icon"}),t[38]||(t[38]=(0,a.Lk)("span",null,"TG",-1))]),_:1}),(0,a.bF)(k,{label:"cfr2",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"cloud",class:"channel-icon"}),t[39]||(t[39]=(0,a.Lk)("span",null,"R2",-1))]),_:1}),(0,a.bF)(k,{label:"s3",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"database",class:"channel-icon"}),t[40]||(t[40]=(0,a.Lk)("span",null,"S3",-1))]),_:1}),(0,a.bF)(k,{label:"discord",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"comments",class:"channel-icon"}),t[41]||(t[41]=(0,a.Lk)("span",null,"DC",-1))]),_:1}),(0,a.bF)(k,{label:"huggingface",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"robot",class:"channel-icon"}),t[42]||(t[42]=(0,a.Lk)("span",null,"HF",-1))]),_:1})]),_:1},8,["modelValue"])]),c.currentChannelList.length>1?((0,a.uX)(),(0,a.CE)("div",tt,[(0,a.Lk)("span",ot,[t[44]||(t[44]=(0,a.eW)(" 渠道名称 ",-1)),(0,a.bF)(p,{content:"选择具体的渠道名称,不选择则使用负载均衡或默认渠道",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"inline-help-icon"})]),_:1})]),(0,a.bF)(U,{modelValue:r.channelName,"onUpdate:modelValue":t[10]||(t[10]=e=>r.channelName=e),placeholder:"自动选择",clearable:"",class:"setting-input"},{default:(0,a.k6)(()=>[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(c.currentChannelList,e=>((0,a.uX)(),(0,a.Wv)(L,{key:e.name,label:e.name,value:e.name},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])])):(0,a.Q3)("",!0),(0,a.Lk)("div",st,[t[45]||(t[45]=(0,a.Lk)("span",{class:"setting-label"},"上传目录",-1)),(0,a.bF)(h,{modelValue:r.uploadFolder,"onUpdate:modelValue":t[11]||(t[11]=e=>r.uploadFolder=e),placeholder:"请输入上传目录路径",class:"setting-input"},null,8,["modelValue"])]),(0,a.Lk)("div",lt,[(0,a.Lk)("span",at,[t[46]||(t[46]=(0,a.eW)(" 自动切换 ",-1)),(0,a.bF)(p,{content:"对于非分块上传文件,上传失败自动切换到其他渠道上传",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"inline-help-icon"})]),_:1})]),(0,a.bF)(w,{modelValue:r.autoRetry,"onUpdate:modelValue":t[12]||(t[12]=e=>r.autoRetry=e)},null,8,["modelValue"])])])]),(0,a.Lk)("div",it,[t[52]||(t[52]=(0,a.Lk)("div",{class:"section-header"},[(0,a.Lk)("span",{class:"section-title"},"文件命名方式")],-1)),(0,a.Lk)("div",nt,[(0,a.bF)(v,{modelValue:r.uploadNameType,"onUpdate:modelValue":t[13]||(t[13]=e=>r.uploadNameType=e),class:"radio-card-group grid-2x2"},{default:(0,a.k6)(()=>[(0,a.bF)(k,{label:"default",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"cog",class:"radio-icon"}),t[48]||(t[48]=(0,a.Lk)("span",null,"默认",-1))]),_:1}),(0,a.bF)(k,{label:"index",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"hashtag",class:"radio-icon"}),t[49]||(t[49]=(0,a.Lk)("span",null,"仅前缀",-1))]),_:1}),(0,a.bF)(k,{label:"origin",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"file-signature",class:"radio-icon"}),t[50]||(t[50]=(0,a.Lk)("span",null,"仅原名",-1))]),_:1}),(0,a.bF)(k,{label:"short",class:"radio-card"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"compress-alt",class:"radio-icon"}),t[51]||(t[51]=(0,a.Lk)("span",null,"短链接",-1))]),_:1})]),_:1},8,["modelValue"])])]),(0,a.Lk)("div",rt,[(0,a.Lk)("div",ct,[t[53]||(t[53]=(0,a.Lk)("span",{class:"section-title"},"文件预处理",-1)),(0,a.bF)(p,{content:"上传前在本地进行格式转换和压缩,仅对图片文件生效",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1})]),(0,a.Lk)("div",dt,[(0,a.Lk)("div",ut,[(0,a.Lk)("span",pt,[t[54]||(t[54]=(0,a.eW)(" 转换为WebP ",-1)),(0,a.bF)(p,{content:"上传前将图片转换为WebP格式,可有效减小文件体积。转换失败时保持原格式上传",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"inline-help-icon"})]),_:1})]),(0,a.bF)(w,{modelValue:r.convertToWebp,"onUpdate:modelValue":t[14]||(t[14]=e=>r.convertToWebp=e)},null,8,["modelValue"])]),(0,a.Lk)("div",ht,[t[55]||(t[55]=(0,a.Lk)("span",{class:"setting-label"},"文件压缩",-1)),(0,a.bF)(w,{modelValue:r.customerCompress,"onUpdate:modelValue":t[15]||(t[15]=e=>r.customerCompress=e)},null,8,["modelValue"])]),r.customerCompress?((0,a.uX)(),(0,a.CE)("div",mt,[(0,a.Lk)("span",gt,[t[56]||(t[56]=(0,a.eW)(" 压缩阈值 ",-1)),(0,a.bF)(p,{content:"设置图片大小阈值,超过此值将自动压缩,单位MB",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"inline-help-icon"})]),_:1})]),(0,a.Lk)("div",ft,[(0,a.bF)(x,{modelValue:r.compressBar,"onUpdate:modelValue":t[16]||(t[16]=e=>r.compressBar=e),min:1,max:20,"format-tooltip":e=>`${e} MB`},null,8,["modelValue","format-tooltip"]),(0,a.Lk)("div",bt,[(0,a.bF)(S,{modelValue:r.compressBar,"onUpdate:modelValue":t[17]||(t[17]=e=>r.compressBar=e),min:1,max:20,step:1,"value-on-clear":1,class:"slider-input","controls-position":"right"},null,8,["modelValue"]),t[57]||(t[57]=(0,a.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,a.Q3)("",!0),r.customerCompress?((0,a.uX)(),(0,a.CE)("div",yt,[(0,a.Lk)("span",Ct,[t[58]||(t[58]=(0,a.eW)(" 期望大小 ",-1)),(0,a.bF)(p,{content:"设置压缩后图片大小期望值,单位MB",placement:"top"},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"inline-help-icon"})]),_:1})]),(0,a.Lk)("div",kt,[(0,a.bF)(x,{modelValue:r.compressQuality,"onUpdate:modelValue":t[18]||(t[18]=e=>r.compressQuality=e),min:.5,max:r.compressBar,step:.1,"format-tooltip":e=>`${e} MB`},null,8,["modelValue","max","format-tooltip"]),(0,a.Lk)("div",vt,[(0,a.bF)(S,{modelValue:r.compressQuality,"onUpdate:modelValue":t[19]||(t[19]=e=>r.compressQuality=e),min:.5,max:r.compressBar,step:.1,precision:1,"value-on-clear":.5,class:"slider-input","controls-position":"right"},null,8,["modelValue","max"]),t[59]||(t[59]=(0,a.Lk)("span",{class:"slider-unit"},"MB",-1))])])])):(0,a.Q3)("",!0)])]),"telegram"===r.uploadChannel?((0,a.uX)(),(0,a.CE)("div",wt,[(0,a.Lk)("div",Ft,[t[60]||(t[60]=(0,a.Lk)("span",{class:"section-title"},"服务端压缩",-1)),(0,a.bF)(p,{content:"1. 在 Telegram 端进行压缩,仅对上传渠道为 Telegram 的图片文件生效
2. 若图片大小(本地压缩后大小)大于10MB,本设置自动失效
3. 若上传分辨率过大、透明背景等图片,建议关闭服务端压缩,否则可能出现未知问题",placement:"top","raw-content":""},{default:(0,a.k6)(()=>[(0,a.bF)(u,{icon:"question-circle",class:"section-help-icon"})]),_:1})]),(0,a.Lk)("div",Lt,[(0,a.Lk)("div",Ut,[t[61]||(t[61]=(0,a.Lk)("span",{class:"setting-label"},"开启压缩",-1)),(0,a.bF)(w,{modelValue:r.serverCompress,"onUpdate:modelValue":t[20]||(t[20]=e=>r.serverCompress=e)},null,8,["modelValue"])])])])):(0,a.Q3)("",!0),(0,a.Lk)("div",xt,[(0,a.bF)(m,{type:"primary",onClick:t[21]||(t[21]=e=>r.showCompressDialog=!1),class:"confirm-btn"},{default:(0,a.k6)(()=>[...t[62]||(t[62]=[(0,a.eW)("确定",-1)])]),_:1})])]),_:1},8,["modelValue","width"])]),(0,a.bF)(T,{class:"footer"}),(0,a.bF)(F,{title:"公告",modelValue:r.showAnnouncementDialog,"onUpdate:modelValue":t[24]||(t[24]=e=>r.showAnnouncementDialog=e),width:c.dialogWidth,"show-close":!1,"close-on-click-modal":!1,"close-on-press-escape":!1,center:""},{footer:(0,a.k6)(()=>[(0,a.Lk)("span",Tt,[(0,a.bF)(m,{type:"primary",onClick:t[23]||(t[23]=e=>r.showAnnouncementDialog=!1)},{default:(0,a.k6)(()=>[...t[63]||(t[63]=[(0,a.eW)("我已知晓!",-1)])]),_:1})])]),default:(0,a.k6)(()=>[(0,a.Lk)("div",{innerHTML:r.announcementContent},null,8,St)]),_:1},8,["modelValue","width"]),(0,a.bF)(M,{show:r.showHistory,onClose:t[25]||(t[25]=e=>r.showHistory=!1)},null,8,["show"])])}o(3579);var $t=o(8903),_t=o(144),Et=o(4570),Rt=o.n(Et),At=o(2388),It={name:"UploadHome",mixins:[$t.A],data(){return{selectedUrlForm:(0,_t.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,isToolBarOpen:!1,uploadMethod:"default",uploadFolder:"",isFolderInputActive:!1,showAnnouncementDialog:!1,announcementContent:"",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){this.validateUploadFolder(e)?this.$store.commit("setStoreUploadFolder",e):this.$nextTick(()=>{this.uploadFolder=this.storeUploadFolder})}},computed:{...(0,$e.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},currentChannelList(){return this.availableChannels[this.uploadChannel]||[]}},mounted(){this.initializeBackground("uploadBkImg",".container",!1,!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";const o=localStorage.getItem("visitedUploadHome"),s=this.userConfig?.announcement;!o&&s&&(this.announcementContent=s,this.showAnnouncementDialog=!0,localStorage.setItem("visitedUploadHome","true"))},components:{UploadForm:Re,Footer:j.A,ToggleDark:Ie.A,Logo:Ae.A,UploadHistory:H},methods:{async fetchAvailableChannels(){try{const e=await Te.A.get("/api/channels");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){const t=(0,At.G)(e);if(!t.valid){const e=t.error.replace("目标目录","上传目录");return this.$message.error(e),!1}return!0},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(){Rt().remove("authCode"),this.$router.push("/login"),this.$message.success("已退出登录")},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)},handleOpenToolbar(){this.isToolBarOpen=!this.isToolBarOpen,setTimeout(()=>{const e=document.querySelectorAll(".toolbar-button");e.forEach(e=>{e.style.pointerEvents=this.isToolBarOpen?"auto":"none"})},300)},handleChangeUploadMethod(){this.uploadMethod="default"===this.uploadMethod?"paste":"default",this.$store.commit("setUploadMethod",this.uploadMethod)},handleMobileMenuCommand(e){"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)):"toggleUploadMethod"===e?this.handleChangeUploadMethod():"showHistory"===e?this.showHistory=!0:"showAnnouncement"===e&&this.handleShowAnnouncement()},getThemeIcon(){return"auto"===this.themeMode?"sun":"light"===this.themeMode?"moon":"adjust"},getThemeText(){return"auto"===this.themeMode?"浅色模式":"light"===this.themeMode?"深色模式":"自动模式"},handleShowAnnouncement(){const e=this.userConfig?.announcement;e?(this.announcementContent=e,this.showAnnouncementDialog=!0):this.$message.info("暂无公告")}}};const Pt=(0,B.A)(It,[["render",Mt],["__scopeId","data-v-735d07b2"]]);var Nt=Pt},3597:function(e,t,o){"use strict";o(5331)},4396:function(e,t,o){"use strict";o(5331),o(4885)},4885:function(e,t,o){"use strict";o(5331)},5385:function(e,t,o){"use strict";o(5331)},5616:function(e,t,o){"use strict";o(5331),o(7197)},5970:function(e,t,o){"use strict";o(5331)},6334:function(e,t,o){e.exports=o(1393)},6682:function(e,t,o){"use strict";e.exports=o.p+"img/404.8ed11fb3.png"},6808:function(e,t,o){"use strict";o(5331),o(8785),o(200),o(5970),o(9104)},8075:function(e,t,o){"use strict";o(5331)},8785:function(e,t,o){"use strict";o(5331)},8830:function(e,t,o){"use strict";o(5331)},9104:function(e,t,o){"use strict";o(5331)}}]); +//# sourceMappingURL=280.65ead6f8.js.map \ No newline at end of file diff --git a/js/280.65ead6f8.js.gz b/js/280.65ead6f8.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..c8fede8ae88ad32fe4f8c025d891ea3d1475cf21 GIT binary patch literal 21772 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

`Z;8<&q*0OEs=z>^)&7w)bfm@ zopr1J(vp`I&HX8&Iotw|8HT^K#1f;!U+gLce*+=2GBUMCqC}S`QQTJooGAxN=MjV@tC@4xu!0+$AF)^V~?%O4s!IGkd^UeUshBX4=23cEr^uD^2b#pqi04lzxPQ`jVv3Mp}>X>GIy_p2$_ zbBg=Ct6%Ew!VHf2RnMn)$own&c>WD7y8qy5U1e^|Gy96~NH~fYF9c(XBxzBLWgN?v zp>*oyaF0f51s)$^ckc>a4&t7+ZCO&20YM~46ei}{4x_UVi3LjOa}eK~Gs`hr2XN3we?po$+9PlkE2<6dXczw)t6hV~<-v`T;h_**L1)Et2 zQY0bp^zO05z{LcVuZ##~4Jp1fOo2X@N#HgFp+Q;43qU~SmHP{T25(R4aVSO>8;4F{ zN(?~8gyV$h(?}#4FE4J9jOaNfSRGX5ImV|)s)R&d$?%B$u*h3%$s0LR{z^y#LSNg> z?qeelUdNMB66bY(@V}nC^UR+P-hLCTt!IpK@WCI&dh9ir{|u=*JJn<&hFmE$q^D^D zD4rvLrc&6e5VcvB4qo};!7tw6&vHr-C1rTnkCHN6@WrGIm;Ah>4CQK9t8d0h86NVD zhy4JRtIc{V4D%gk`UK5Z0Z#FbFRc=}S}w!WO{LtdEmRc|xzcD zePKZAdb18qnssf#-fQJ@B~ulv_~wwfz6Wno z*S9vy>d*maT1e!!=xiGGMiu@oX%LfIhFQVCOe===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}))}}])}));","/**\r\n * 路径验证器模块\r\n * 提供共享的文件夹路径验证功能,供 AdminDashBoard 和 UploadHome 共同使用\r\n */\r\n\r\n/**\r\n * 验证文件夹路径的合法性\r\n * @param {string} path - 要验证的路径\r\n * @returns {{ valid: boolean, error?: string }} 验证结果\r\n */\r\nexport function validateFolderPath(path) {\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: '目标目录必须以 \"/\" 开头' \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: '目标目录包含非法字符,请使用合法的路径格式' \r\n };\r\n }\r\n \r\n // 检查路径是否包含连续的斜杠\r\n if (path.includes('//')) {\r\n return { \r\n valid: false, \r\n error: '目标目录不能包含连续的斜杠' \r\n };\r\n }\r\n \r\n return { valid: true };\r\n}\r\n","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, 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, [_cache[4] || (_cache[4] = _createElementVNode(\"h2\", null, \"历史记录\", -1)), _createElementVNode(\"span\", _hoisted_3, \"共 \" + _toDisplayString($data.totalCount) + \" 条\", 1)]), _createElementVNode(\"div\", _hoisted_4, [_createVNode(_component_el_tooltip, {\n content: \"切换视图\",\n placement: \"bottom\"\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 }), _createVNode(_component_el_tooltip, {\n content: \"清空记录\",\n placement: \"bottom\"\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 }), _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[5] || (_cache[5] = _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 }), _cache[6] || (_cache[6] = _createElementVNode(\"span\", null, \"加载中...\", -1))])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_30, \"下拉加载更多\"))])) : $data.historyList.length > 0 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_31, \"没有更多记录了\")) : _createCommentVNode(\"\", true)], 544)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n class: \"empty-icon\"\n }), _cache[7] || (_cache[7] = _createElementVNode(\"p\", null, \"暂无上传记录\", -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\";\nimport \"core-js/modules/es.json.stringify.js\";\nimport \"core-js/modules/esnext.json.parse.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('确定要清空所有上传记录吗?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\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('记录已清空');\n }).catch(() => {});\n },\n deleteItem(item) {\n this.$confirm('确定要删除这条记录吗?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\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('记录已删除');\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('链接已复制');\n }).catch(() => {\n this.$message.error('复制失败');\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=3ea1d874&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=3ea1d874&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-3ea1d874\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, withCtx as _withCtx, createTextVNode as _createTextVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, 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 = {\n key: 0,\n class: \"upload-card\"\n};\nconst _hoisted_4 = {\n class: \"paste-card-actions\"\n};\nconst _hoisted_5 = {\n class: \"upload-list-dashboard-action\"\n};\nconst _hoisted_6 = {\n class: \"modern-action-group\"\n};\nconst _hoisted_7 = {\n class: \"modern-dropdown-item-content\"\n};\nconst _hoisted_8 = {\n class: \"modern-action-btn modern-action-btn-danger\"\n};\nconst _hoisted_9 = [\"href\"];\nconst _hoisted_10 = {\n key: 0,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n autoplay: \"\",\n muted: \"\",\n playsinline: \"\",\n loop: \"\"\n};\nconst _hoisted_11 = [\"src\"];\nconst _hoisted_12 = [\"src\", \"onError\"];\nconst _hoisted_13 = {\n key: 2,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n }\n};\nconst _hoisted_14 = {\n class: \"upload-list-item-content\"\n};\nconst _hoisted_15 = {\n class: \"upload-list-item-name-wrapper\"\n};\nconst _hoisted_16 = {\n key: 0,\n class: \"upload-list-item-url\"\n};\nconst _hoisted_17 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_18 = {\n class: \"upload-list-item-url-row\"\n};\nconst _hoisted_19 = {\n key: 1,\n class: \"upload-list-item-progress\"\n};\nconst _hoisted_20 = {\n class: \"upload-list-item-action\"\n};\nconst _hoisted_21 = [\"onClick\"];\nconst _hoisted_22 = [\"onClick\"];\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_CameraFilled = _resolveComponent(\"CameraFilled\");\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_radio_button = _resolveComponent(\"el-radio-button\");\n const _component_el_radio_group = _resolveComponent(\"el-radio-group\");\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_el_progress = _resolveComponent(\"el-progress\");\n const _component_Link = _resolveComponent(\"Link\");\n const _component_Delete = _resolveComponent(\"Delete\");\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(() => [_createVNode(_component_CameraFilled)]),\n _: 1\n }, 8, [\"class\"]), _createElementVNode(\"div\", {\n class: _normalizeClass([\"el-upload__text\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, [...(_cache[7] || (_cache[7] = [_createElementVNode(\"em\", null, \"拖拽\", -1), _createTextVNode(), _createElementVNode(\"em\", null, \"点击\", -1), _createTextVNode(\" 或 \", -1), _createElementVNode(\"em\", null, \"Ctrl + V\", -1), _createTextVNode(\" 粘贴上传\", -1)]))], 2)]),\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_3, [_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: \"粘贴外链上传,多个外链用换行分隔\",\n type: \"textarea\",\n rows: $data.fileList.length ? 4 : 14\n }, null, 8, [\"modelValue\", \"rows\"]), _createElementVNode(\"div\", _hoisted_4, [_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(() => [...(_cache[8] || (_cache[8] = [_createTextVNode(\" 上 传 \", -1)]))]),\n _: 1\n }, 8, [\"size\", \"onClick\"]), _createVNode(_component_el_radio_group, {\n modelValue: $data.pasteUploadMethod,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => $data.pasteUploadMethod = $event),\n class: \"paste-card-method-group\",\n size: $options.pasteCardMethodButtonSize\n }, {\n default: _withCtx(() => [_createVNode(_component_el_radio_button, {\n label: \"save\"\n }, {\n default: _withCtx(() => [...(_cache[9] || (_cache[9] = [_createTextVNode(\"转存\", -1)]))]),\n _: 1\n }), _createVNode(_component_el_radio_button, {\n label: \"external\"\n }, {\n default: _withCtx(() => [...(_cache[10] || (_cache[10] = [_createTextVNode(\"外链\", -1)]))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"size\"])])]),\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 'is-uploading': $data.uploading\n }])\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", {\n class: _normalizeClass([\"upload-list-container\", {\n 'upload-list-busy': $data.fileList.length\n }])\n }, [_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_5, [_createElementVNode(\"div\", _hoisted_6, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"整体复制\",\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"button\", {\n class: \"modern-action-btn\",\n onClick: _cache[4] || (_cache[4] = (...args) => $options.copyAll && $options.copyAll(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"copy\"\n })])]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"失败重试\",\n placement: \"top\"\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_7, [_cache[11] || (_cache[11] = _createElementVNode(\"span\", null, \"自动重试\", -1)), _createVNode(_component_el_switch, {\n modelValue: $data.autoReUpload,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $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\",\n onClick: _cache[5] || (_cache[5] = (...args) => $options.retryError && $options.retryError(...args))\n }, [_createVNode(_component_font_awesome_icon, {\n icon: \"redo\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"清空列表\",\n placement: \"top\"\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(() => [...(_cache[12] || (_cache[12] = [_createTextVNode(\"清空全部\", -1)]))]),\n _: 1\n }, 8, [\"onClick\"]), _createVNode(_component_el_dropdown_item, {\n onClick: $options.clearSuccessList\n }, {\n default: _withCtx(() => [...(_cache[13] || (_cache[13] = [_createTextVNode(\"清空已上传\", -1)]))]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n })]),\n default: _withCtx(() => [_createElementVNode(\"button\", _hoisted_8, [_createVNode(_component_font_awesome_icon, {\n icon: \"trash-alt\"\n })])]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\"])])])], 2), (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($data.fileList.slice().reverse(), file => {\n return _openBlock(), _createElementBlock(\"div\", {\n class: \"upload-list-item\",\n key: file.name,\n span: 8\n }, [_createElementVNode(\"a\", {\n href: file.url,\n target: \"_blank\",\n class: \"upload-list-item-preview\"\n }, [$options.isVideo(file.name) ? (_openBlock(), _createElementBlock(\"video\", _hoisted_10, [_createElementVNode(\"source\", {\n src: file.url,\n type: \"video/mp4\"\n }, null, 8, _hoisted_11), _cache[14] || (_cache[14] = _createTextVNode(\" Your browser does not support the video tag. \", -1))])) : $options.isImage(file.name) ? (_openBlock(), _createElementBlock(\"img\", {\n key: 1,\n style: {\n \"width\": \"10vw\",\n \"border-radius\": \"12px\"\n },\n src: file.url,\n onError: $event => file.url = require('@/assets/404.png')\n }, null, 40, _hoisted_12)) : (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [_createVNode(_component_font_awesome_icon, {\n icon: \"file\",\n class: \"file-icon\"\n })]))], 8, _hoisted_9), _createElementVNode(\"div\", _hoisted_14, [_createElementVNode(\"div\", _hoisted_15, [_createVNode(_component_el_text, {\n class: \"upload-list-item-name\",\n truncated: \"\"\n }, {\n default: _withCtx(() => [_createTextVNode(_toDisplayString($options.truncateFilename(file.name)), 1)]),\n _: 2\n }, 1024)]), file.status === 'done' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [_createElementVNode(\"div\", _hoisted_17, [_createVNode(_component_el_input, {\n modelValue: file.finalURL,\n \"onUpdate:modelValue\": $event => file.finalURL = $event,\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[15] || (_cache[15] = [_createTextVNode(\"URL\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: file.mdURL,\n \"onUpdate:modelValue\": $event => file.mdURL = $event,\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[16] || (_cache[16] = [_createTextVNode(\"MarkDown\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onClick\", \"size\"])]), _createElementVNode(\"div\", _hoisted_18, [_createVNode(_component_el_input, {\n modelValue: file.htmlURL,\n \"onUpdate:modelValue\": $event => file.htmlURL = $event,\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[17] || (_cache[17] = [_createTextVNode(\"HTML\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onClick\", \"size\"]), _createVNode(_component_el_input, {\n modelValue: file.ubbURL,\n \"onUpdate:modelValue\": $event => file.ubbURL = $event,\n readonly: \"\",\n onClick: $options.selectAllText,\n size: $options.urlSize\n }, {\n prepend: _withCtx(() => [...(_cache[18] || (_cache[18] = [_createTextVNode(\"BBCode\", -1)]))]),\n _: 1\n }, 8, [\"modelValue\", \"onUpdate:modelValue\", \"onClick\", \"size\"])])])) : (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [_createVNode(_component_el_progress, {\n percentage: file.progreess,\n status: file.status,\n \"show-text\": false\n }, null, 8, [\"percentage\", \"status\"])]))]), _createElementVNode(\"div\", _hoisted_20, [_createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-primary\",\n onClick: $event => $options.handleCopy(file)\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Link)]),\n _: 1\n })], 8, _hoisted_21), _createElementVNode(\"button\", {\n class: \"modern-file-action-btn modern-file-action-btn-danger\",\n onClick: $event => $options.handleRemove(file)\n }, [_createVNode(_component_el_icon, null, {\n default: _withCtx(() => [_createVNode(_component_Delete)]),\n _: 1\n })], 8, _hoisted_22)])]);\n }), 128))]),\n _: 1\n }, 8, [\"onScroll\"])], 2)]),\n _: 1\n }, 8, [\"class\"])]);\n}","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.array-buffer.detached.js\";\nimport \"core-js/modules/es.array-buffer.transfer.js\";\nimport \"core-js/modules/es.array-buffer.transfer-to-fixed-length.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.json.stringify.js\";\nimport \"core-js/modules/es.typed-array.with.js\";\nimport \"core-js/modules/esnext.json.parse.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 \"core-js/modules/web.url-search-params.delete.js\";\nimport \"core-js/modules/web.url-search-params.has.js\";\nimport \"core-js/modules/web.url-search-params.size.js\";\nimport axios from '@/utils/axios';\nimport * as imageConversion from 'image-conversion';\nimport { mapGetters } from 'vuex';\nexport default {\n name: 'UploadForm',\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 if (this.useCustomUrl === 'true') {\n this.fileList.forEach(item => {\n if (item.uploadChannel === 'external') {\n return;\n }\n item.finalURL = this.customUrlPrefix + item.srcID;\n item.mdURL = `![${item.name}](${this.customUrlPrefix + item.srcID})`;\n item.htmlURL = `\"${item.name}\"`;\n item.ubbURL = `[img]${this.customUrlPrefix + item.srcID}[/img]`;\n });\n } else {\n this.fileList.forEach(item => {\n if (item.uploadChannel === 'external') {\n return;\n }\n item.finalURL = this.rootUrl + item.srcID;\n item.mdURL = `![${item.name}](${this.rootUrl + item.srcID})`;\n item.htmlURL = `\"${item.name}\"`;\n item.ubbURL = `[img]${this.rootUrl + item.srcID}[/img]`;\n });\n }\n },\n immediate: true\n },\n customUrlPrefix: {\n handler() {\n if (this.useCustomUrl === 'true') {\n this.fileList.forEach(item => {\n if (item.uploadChannel === 'external') {\n return;\n }\n item.finalURL = this.customUrlPrefix + item.srcID;\n item.mdURL = `![${item.name}](${this.customUrlPrefix + item.srcID})`;\n item.htmlURL = `\"${item.name}\"`;\n item.ubbURL = `[img]${this.customUrlPrefix + item.srcID}[/img]`;\n });\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 this.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=' + 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 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 this.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', file.file.type);\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=' + this.uploadFolder + '&initChunked=true',\n method: 'post',\n data: initFormData,\n withAuthCode: true\n });\n if (!initResponse.data.success) {\n throw new Error('初始化分块上传失败: ' + 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', file.file.type);\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=' + 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 || '上传过程中发生错误');\n }\n\n // 第三步:所有分块上传完成,发送合并请求\n this.$message({\n type: 'info',\n message: '分块上传完成,正在合并文件,请耐心等待...',\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', file.file.type);\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=' + 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.truncateFilename(file.name) + '已删除'\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 fileItem.finalURL = this.rootUrl + srcID;\n fileItem.mdURL = `![${file.name}](${this.rootUrl + srcID})`;\n fileItem.htmlURL = `\"${file.name}\"`;\n fileItem.ubbURL = `[img]${this.rootUrl + srcID}[/img]`;\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.truncateFilename(file.name) + '上传成功'\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.truncateFilename(file.name) + '上传失败');\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.truncateFilename(file.name) + '上传失败');\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: '文件未上传成功,无法复制链接'\n });\n return;\n }\n if (this.selectedUrlForm === 'url') {\n navigator.clipboard.writeText(file.finalURL);\n } else if (this.selectedUrlForm === 'md') {\n navigator.clipboard.writeText(file.mdURL);\n } else if (this.selectedUrlForm === 'html') {\n navigator.clipboard.writeText(file.htmlURL);\n } else if (this.selectedUrlForm === 'ubb') {\n navigator.clipboard.writeText(file.ubbURL);\n } else {\n navigator.clipboard.writeText(file.finalURL);\n }\n this.$message({\n type: 'success',\n message: '复制成功'\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(processedFile.name + '压缩后文件过大,无法上传!');\n reject('文件过大');\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(processedFile.name + '压缩失败,无法上传!');\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(processedFile.name + '文件过大,无法上传!');\n reject('文件过大');\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 if (this.selectedUrlForm === 'url') {\n const urls = this.fileList.map(item => {\n if (item.status === 'done' || item.status === 'success') {\n return item.finalURL;\n }\n }).join('\\n');\n navigator.clipboard.writeText(urls);\n } else if (this.selectedUrlForm === 'md') {\n const urls = this.fileList.map(item => {\n if (item.status === 'done' || item.status === 'success') {\n return item.mdURL;\n }\n }).join('\\n');\n navigator.clipboard.writeText(urls);\n } else if (this.selectedUrlForm === 'html') {\n const urls = this.fileList.map(item => {\n if (item.status === 'done' || item.status === 'success') {\n return item.htmlURL;\n }\n }).join('\\n');\n navigator.clipboard.writeText(urls);\n } else if (this.selectedUrlForm === 'ubb') {\n const urls = this.fileList.map(item => {\n if (item.status === 'done' || item.status === 'success') {\n return item.ubbURL;\n }\n }).join('\\n');\n navigator.clipboard.writeText(urls);\n } else {\n const urls = this.fileList.map(item => {\n if (item.status === 'done' || item.status === 'success') {\n return item.finalURL;\n }\n }).join('\\n');\n navigator.clipboard.writeText(urls);\n }\n this.$message({\n type: 'success',\n message: '整体复制成功'\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: '文件列表已清空'\n });\n } else {\n this.$message({\n type: 'info',\n message: '文件列表为空'\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: '成功上传文件已清空'\n });\n } else {\n this.$message({\n type: 'info',\n message: '成功上传文件为空'\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 }).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: '粘贴板中的URL地址请求失败'\n });\n });\n }\n });\n }\n }\n },\n selectAllText(event) {\n // 复制到剪贴板\n navigator.clipboard.writeText(event.target.value).then(() => {\n this.$message({\n type: 'success',\n message: '复制成功'\n });\n }).catch(() => {\n this.$message({\n type: 'error',\n message: '复制失败'\n });\n });\n },\n // 判断是否为图片类型\n isImage(fileName) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff', 'ico', 'avif', 'heic', 'jfif', 'pjpeg', 'pjp', 'raw', 'cr2', 'nef', 'dng', 'eps', 'ai', 'emf', 'wmf'];\n const extension = fileName.split('.').pop().toLowerCase();\n return imageExtensions.includes(extension);\n },\n // 判断是否为视频类型\n isVideo(fileName) {\n const videoExtensions = ['mp4', 'webm', 'ogg', 'mkv'];\n const extension = fileName.split('.').pop().toLowerCase();\n return videoExtensions.includes(extension);\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: '无上传失败文件'\n });\n }\n },\n handleAutoRetryChange(val) {\n this.$message({\n type: val ? 'success' : 'info',\n message: val ? '自动重试已开启' : '自动重试已关闭'\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: `${file.name} 已达到最大重试次数(${this.maxRetryCount}),停止重试`\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 this.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: '/api/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: '/api/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 // 计算文件的 SHA256 哈希(用于 HuggingFace 上传)\n // 使用增量哈希算法,支持任意大小文件\n async computeSha256(file) {\n // 使用纯 JavaScript 实现的增量 SHA256\n // 这样可以分块处理大文件,避免内存溢出\n const sha256 = this.createSha256();\n const CHUNK_SIZE = 4 * 1024 * 1024; // 4MB chunks - 更小的块减少内存压力\n let offset = 0;\n while (offset < file.size) {\n const chunk = file.slice(offset, Math.min(offset + CHUNK_SIZE, file.size));\n const buffer = await chunk.arrayBuffer();\n sha256.update(new Uint8Array(buffer));\n offset += CHUNK_SIZE;\n\n // 每处理 20MB 打印一次进度\n if (offset % (20 * 1024 * 1024) < CHUNK_SIZE) {\n console.log(`SHA256 progress: ${Math.min(100, Math.round(offset / file.size * 100))}%`);\n }\n }\n return sha256.digest();\n },\n // 创建增量 SHA256 哈希器(纯 JavaScript 实现)\n createSha256() {\n // SHA256 常量\n const K = new Uint32Array([0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]);\n let H = new Uint32Array([0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19]);\n let buffer = new Uint8Array(64);\n let bufferLength = 0;\n let totalLength = 0;\n const rotr = (x, n) => x >>> n | x << 32 - n;\n const processBlock = block => {\n const W = new Uint32Array(64);\n for (let i = 0; i < 16; i++) {\n W[i] = block[i * 4] << 24 | block[i * 4 + 1] << 16 | block[i * 4 + 2] << 8 | block[i * 4 + 3];\n }\n for (let i = 16; i < 64; i++) {\n const s0 = rotr(W[i - 15], 7) ^ rotr(W[i - 15], 18) ^ W[i - 15] >>> 3;\n const s1 = rotr(W[i - 2], 17) ^ rotr(W[i - 2], 19) ^ W[i - 2] >>> 10;\n W[i] = W[i - 16] + s0 + W[i - 7] + s1 >>> 0;\n }\n let [a, b, c, d, e, f, g, h] = H;\n for (let i = 0; i < 64; i++) {\n const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);\n const ch = e & f ^ ~e & g;\n const temp1 = h + S1 + ch + K[i] + W[i] >>> 0;\n const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);\n const maj = a & b ^ a & c ^ b & c;\n const temp2 = S0 + maj >>> 0;\n h = g;\n g = f;\n f = e;\n e = d + temp1 >>> 0;\n d = c;\n c = b;\n b = a;\n a = temp1 + temp2 >>> 0;\n }\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n H[5] = H[5] + f >>> 0;\n H[6] = H[6] + g >>> 0;\n H[7] = H[7] + h >>> 0;\n };\n return {\n update(data) {\n totalLength += data.length;\n let offset = 0;\n if (bufferLength > 0) {\n const needed = 64 - bufferLength;\n const toCopy = Math.min(needed, data.length);\n buffer.set(data.subarray(0, toCopy), bufferLength);\n bufferLength += toCopy;\n offset = toCopy;\n if (bufferLength === 64) {\n processBlock(buffer);\n bufferLength = 0;\n }\n }\n while (offset + 64 <= data.length) {\n processBlock(data.subarray(offset, offset + 64));\n offset += 64;\n }\n if (offset < data.length) {\n buffer.set(data.subarray(offset), 0);\n bufferLength = data.length - offset;\n }\n },\n digest() {\n const bitLength = totalLength * 8;\n\n // Padding\n buffer[bufferLength++] = 0x80;\n if (bufferLength > 56) {\n buffer.fill(0, bufferLength, 64);\n processBlock(buffer);\n bufferLength = 0;\n }\n buffer.fill(0, bufferLength, 56);\n\n // Length in bits (big-endian, 64-bit)\n const view = new DataView(buffer.buffer);\n view.setUint32(56, Math.floor(bitLength / 0x100000000), false);\n view.setUint32(60, bitLength >>> 0, false);\n processBlock(buffer);\n\n // Convert to hex\n let hex = '';\n for (let i = 0; i < 8; i++) {\n hex += H[i].toString(16).padStart(8, '0');\n }\n return hex;\n }\n };\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('图片加载失败'));\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=7444b7c2&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=7444b7c2&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-7444b7c2\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, createVNode as _createVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment } from \"vue\";\nconst _hoisted_1 = {\n class: \"container\"\n};\nconst _hoisted_2 = {\n class: \"upload-home\"\n};\nconst _hoisted_3 = {\n href: \"https://cfbed.sanyue.de/qa/\",\n target: \"_blank\",\n class: \"info-container\"\n};\nconst _hoisted_4 = {\n class: \"toolbar-manage\"\n};\nconst _hoisted_5 = {\n class: \"toolbar\"\n};\nconst _hoisted_6 = {\n class: \"header\"\n};\nconst _hoisted_7 = {\n class: \"title\"\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-content\"\n};\nconst _hoisted_11 = {\n class: \"dialog-section\"\n};\nconst _hoisted_12 = {\n class: \"section-header\"\n};\nconst _hoisted_13 = {\n class: \"section-content\"\n};\nconst _hoisted_14 = {\n class: \"setting-item\"\n};\nconst _hoisted_15 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_16 = {\n class: \"dialog-action\"\n};\nconst _hoisted_17 = {\n class: \"dialog-section\"\n};\nconst _hoisted_18 = {\n class: \"section-content\"\n};\nconst _hoisted_19 = {\n class: \"setting-item\"\n};\nconst _hoisted_20 = {\n key: 0,\n class: \"setting-item\"\n};\nconst _hoisted_21 = {\n class: \"setting-label\"\n};\nconst _hoisted_22 = {\n class: \"setting-item\"\n};\nconst _hoisted_23 = {\n class: \"setting-item\"\n};\nconst _hoisted_24 = {\n class: \"setting-label\"\n};\nconst _hoisted_25 = {\n class: \"dialog-section\"\n};\nconst _hoisted_26 = {\n class: \"section-content\"\n};\nconst _hoisted_27 = {\n class: \"dialog-section\"\n};\nconst _hoisted_28 = {\n class: \"section-header\"\n};\nconst _hoisted_29 = {\n class: \"section-content\"\n};\nconst _hoisted_30 = {\n class: \"setting-item\"\n};\nconst _hoisted_31 = {\n class: \"setting-label\"\n};\nconst _hoisted_32 = {\n class: \"setting-item\"\n};\nconst _hoisted_33 = {\n key: 0,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_34 = {\n class: \"setting-label\"\n};\nconst _hoisted_35 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_36 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_37 = {\n key: 1,\n class: \"setting-item slider-item\"\n};\nconst _hoisted_38 = {\n class: \"setting-label\"\n};\nconst _hoisted_39 = {\n class: \"slider-wrapper\"\n};\nconst _hoisted_40 = {\n class: \"slider-input-wrapper\"\n};\nconst _hoisted_41 = {\n key: 0,\n class: \"dialog-section\"\n};\nconst _hoisted_42 = {\n class: \"section-header\"\n};\nconst _hoisted_43 = {\n class: \"section-content\"\n};\nconst _hoisted_44 = {\n class: \"setting-item\"\n};\nconst _hoisted_45 = {\n class: \"dialog-action\"\n};\nconst _hoisted_46 = [\"innerHTML\"];\nconst _hoisted_47 = {\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_tooltip = _resolveComponent(\"el-tooltip\");\n const _component_el_input = _resolveComponent(\"el-input\");\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_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_el_option = _resolveComponent(\"el-option\");\n const _component_el_select = _resolveComponent(\"el-select\");\n const _component_el_slider = _resolveComponent(\"el-slider\");\n const _component_el_input_number = _resolveComponent(\"el-input-number\");\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_tooltip, {\n content: \"查看文档\",\n placement: \"bottom\",\n disabled: $options.disableTooltip\n }, {\n default: _withCtx(() => [_createElementVNode(\"a\", _hoisted_3, [_createVNode(_component_font_awesome_icon, {\n icon: \"book\",\n class: \"info-icon\",\n size: \"lg\"\n })])]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_input, {\n class: _normalizeClass([\"upload-folder\", {\n 'active': $data.isFolderInputActive,\n 'no-announcement': !$options.announcementAvailable\n }]),\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => $data.uploadFolder = $event),\n placeholder: \"上传目录\",\n onFocus: _cache[1] || (_cache[1] = $event => $data.isFolderInputActive = true),\n onBlur: _cache[2] || (_cache[2] = $event => $data.isFolderInputActive = false)\n }, null, 8, [\"class\", \"modelValue\"]), _createVNode(_component_el_tooltip, {\n content: \"切换上传方式\",\n placement: \"bottom\",\n disabled: $options.disableTooltip\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, [\"disabled\"]), _createVNode(_component_el_tooltip, {\n content: \"上传记录\",\n placement: \"bottom\",\n disabled: $options.disableTooltip\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"history-button desktop-only\",\n onClick: _cache[3] || (_cache[3] = $event => $data.showHistory = true)\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"history\",\n class: \"history-icon\",\n size: \"lg\"\n })]),\n _: 1\n })]),\n _: 1\n }, 8, [\"disabled\"]), $options.announcementAvailable ? (_openBlock(), _createBlock(_component_el_tooltip, {\n key: 0,\n content: \"查看公告\",\n placement: \"bottom\",\n disabled: $options.disableTooltip\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: \"announcement-button desktop-only\",\n onClick: $options.handleShowAnnouncement\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"bullhorn\",\n class: \"announcement-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"onClick\"])]),\n _: 1\n }, 8, [\"disabled\"])) : _createCommentVNode(\"\", true), _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 \"margin-right\": \"8px\"\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 \"margin-right\": \"8px\"\n }\n }, null, 8, [\"icon\"]), _createTextVNode(\" \" + _toDisplayString($data.uploadMethod === 'default' ? '粘贴上传' : '文件上传'), 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 \"margin-right\": \"8px\"\n }\n }), _cache[26] || (_cache[26] = _createTextVNode(\" 上传记录 \", -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 \"margin-right\": \"8px\"\n }\n }), _cache[27] || (_cache[27] = _createTextVNode(\" 查看公告 \", -1))]),\n _: 1\n }, 8, [\"disabled\"])]),\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\", _hoisted_4, [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-manage-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.handleOpenToolbar,\n circle: \"\"\n }, {\n default: _withCtx(() => [!$data.isToolBarOpen ? (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 0,\n icon: \"bars\",\n class: \"manage-icon\",\n size: \"lg\"\n })) : (_openBlock(), _createBlock(_component_font_awesome_icon, {\n key: 1,\n icon: \"times\",\n class: \"manage-icon\",\n size: \"lg\"\n }))]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]), _createElementVNode(\"div\", _hoisted_5, [_createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"上传设置\",\n placement: \"top\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-button compress-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.openCompressDialog,\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cloud-upload\",\n class: \"compress-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"链接格式\",\n placement: \"left\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-button link-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.openUrlDialog,\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"link\",\n class: \"link-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"系统管理\",\n placement: \"left\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-button config-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.handleManage,\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"cog\",\n class: \"config-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\"]), _createVNode(_component_el_tooltip, {\n disabled: $options.disableTooltip,\n content: \"退出登录\",\n placement: \"left\"\n }, {\n default: _withCtx(() => [_createVNode(_component_el_button, {\n class: _normalizeClass([\"toolbar-button sign-out-button\", {\n 'active': $data.isToolBarOpen\n }]),\n size: \"large\",\n onClick: $options.handleLogout,\n circle: \"\"\n }, {\n default: _withCtx(() => [_createVNode(_component_font_awesome_icon, {\n icon: \"sign-out-alt\",\n class: \"sign-out-icon\",\n size: \"lg\"\n })]),\n _: 1\n }, 8, [\"class\", \"onClick\"])]),\n _: 1\n }, 8, [\"disabled\"])]), _createElementVNode(\"div\", _hoisted_6, [_createVNode(_component_Logo, {\n useConfigLink: true\n }), _createElementVNode(\"h1\", _hoisted_7, [_createElementVNode(\"a\", _hoisted_8, _toDisplayString($options.ownerName), 1), _cache[28] || (_cache[28] = _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: \"链接格式设置\",\n modelValue: $data.showUrlDialog,\n \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => $data.showUrlDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_9, [_cache[33] || (_cache[33] = _createElementVNode(\"div\", {\n class: \"section-header\"\n }, [_createElementVNode(\"span\", {\n class: \"section-title\"\n }, \"默认复制链接\")], -1)), _createElementVNode(\"div\", _hoisted_10, [_createVNode(_component_el_radio_group, {\n modelValue: $data.selectedUrlForm,\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $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 }), _cache[29] || (_cache[29] = _createElementVNode(\"span\", null, \"原始链接\", -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[30] || (_cache[30] = _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[31] || (_cache[31] = _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[32] || (_cache[32] = _createElementVNode(\"span\", null, \"BBCode\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\", \"onChange\"])])]), _createElementVNode(\"div\", _hoisted_11, [_createElementVNode(\"div\", _hoisted_12, [_cache[34] || (_cache[34] = _createElementVNode(\"span\", {\n class: \"section-title\"\n }, \"自定义链接\", -1)), _createVNode(_component_el_tooltip, {\n content: \"默认链接为https://your.domain/file/xxx.jpg
如果启用自定义链接格式,只保留xxx.jpg部分,其他部分请自行输入\",\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 })]), _createElementVNode(\"div\", _hoisted_13, [_createElementVNode(\"div\", _hoisted_14, [_cache[35] || (_cache[35] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"启用自定义\", -1)), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [_cache[36] || (_cache[36] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"自定义前缀\", -1)), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => $data.customUrlPrefix = $event),\n placeholder: \"请输入自定义链接前缀\",\n class: \"setting-input\"\n }, null, 8, [\"modelValue\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_16, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[7] || (_cache[7] = $event => $data.showUrlDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [...(_cache[37] || (_cache[37] = [_createTextVNode(\"确定\", -1)]))]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"modelValue\", \"width\"]), _createVNode(_component_el_dialog, {\n title: \"上传设置\",\n modelValue: $data.showCompressDialog,\n \"onUpdate:modelValue\": _cache[22] || (_cache[22] = $event => $data.showCompressDialog = $event),\n width: $options.dialogWidth,\n \"show-close\": false,\n class: \"settings-dialog\"\n }, {\n default: _withCtx(() => [_createElementVNode(\"div\", _hoisted_17, [_cache[47] || (_cache[47] = _createElementVNode(\"div\", {\n class: \"section-header\"\n }, [_createElementVNode(\"span\", {\n class: \"section-title\"\n }, \"上传渠道\")], -1)), _createElementVNode(\"div\", _hoisted_18, [_createElementVNode(\"div\", _hoisted_19, [_cache[43] || (_cache[43] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"渠道类型\", -1)), _createVNode(_component_el_radio_group, {\n modelValue: $data.uploadChannel,\n \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => $data.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_font_awesome_icon, {\n icon: \"paper-plane\",\n class: \"channel-icon\"\n }), _cache[38] || (_cache[38] = _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_font_awesome_icon, {\n icon: \"cloud\",\n class: \"channel-icon\"\n }), _cache[39] || (_cache[39] = _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_font_awesome_icon, {\n icon: \"database\",\n class: \"channel-icon\"\n }), _cache[40] || (_cache[40] = _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_font_awesome_icon, {\n icon: \"comments\",\n class: \"channel-icon\"\n }), _cache[41] || (_cache[41] = _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_font_awesome_icon, {\n icon: \"robot\",\n class: \"channel-icon\"\n }), _cache[42] || (_cache[42] = _createElementVNode(\"span\", null, \"HF\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])]), $options.currentChannelList.length > 1 ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [_createElementVNode(\"span\", _hoisted_21, [_cache[44] || (_cache[44] = _createTextVNode(\" 渠道名称 \", -1)), _createVNode(_component_el_tooltip, {\n content: \"选择具体的渠道名称,不选择则使用负载均衡或默认渠道\",\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 })]), _createVNode(_component_el_select, {\n modelValue: $data.channelName,\n \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => $data.channelName = $event),\n placeholder: \"自动选择\",\n clearable: \"\",\n class: \"setting-input\"\n }, {\n default: _withCtx(() => [(_openBlock(true), _createElementBlock(_Fragment, null, _renderList($options.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, [\"modelValue\"])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_22, [_cache[45] || (_cache[45] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"上传目录\", -1)), _createVNode(_component_el_input, {\n modelValue: $data.uploadFolder,\n \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => $data.uploadFolder = $event),\n placeholder: \"请输入上传目录路径\",\n class: \"setting-input\"\n }, null, 8, [\"modelValue\"])]), _createElementVNode(\"div\", _hoisted_23, [_createElementVNode(\"span\", _hoisted_24, [_cache[46] || (_cache[46] = _createTextVNode(\" 自动切换 \", -1)), _createVNode(_component_el_tooltip, {\n content: \"对于非分块上传文件,上传失败自动切换到其他渠道上传\",\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 })]), _createVNode(_component_el_switch, {\n modelValue: $data.autoRetry,\n \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => $data.autoRetry = $event)\n }, null, 8, [\"modelValue\"])])])]), _createElementVNode(\"div\", _hoisted_25, [_cache[52] || (_cache[52] = _createElementVNode(\"div\", {\n class: \"section-header\"\n }, [_createElementVNode(\"span\", {\n class: \"section-title\"\n }, \"文件命名方式\")], -1)), _createElementVNode(\"div\", _hoisted_26, [_createVNode(_component_el_radio_group, {\n modelValue: $data.uploadNameType,\n \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => $data.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 }), _cache[48] || (_cache[48] = _createElementVNode(\"span\", null, \"默认\", -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 }), _cache[49] || (_cache[49] = _createElementVNode(\"span\", null, \"仅前缀\", -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 }), _cache[50] || (_cache[50] = _createElementVNode(\"span\", null, \"仅原名\", -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 }), _cache[51] || (_cache[51] = _createElementVNode(\"span\", null, \"短链接\", -1))]),\n _: 1\n })]),\n _: 1\n }, 8, [\"modelValue\"])])]), _createElementVNode(\"div\", _hoisted_27, [_createElementVNode(\"div\", _hoisted_28, [_cache[53] || (_cache[53] = _createElementVNode(\"span\", {\n class: \"section-title\"\n }, \"文件预处理\", -1)), _createVNode(_component_el_tooltip, {\n content: \"上传前在本地进行格式转换和压缩,仅对图片文件生效\",\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 })]), _createElementVNode(\"div\", _hoisted_29, [_createElementVNode(\"div\", _hoisted_30, [_createElementVNode(\"span\", _hoisted_31, [_cache[54] || (_cache[54] = _createTextVNode(\" 转换为WebP \", -1)), _createVNode(_component_el_tooltip, {\n content: \"上传前将图片转换为WebP格式,可有效减小文件体积。转换失败时保持原格式上传\",\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 })]), _createVNode(_component_el_switch, {\n modelValue: $data.convertToWebp,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.convertToWebp = $event)\n }, null, 8, [\"modelValue\"])]), _createElementVNode(\"div\", _hoisted_32, [_cache[55] || (_cache[55] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"文件压缩\", -1)), _createVNode(_component_el_switch, {\n modelValue: $data.customerCompress,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.customerCompress = $event)\n }, null, 8, [\"modelValue\"])]), $data.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [_createElementVNode(\"span\", _hoisted_34, [_cache[56] || (_cache[56] = _createTextVNode(\" 压缩阈值 \", -1)), _createVNode(_component_el_tooltip, {\n content: \"设置图片大小阈值,超过此值将自动压缩,单位MB\",\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 })]), _createElementVNode(\"div\", _hoisted_35, [_createVNode(_component_el_slider, {\n modelValue: $data.compressBar,\n \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => $data.compressBar = $event),\n min: 1,\n max: 20,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"modelValue\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_36, [_createVNode(_component_el_input_number, {\n modelValue: $data.compressBar,\n \"onUpdate:modelValue\": _cache[17] || (_cache[17] = $event => $data.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, [\"modelValue\"]), _cache[57] || (_cache[57] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true), $data.customerCompress ? (_openBlock(), _createElementBlock(\"div\", _hoisted_37, [_createElementVNode(\"span\", _hoisted_38, [_cache[58] || (_cache[58] = _createTextVNode(\" 期望大小 \", -1)), _createVNode(_component_el_tooltip, {\n content: \"设置压缩后图片大小期望值,单位MB\",\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 })]), _createElementVNode(\"div\", _hoisted_39, [_createVNode(_component_el_slider, {\n modelValue: $data.compressQuality,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.compressQuality = $event),\n min: 0.5,\n max: $data.compressBar,\n step: 0.1,\n \"format-tooltip\": value => `${value} MB`\n }, null, 8, [\"modelValue\", \"max\", \"format-tooltip\"]), _createElementVNode(\"div\", _hoisted_40, [_createVNode(_component_el_input_number, {\n modelValue: $data.compressQuality,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.compressQuality = $event),\n min: 0.5,\n max: $data.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, [\"modelValue\", \"max\"]), _cache[59] || (_cache[59] = _createElementVNode(\"span\", {\n class: \"slider-unit\"\n }, \"MB\", -1))])])])) : _createCommentVNode(\"\", true)])]), $data.uploadChannel === 'telegram' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_41, [_createElementVNode(\"div\", _hoisted_42, [_cache[60] || (_cache[60] = _createElementVNode(\"span\", {\n class: \"section-title\"\n }, \"服务端压缩\", -1)), _createVNode(_component_el_tooltip, {\n content: \"1. 在 Telegram 端进行压缩,仅对上传渠道为 Telegram 的图片文件生效
2. 若图片大小(本地压缩后大小)大于10MB,本设置自动失效
3. 若上传分辨率过大、透明背景等图片,建议关闭服务端压缩,否则可能出现未知问题\",\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 })]), _createElementVNode(\"div\", _hoisted_43, [_createElementVNode(\"div\", _hoisted_44, [_cache[61] || (_cache[61] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"开启压缩\", -1)), _createVNode(_component_el_switch, {\n modelValue: $data.serverCompress,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.serverCompress = $event)\n }, null, 8, [\"modelValue\"])])])])) : _createCommentVNode(\"\", true), _createElementVNode(\"div\", _hoisted_45, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[21] || (_cache[21] = $event => $data.showCompressDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [...(_cache[62] || (_cache[62] = [_createTextVNode(\"确定\", -1)]))]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"modelValue\", \"width\"])]), _createVNode(_component_Footer, {\n class: \"footer\"\n }), _createVNode(_component_el_dialog, {\n title: \"公告\",\n modelValue: $data.showAnnouncementDialog,\n \"onUpdate:modelValue\": _cache[24] || (_cache[24] = $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_47, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[23] || (_cache[23] = $event => $data.showAnnouncementDialog = false)\n }, {\n default: _withCtx(() => [...(_cache[63] || (_cache[63] = [_createTextVNode(\"我已知晓!\", -1)]))]),\n _: 1\n })])]),\n default: _withCtx(() => [_createElementVNode(\"div\", {\n innerHTML: $data.announcementContent\n }, null, 8, _hoisted_46)]),\n _: 1\n }, 8, [\"modelValue\", \"width\"]), _createVNode(_component_UploadHistory, {\n show: $data.showHistory,\n onClose: _cache[25] || (_cache[25] = $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.for-each.js\";\nimport \"core-js/modules/es.iterator.some.js\";\nimport UploadForm from '@/components/UploadForm.vue';\nimport Footer from '@/components/Footer.vue';\nimport ToggleDark from '@/components/ToggleDark.vue';\nimport Logo from '@/components/Logo.vue';\nimport UploadHistory from '@/components/UploadHistory.vue';\nimport backgroundManager from '@/mixins/backgroundManager';\nimport axios from '@/utils/axios';\nimport { ref } from 'vue';\nimport cookies from 'vue-cookies';\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 isToolBarOpen: false,\n //是否打开工具栏\n uploadMethod: 'default',\n //上传方式\n uploadFolder: '',\n // 上传文件夹\n isFolderInputActive: false,\n showAnnouncementDialog: false,\n // 控制公告弹窗的显示\n announcementContent: '',\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 // 验证上传文件夹路径的合法性\n if (this.validateUploadFolder(val)) {\n this.$store.commit('setStoreUploadFolder', val);\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 // 当前渠道类型对应的渠道列表\n currentChannelList() {\n return this.availableChannels[this.uploadChannel] || [];\n }\n },\n mounted() {\n // 初始化背景图,启用自动创建元素\n this.initializeBackground('uploadBkImg', '.container', false, 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\n // 首次访问公告\n const visited = localStorage.getItem('visitedUploadHome');\n const announcement = this.userConfig?.announcement;\n if (!visited && announcement) {\n this.announcementContent = announcement;\n this.showAnnouncementDialog = true;\n localStorage.setItem('visitedUploadHome', 'true');\n }\n },\n components: {\n UploadForm,\n Footer,\n ToggleDark,\n Logo,\n UploadHistory\n },\n methods: {\n // 获取可用渠道列表\n async fetchAvailableChannels() {\n try {\n const response = await axios.get('/api/channels');\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) {\n const result = validateFolderPath(path);\n if (!result.valid) {\n // 将错误消息中的\"目标目录\"替换为\"上传目录\"以保持原有的提示风格\n const errorMessage = result.error.replace('目标目录', '上传目录');\n this.$message.error(errorMessage);\n return false;\n }\n return true;\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 cookies.remove('authCode');\n this.$router.push('/login');\n this.$message.success('已退出登录');\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 handleOpenToolbar() {\n this.isToolBarOpen = !this.isToolBarOpen;\n // 等过渡动画结束,向active类添加pointer-events属性,使其可以点击\n setTimeout(() => {\n const buttons = document.querySelectorAll('.toolbar-button');\n buttons.forEach(button => {\n button.style.pointerEvents = this.isToolBarOpen ? 'auto' : 'none';\n });\n }, 300);\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 === 'showHistory') {\n this.showHistory = true;\n } else if (command === 'showAnnouncement') {\n this.handleShowAnnouncement();\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 '浅色模式';\n if (this.themeMode === 'light') return '深色模式';\n return '自动模式';\n },\n handleShowAnnouncement() {\n const announcement = this.userConfig?.announcement;\n if (announcement) {\n this.announcementContent = announcement;\n this.showAnnouncementDialog = true;\n } else {\n this.$message.info('暂无公告');\n }\n }\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./UploadHome.vue?vue&type=template&id=735d07b2&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=735d07b2&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-735d07b2\"]])\n\nexport default __exports__","module.exports = require(\"./build/conversion.js\");\n"],"names":["t","e","module","exports","this","n","r","o","i","l","call","m","c","d","Object","defineProperty","enumerable","get","Symbol","toStringTag","value","__esModule","create","bind","default","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","type","Image","onload","onerror","Error","src","document","createElement","href","window","URL","createObjectURL","download","Date","now","toString","body","appendChild","createEvent","initEvent","dispatchEvent","removeChild","FileReader","onloadend","target","result","readAsDataURL","h","assign","getContext","Number","scale","width","height","orientation","rotate","Math","PI","drawImage","translate","fetch","blob","y","quality","isNaN","size","accuracy","filter","sort","abs","pow","v","validateFolderPath","path","trim","valid","startsWith","error","invalidChars","test","includes","_hoisted_1","class","_hoisted_2","_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","render","_ctx","_cache","$props","$setup","$data","$options","_component_font_awesome_icon","_component_el_button","_component_el_tooltip","show","totalCount","content","placement","circle","onClick","toggleViewMode","icon","viewMode","_","clearHistory","$event","$emit","historyList","ref","onScroll","args","handleScroll","groupedHistory","group","date","items","item","time","isImage","name","url","loading","onError","handleImageError","isVideo","muted","copyLink","openLink","deleteItem","title","formatTime","hasMore","loadingMore","spin","props","Boolean","data","allHistory","pageSize","currentPage","watch","val","resetAndLoad","computed","groups","forEach","dateStr","getFullYear","String","getMonth","padStart","getDate","push","keys","map","mounted","savedMode","localStorage","getItem","methods","loadAllHistory","loadMore","history","JSON","parse","console","setTimeout","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","__exports__","style","autoplay","playsinline","loop","_component_CameraFilled","_component_el_icon","_component_el_upload","_component_el_input","_component_el_radio_button","_component_el_radio_group","_component_el_card","_component_List","_component_Checked","_component_Failed","_component_el_text","_component_el_switch","_component_el_dropdown_item","_component_el_dropdown_menu","_component_el_dropdown","_component_el_progress","_component_Link","_component_Delete","_component_el_scrollbar","onMousemove","handleUploadCardMouseMove","onMouseleave","handleUploadCardMouseLeave","uploadMethod","uploading","fileList","drag","multiple","uploadFile","onSuccess","handleSuccess","handleError","beforeUpload","handleProgress","modelValue","pastedUrls","placeholder","rows","pasteCardMethodButtonSize","handleUploadPasteUrls","pasteUploadMethod","label","listScrolled","uploadingCount","waitingCount","uploadSuccessCount","uploadErrorCount","disabled","disableTooltip","copyAll","dropdown","autoReUpload","onChange","handleAutoRetryChange","retryError","clearFileList","clearSuccessList","reverse","file","span","truncated","truncateFilename","status","finalURL","readonly","selectAllText","urlSize","prepend","mdURL","htmlURL","ubbURL","percentage","progreess","handleCopy","handleRemove","selectedUrlForm","required","customerCompress","compressQuality","compressBar","serverCompress","uploadChannel","channelName","uploadNameType","useCustomUrl","customUrlPrefix","autoRetry","urlPrefix","uploadFolder","convertToWebp","maxUploading","exceptionList","fileListLength","uploadCount","maxRetryCount","retryTimer","retryDelay","uploadQueue","activeUploads","maxConcurrentUploads","abortControllers","Map","handler","$nextTick","$refs","scrollContainer","setScrollTop","deep","srcID","rootUrl","immediate","$store","commit","innerWidth","location","protocol","host","addEventListener","handlePaste","storeAutoReUpload","beforeUnmount","removeEventListener","filename","maxLength","lastDotIndex","lastIndexOf","ext","substring","keepEnd","keepStart","find","uid","waitingItem","uploadingItem","fileItem","uploadSingleFile","HF_DIRECT_THRESHOLD","uploadToHuggingFaceDirect","DISCORD_CHUNK_THRESHOLD","uploadFileInChunks","CHUNK_THRESHOLD","processUploadQueue","nextFile","shift","onUploadComplete","max","needServerCompress","abortController","AbortController","set","formData","FormData","append","log","sha256","computeSha256","err","axios","encodeURIComponent","method","withAuthCode","signal","onUploadProgress","progressEvent","percentCompleted","round","loaded","total","onProgress","percent","res","code","response","finally","delete","CHUNK_SIZE","fileSize","totalChunks","ceil","precomputedSha256","initFormData","initResponse","message","uploadId","maxConcurrency","chunkProgress","Array","fill","nextChunkIndex","hasError","errorMsg","isCancelled","uploadChunk","async","chunkIndex","min","chunk","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","event","urls","join","controller","clear","tagName","clipboardData","uploadFromUrl","validUrls","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","arrayBuffer","fileSample","btoa","fromCharCode","uploadInfoRes","fileType","uploadInfo","alreadyExists","needsLfs","uploadAction","header","chunk_size","uploadToHuggingFaceMultipart","uploadRes","ok","commitRes","fullId","filePath","formattedResponse","completionUrl","chunkSize","parseInt","parts","completeParts","totalParts","part","DOMException","index","undefined","etag","partNumber","progress","completeResponse","oid","createSha256","offset","buffer","update","digest","K","Uint32Array","H","bufferLength","totalLength","rotr","x","processBlock","block","W","s0","s1","S1","ch","temp1","S0","maj","temp2","needed","toCopy","subarray","bitLength","view","DataView","setUint32","floor","hex","img","canvas","ctx","originalName","newName","webpFile","revokeObjectURL","glow","uploadCardGlow","rect","currentTarget","getBoundingClientRect","clientX","left","clientY","top","opacity","beforeDestroy","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_component_ToggleDark","_component_Logo","_component_UploadForm","_component_el_radio","_component_el_dialog","_component_el_option","_component_el_select","_component_el_slider","_component_el_input_number","_component_Footer","_component_UploadHistory","isFolderInputActive","announcementAvailable","onFocus","onBlur","handleChangeUploadMethod","showHistory","handleShowAnnouncement","trigger","onCommand","handleMobileMenuCommand","command","getThemeIcon","getThemeText","isToolBarOpen","handleOpenToolbar","openCompressDialog","openUrlDialog","handleManage","handleLogout","useConfigLink","ownerName","showUrlDialog","dialogWidth","changeUrlForm","showCompressDialog","currentChannelList","clearable","step","precision","showAnnouncementDialog","center","footer","innerHTML","announcementContent","onClose","mixins","backgroundManager","availableChannels","useDefaultWallPaper","themeMode","updateCompressConfig","updateStoreUploadChannel","newChannelList","savedChannelName","storeChannelName","updateStoreUploadNameType","validateUploadFolder","storeUploadFolder","userConfig","announcement","initializeBackground","uploadCopyUrlForm","compressConfig","parseBoolean","defaultCustomerCompress","parseNumber","defaultCompressQuality","defaultCompressBar","defaultConvertToWebp","storeUploadChannel","defaultUploadChannel","storeAutoRetry","storeUploadNameType","defaultUploadNameType","customUrlSettings","storeUploadMethod","fetchAvailableChannels","defaultUploadFolder","cusDarkMode","getters","useDarkMode","visited","components","UploadForm","Footer","ToggleDark","Logo","UploadHistory","defaultChannelName","errorMessage","$router","defaultValue","num","parseFloat","buttons","querySelectorAll","button","pointerEvents","info"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/js/280.65ead6f8.js.map.gz b/js/280.65ead6f8.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..2781e5acbaabf8388631f8dbcffaaac57311ac8c GIT binary patch literal 57022 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 diff --git a/js/app.1611e1ad.js.map.gz b/js/app.1611e1ad.js.map.gz deleted file mode 100644 index 52ce68f9122df0815ba7e37cc165c0a9398f8ecc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15723 zcmV-xJ(R*9iwFP!000023eA0McjLy9=wCs&IVS1BkfPp?CU6i3o%G#pto9?hKt zl1&m42yg&UFI(r>d*gVV*hzNdyqw*vlbeS(yRn_!Z0y9&-alh$#-H*R?y0J7paFs! zjqTmLCnp}NAJx_M>gww1#tXRv<_EUt<`$>aT*r1;ZZWqPl&!&_RGF<*SjB3W_JW+6 z>sy0??RJCQV$NRGHZ*lZga4YEwqwA5HT=C{sGFL$sT!IwqZ{g$rrA|>L#w;hRj6*% zRZG(>tk^Qtx@Ju2@Q-PzHBGA{h)o09v;f3`j-wcSlsb-5*R(t89nCn=s{mkS1v}Ld zqX#ox^Bp+N1#(PU&^5sHxkUwr!{l&FEDHRce~Hy^ixxnP&9#jhI@ShPtL{YwC_> z-ngDXY)z|IbahR&>&A((iAZhn9;Tqk*2sT1fs96_%Bfb?&~o0UX^&W1JvEp zGz)Mr28L>=hq|!>m>MP$*`S{roRjMY^tq$1X~y%0>gk&HKv&l^^F#*#8q8PQhFT=d zj%ok|$GHh`h78`rRMRehjq z#*G^P1Ca4_;JY~|u;FNHKoa97GQ0uPxB*=?ZC%XMG*RdP(!RdIX$F)A5T{oz*qtz^H;EfzSw& z88_m20uaO`^DWb<|1{L;MePnE{CAz*M)?S;Ju3tYjlN$3)4RWq%QZeDWM0?Mw61~nxl+9W^{AFjgn;&SgX6h|s%WAuhWXdj9nIL&ZzIfY zztt>l(`U z00sVzjSEAMc!G;!SDzz5^Hpvx)MFFY$10+3MzW^iN~^6sr*5P5-9QS$%D-nKfPIs! z$(Cj~G7~7FK(5pFVdiKp;^-wp~=^DkA6TeJsTFU7OYYEF09)45xaB z6rqVVrfPw!Ll&JmIxifLm!;JgbUvb|$0N>@Y&A>}@Lsioj;}VdCo zSj93M-LDOgyj8WK9-79&Y7ga@nd$Wo4fTnBV#Ho4i@nlGpa?9wd`(1m4BSiZhi+>| z+fesWLZOYT8@z*oH36DvG@FiYpr2?Xw~RgAM6+d~Pt>g8TH4iNK1NTkBbym4Y3823 zhJSfD!az5;;RiebXjkWM0b`OPHl}nz-ijgBO#lgvGN<;GT!q%cm;vdh>6EKd z?KDgaO*mD~$z5l$6l-zF1-Wvb54p(+?aN>vpq3l1A&3*owE?a^#-3qv(jUpShgB#w z28PLTs>rnyRgTjt;dCHZ4y%OI1|M}!uACL4))20z_dw{4+f;j81^#sPEooDXP*6zC z1G7gaU`2vx5@m^-@=%=Q`(g&JDH9GxG6%-V3K&S(p&7TXpx9`*e76RuaGQ*jqZ2V7 zHi-tvD0&n`MBZm#_o>qadWr`i9g$pczrf&I#A)0JP(Kz@w@HKaWXgzTMr�xQkv) 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.withAuthCode){const t=a().get("authCode");t&&(e.headers["authCode"]=t)}return e},e=>Promise.reject(e)),l.interceptors.response.use(e=>e,e=>(e.config?.withAuthCode&&401===e.response?.status&&(i.nk.error("认证失败,请重新登录!"),s.A.push("/login")),Promise.reject(e))),t.A=l},4674:function(e,t,o){o(8111),o(7588);var n=o(5130),r=o(3888),a=o(4068),s=(o(5412),o(372),o(8950)),i=o(2353),l=o(292),u=o(6768);function c(e,t,o,n,r,a){const s=(0,u.g2)("router-view");return(0,u.uX)(),(0,u.Wv)(s)}var d=o(8401),m=o(3785),p={data(){return{osInstance:null,imageViewerObserver:null}},computed:{...(0,d.L8)(["userConfig","useDarkMode"])},mounted(){this.$nextTick(()=>{this.initOverlayScrollbars(),this.setupImageViewerObserver()})},beforeUnmount(){this.imageViewerObserver&&this.imageViewerObserver.disconnect()},watch:{},methods:{initOverlayScrollbars(){try{if(m.ae.valid(document.body))return void(this.osInstance=(0,m.ae)(document.body));this.osInstance=(0,m.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 t=document.querySelector(".el-image-viewer__wrapper");t?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})}}},f=o(1241);const h=(0,f.A)(p,[["render",c]]);var g=h,b=o(6915),v=o(5507),y=o(7477);o(1862),o(635);s.Yv.add(i.X7I);const C=(0,n.Ef)(g),k=(0,r.Zf)();C.component("font-awesome-icon",l.gc);for(const[M,O]of Object.entries(y))C.component(M,O);const w=()=>{const e=document.documentElement;let t;if(v.A.state.cusDarkMode&&null!==v.A.state.useDarkMode)t=v.A.state.useDarkMode;else{if(t=window.matchMedia("(prefers-color-scheme: dark)").matches,!t){const e=new Date,o=e.getHours();t=o>=22||o<6}v.A.commit("setUseDarkMode",t)}t?e.classList.add("dark"):e.classList.remove("dark")},A=e=>{const t=document.documentElement;e?t.classList.add("dark"):t.classList.remove("dark")},U=e=>{document.title=e?.siteTitle||"Sanyue ImgHub"},S=(e,t)=>{const o=document.querySelectorAll('link[rel="icon"], link[rel="apple-touch-icon"], link[rel="mask-icon"]');o.forEach(e=>e.remove());const n=document.createElement("link"),r=document.createElement("link"),a=document.createElement("link");n.rel="icon",r.rel="apple-touch-icon",a.rel="mask-icon",e?(n.href=t?.siteIcon||"/logo-dark.png",r.href=t?.siteIcon||"/logo-dark.png",a.href=t?.siteIcon||"/logo-dark.png"):(n.href=t?.siteIcon||"/logo.png",r.href=t?.siteIcon||"/logo.png",a.href=t?.siteIcon||"/logo.png"),document.head.appendChild(n),document.head.appendChild(r),document.head.appendChild(a)};v.A.dispatch("fetchUserConfig").then(()=>{w(),U(v.A.getters.userConfig),S(v.A.state.useDarkMode,v.A.getters.userConfig),v.A.subscribe((e,t)=>{"setUseDarkMode"===e.type&&v.A.state.cusDarkMode&&(A(t.useDarkMode),S(t.useDarkMode,v.A.getters.userConfig)),"setCusDarkMode"!==e.type||e.payload||(w(),S(v.A.state.useDarkMode,v.A.getters.userConfig))}),C.use(v.A).use(b.A).use(a.A).mount("#app")}).catch(e=>{console.error("Failed to load user configuration:",e),C.use(v.A).use(b.A).use(a.A).use(k).mount("#app")})},5507:function(e,t,o){o(8111),o(1701);var n=o(8401),r=o(457),a=o(5131);t.A=(0,n.y$)({state:{userConfig:null,bingWallPapers:[],credentials:null,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,credentials:e=>e.credentials,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,t){e.userConfig=t},setBingWallPapers(e,t){e.bingWallPapers=t},setCredentials(e,t){e.credentials=t},setUploadMethod(e,t){e.uploadMethod=t},setUploadCopyUrlForm(e,t){e.uploadCopyUrlForm=t},setCompressConfig(e,{key:t,value:o}){e.compressConfig[t]=o},setStoreUploadChannel(e,t){e.storeUploadChannel=t},setStoreChannelName(e,t){e.storeChannelName=t},setStoreUploadNameType(e,t){e.storeUploadNameType=t},setCustomUrlSettings(e,{key:t,value:o}){e.customUrlSettings[t]=o},setStoreAutoRetry(e,t){e.storeAutoRetry=t},setAdminUrlSettings(e,{key:t,value:o}){e.adminUrlSettings[t]=o},setUseDarkMode(e,t){e.useDarkMode=t},setCusDarkMode(e,t){e.cusDarkMode=t},setStoreUploadFolder(e,t){e.uploadFolder=t,localStorage.setItem("uploadFolder",t)},setStoreAutoReUpload(e,t){e.autoReUpload=t}},actions:{async fetchUserConfig({commit:e}){try{const t=await r.A.get("/api/userConfig");e("setUserConfig",t.data)}catch(t){console.log(t)}},async fetchBingWallPapers({commit:e}){try{const t=await r.A.get("/api/bing/wallpaper"),o=t.data.data,n=o.map(e=>({url:"https://www.bing.com"+e.url}));await Promise.all(n.map(e=>new Promise((t,o)=>{const n=new Image;n.onload=t,n.onerror=o,n.src=e.url}))),e("setBingWallPapers",n)}catch(t){console.log(t)}}},modules:{},plugins:[(0,a.A)()]})},6915:function(e,t,o){o(4979);var n=o(8512),r=o(1219),a=o(4570),s=o.n(a),i=o(5507),l=o(457);const u=(e,t,o)=>{const n=i.A.getters.credentials;if(null===n&&"adminLogin"!==e.name){const e=btoa("unset:unset");l.A.get("/api/manage/check",{headers:{Authorization:"Basic "+e},withCredentials:!0}).then(t=>{if(200!==t.status)throw new Error("认证失败!");i.A.commit("setCredentials",e),o()}).catch(e=>{r.nk.error("请先认证!"),o({name:"adminLogin"})})}else o()},c=(e,t,o)=>{let n=s().get("authCode");null===n&&"login"!==e.name?l.A.post("/api/login",{authCode:"unset"}).then(e=>{if(200!==e.status)throw new Error("认证失败!");s().set("authCode","unset","14d"),n="unset",o()}).catch(e=>{r.nk.error("请先认证!"),o({name:"login"})}):o()},d=[{path:"/",name:"home",component:()=>Promise.all([o.e(275),o.e(600),o.e(23)]).then(o.bind(o,9811)),beforeEnter:c},{path:"/login",name:"login",component:()=>Promise.all([o.e(600),o.e(100)]).then(o.bind(o,2560))},{path:"/dashboard",name:"dashboard",component:()=>Promise.all([o.e(275),o.e(866),o.e(157)]).then(o.bind(o,3189)),beforeEnter:u},{path:"/customerConfig",name:"customerConfig",component:()=>Promise.all([o.e(275),o.e(866),o.e(119),o.e(601)]).then(o.bind(o,9601)),beforeEnter:u},{path:"/systemConfig",name:"systemConfig",component:()=>Promise.all([o.e(275),o.e(866),o.e(119),o.e(690)]).then(o.bind(o,7690)),beforeEnter:u},{path:"/adminLogin",name:"adminLogin",component:()=>Promise.all([o.e(600),o.e(214)]).then(o.bind(o,3950))},{path:"/blockimg",name:"blockimg",component:()=>o.e(917).then(o.bind(o,4917))},{path:"/whiteliston",name:"whiteliston",component:()=>o.e(845).then(o.bind(o,7226))},{path:"/browse/:dir*",name:"publicBrowse",component:()=>o.e(667).then(o.bind(o,9667))},{path:"/:pathMatch(.*)*",name:"notFound",component:()=>o.e(226).then(o.bind(o,8226))}],m=(0,n.aE)({history:(0,n.LA)("/"),routes:d});t.A=m}},t={};function o(n){var r=t[n];if(void 0!==r)return r.exports;var a=t[n]={exports:{}};return e[n].call(a.exports,a,a.exports,o),a.exports}o.m=e,function(){var e=[];o.O=function(t,n,r,a){if(!n){var s=1/0;for(c=0;c=a)&&Object.keys(o.O).every(function(e){return o.O[e](n[l])})?n.splice(l--,1):(i=!1,a0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[n,r,a]}}(),function(){o.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return o.d(t,{a:t}),t}}(),function(){o.d=function(e,t){for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}}(),function(){o.f={},o.e=function(e){return Promise.all(Object.keys(o.f).reduce(function(t,n){return o.f[n](e,t),t},[]))}}(),function(){o.u=function(e){return"js/"+e+"."+{23:"180d02c4",100:"d7a2e066",157:"17e1accc",214:"e7ecaacc",226:"f737e39a",600:"3d796c41",601:"87ef6cd3",667:"bbd60d43",690:"ff8af593",845:"1bb9a557",866:"5e45788b",917:"833cbf86"}[e]+".js"}}(),function(){o.miniCssF=function(e){return"css/"+e+"."+{23:"e63939dd",100:"07b87787",119:"2a856832",157:"3f84c0cf",214:"07b87787",226:"6548e7b4",275:"bf4b380e",601:"a3bc9ea4",667:"a3c83e09",690:"6783f34a",845:"6b45e8e3",917:"8529ad1e"}[e]+".css"}}(),function(){o.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="sanyue_imghub:";o.l=function(n,r,a,s){if(e[n])e[n].push(r);else{var i,l;if(void 0!==a)for(var u=document.getElementsByTagName("script"),c=0;c{if(e.withAuthCode){const t=a().get("authCode");t&&(e.headers["authCode"]=t)}return e},e=>Promise.reject(e)),l.interceptors.response.use(e=>e,e=>(e.config?.withAuthCode&&401===e.response?.status&&(i.nk.error("认证失败,请重新登录!"),s.A.push("/login")),Promise.reject(e))),t.A=l},4674:function(e,t,o){o(8111),o(7588);var n=o(5130),r=o(3888),a=o(4068),s=(o(5412),o(372),o(8950)),i=o(2353),l=o(292),u=o(6768);function c(e,t,o,n,r,a){const s=(0,u.g2)("router-view");return(0,u.uX)(),(0,u.Wv)(s)}var d=o(8401),m=o(3785),f={data(){return{osInstance:null,imageViewerObserver:null}},computed:{...(0,d.L8)(["userConfig","useDarkMode"])},mounted(){this.$nextTick(()=>{this.initOverlayScrollbars(),this.setupImageViewerObserver()})},beforeUnmount(){this.imageViewerObserver&&this.imageViewerObserver.disconnect()},watch:{},methods:{initOverlayScrollbars(){try{if(m.ae.valid(document.body))return void(this.osInstance=(0,m.ae)(document.body));this.osInstance=(0,m.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 t=document.querySelector(".el-image-viewer__wrapper");t?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})}}},p=o(1241);const h=(0,p.A)(f,[["render",c]]);var g=h,b=o(6915),v=o(5507),y=o(7477);o(1862),o(635);s.Yv.add(i.X7I);const C=(0,n.Ef)(g),k=(0,r.Zf)();C.component("font-awesome-icon",l.gc);for(const[M,O]of Object.entries(y))C.component(M,O);const w=()=>{const e=document.documentElement;let t;if(v.A.state.cusDarkMode&&null!==v.A.state.useDarkMode)t=v.A.state.useDarkMode;else{if(t=window.matchMedia("(prefers-color-scheme: dark)").matches,!t){const e=new Date,o=e.getHours();t=o>=22||o<6}v.A.commit("setUseDarkMode",t)}t?e.classList.add("dark"):e.classList.remove("dark")},A=e=>{const t=document.documentElement;e?t.classList.add("dark"):t.classList.remove("dark")},U=e=>{document.title=e?.siteTitle||"Sanyue ImgHub"},S=(e,t)=>{const o=document.querySelectorAll('link[rel="icon"], link[rel="apple-touch-icon"], link[rel="mask-icon"]');o.forEach(e=>e.remove());const n=document.createElement("link"),r=document.createElement("link"),a=document.createElement("link");n.rel="icon",r.rel="apple-touch-icon",a.rel="mask-icon",e?(n.href=t?.siteIcon||"/logo-dark.png",r.href=t?.siteIcon||"/logo-dark.png",a.href=t?.siteIcon||"/logo-dark.png"):(n.href=t?.siteIcon||"/logo.png",r.href=t?.siteIcon||"/logo.png",a.href=t?.siteIcon||"/logo.png"),document.head.appendChild(n),document.head.appendChild(r),document.head.appendChild(a)};v.A.dispatch("fetchUserConfig").then(()=>{w(),U(v.A.getters.userConfig),S(v.A.state.useDarkMode,v.A.getters.userConfig),v.A.subscribe((e,t)=>{"setUseDarkMode"===e.type&&v.A.state.cusDarkMode&&(A(t.useDarkMode),S(t.useDarkMode,v.A.getters.userConfig)),"setCusDarkMode"!==e.type||e.payload||(w(),S(v.A.state.useDarkMode,v.A.getters.userConfig))}),C.use(v.A).use(b.A).use(a.A).mount("#app")}).catch(e=>{console.error("Failed to load user configuration:",e),C.use(v.A).use(b.A).use(a.A).use(k).mount("#app")})},5507:function(e,t,o){o(8111),o(1701);var n=o(8401),r=o(457),a=o(5131);t.A=(0,n.y$)({state:{userConfig:null,bingWallPapers:[],credentials:null,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,credentials:e=>e.credentials,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,t){e.userConfig=t},setBingWallPapers(e,t){e.bingWallPapers=t},setCredentials(e,t){e.credentials=t},setUploadMethod(e,t){e.uploadMethod=t},setUploadCopyUrlForm(e,t){e.uploadCopyUrlForm=t},setCompressConfig(e,{key:t,value:o}){e.compressConfig[t]=o},setStoreUploadChannel(e,t){e.storeUploadChannel=t},setStoreChannelName(e,t){e.storeChannelName=t},setStoreUploadNameType(e,t){e.storeUploadNameType=t},setCustomUrlSettings(e,{key:t,value:o}){e.customUrlSettings[t]=o},setStoreAutoRetry(e,t){e.storeAutoRetry=t},setAdminUrlSettings(e,{key:t,value:o}){e.adminUrlSettings[t]=o},setUseDarkMode(e,t){e.useDarkMode=t},setCusDarkMode(e,t){e.cusDarkMode=t},setStoreUploadFolder(e,t){e.uploadFolder=t,localStorage.setItem("uploadFolder",t)},setStoreAutoReUpload(e,t){e.autoReUpload=t}},actions:{async fetchUserConfig({commit:e}){try{const t=await r.A.get("/api/userConfig");e("setUserConfig",t.data)}catch(t){console.log(t)}},async fetchBingWallPapers({commit:e}){try{const t=await r.A.get("/api/bing/wallpaper"),o=t.data.data,n=o.map(e=>({url:"https://www.bing.com"+e.url}));await Promise.all(n.map(e=>new Promise((t,o)=>{const n=new Image;n.onload=t,n.onerror=o,n.src=e.url}))),e("setBingWallPapers",n)}catch(t){console.log(t)}}},modules:{},plugins:[(0,a.A)()]})},6915:function(e,t,o){o(4979);var n=o(8512),r=o(1219),a=o(4570),s=o.n(a),i=o(5507),l=o(457);const u=(e,t,o)=>{const n=i.A.getters.credentials;if(null===n&&"adminLogin"!==e.name){const e=btoa("unset:unset");l.A.get("/api/manage/check",{headers:{Authorization:"Basic "+e},withCredentials:!0}).then(t=>{if(200!==t.status)throw new Error("认证失败!");i.A.commit("setCredentials",e),o()}).catch(e=>{r.nk.error("请先认证!"),o({name:"adminLogin"})})}else o()},c=(e,t,o)=>{let n=s().get("authCode");null===n&&"login"!==e.name?l.A.post("/api/login",{authCode:"unset"}).then(e=>{if(200!==e.status)throw new Error("认证失败!");s().set("authCode","unset","14d"),n="unset",o()}).catch(e=>{r.nk.error("请先认证!"),o({name:"login"})}):o()},d=[{path:"/",name:"home",component:()=>Promise.all([o.e(275),o.e(600),o.e(280)]).then(o.bind(o,3220)),beforeEnter:c},{path:"/login",name:"login",component:()=>Promise.all([o.e(600),o.e(100)]).then(o.bind(o,2560))},{path:"/dashboard",name:"dashboard",component:()=>Promise.all([o.e(275),o.e(866),o.e(157)]).then(o.bind(o,3189)),beforeEnter:u},{path:"/customerConfig",name:"customerConfig",component:()=>Promise.all([o.e(275),o.e(866),o.e(119),o.e(601)]).then(o.bind(o,9601)),beforeEnter:u},{path:"/systemConfig",name:"systemConfig",component:()=>Promise.all([o.e(275),o.e(866),o.e(119),o.e(690)]).then(o.bind(o,7690)),beforeEnter:u},{path:"/adminLogin",name:"adminLogin",component:()=>Promise.all([o.e(600),o.e(214)]).then(o.bind(o,3950))},{path:"/blockimg",name:"blockimg",component:()=>o.e(917).then(o.bind(o,4917))},{path:"/whiteliston",name:"whiteliston",component:()=>o.e(845).then(o.bind(o,7226))},{path:"/browse/:dir*",name:"publicBrowse",component:()=>o.e(667).then(o.bind(o,9667))},{path:"/:pathMatch(.*)*",name:"notFound",component:()=>o.e(226).then(o.bind(o,8226))}],m=(0,n.aE)({history:(0,n.LA)("/"),routes:d});t.A=m}},t={};function o(n){var r=t[n];if(void 0!==r)return r.exports;var a=t[n]={exports:{}};return e[n].call(a.exports,a,a.exports,o),a.exports}o.m=e,function(){var e=[];o.O=function(t,n,r,a){if(!n){var s=1/0;for(c=0;c=a)&&Object.keys(o.O).every(function(e){return o.O[e](n[l])})?n.splice(l--,1):(i=!1,a0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[n,r,a]}}(),function(){o.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return o.d(t,{a:t}),t}}(),function(){o.d=function(e,t){for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}}(),function(){o.f={},o.e=function(e){return Promise.all(Object.keys(o.f).reduce(function(t,n){return o.f[n](e,t),t},[]))}}(),function(){o.u=function(e){return"js/"+e+"."+{100:"d7a2e066",157:"17e1accc",214:"e7ecaacc",226:"f737e39a",280:"65ead6f8",600:"3d796c41",601:"87ef6cd3",667:"bbd60d43",690:"ff8af593",845:"1bb9a557",866:"5e45788b",917:"833cbf86"}[e]+".js"}}(),function(){o.miniCssF=function(e){return"css/"+e+"."+{100:"07b87787",119:"2a856832",157:"3f84c0cf",214:"07b87787",226:"6548e7b4",275:"bf4b380e",280:"6f363073",601:"a3bc9ea4",667:"a3c83e09",690:"6783f34a",845:"6b45e8e3",917:"8529ad1e"}[e]+".css"}}(),function(){o.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="sanyue_imghub:";o.l=function(n,r,a,s){if(e[n])e[n].push(r);else{var i,l;if(void 0!==a)for(var u=document.getElementsByTagName("script"),c=0;czUCrXVi;L;#?VX98@Qh}yp0Q-p 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 {\r\n // 如果配置中标记了withAuthCode,则添加authCode到header\r\n if (config.withAuthCode) {\r\n const authCode = cookies.get('authCode');\r\n if (authCode) {\r\n config.headers['authCode'] = authCode;\r\n }\r\n }\r\n return config;\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// 响应拦截器\r\ninstance.interceptors.response.use(\r\n (response) => {\r\n return response;\r\n },\r\n (error) => {\r\n // 如果请求配置了withAuthCode且返回401,则跳转到登录页\r\n if (error.config?.withAuthCode && error.response?.status === 401) {\r\n ElMessage.error('认证失败,请重新登录!');\r\n router.push('/login');\r\n }\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nexport default instance;\r\n","import { resolveComponent as _resolveComponent, 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 return _openBlock(), _createBlock(_component_router_view);\n}","import { mapGetters } from 'vuex';\nimport { OverlayScrollbars } from 'overlayscrollbars';\nexport default {\n data() {\n return {\n osInstance: null,\n imageViewerObserver: null\n };\n },\n computed: {\n ...mapGetters(['userConfig', 'useDarkMode'])\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=1693ad63\"\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 { fas } from '@fortawesome/free-solid-svg-icons'; // 引入所有 solid 图标\r\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';\r\n\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\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(fas);\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 || '/logo-dark.png';\r\n appleIconLink.href = userConfig?.siteIcon || '/logo-dark.png';\r\n maskIconLink.href = userConfig?.siteIcon || '/logo-dark.png';\r\n } else {\r\n iconLink.href = userConfig?.siteIcon || '/logo.png';\r\n appleIconLink.href = userConfig?.siteIcon || '/logo.png';\r\n maskIconLink.href = userConfig?.siteIcon || '/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).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(head).mount('#app');\r\n})\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 credentials: null,\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 credentials: state => state.credentials,\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 setCredentials(state, credentials) {\r\n state.credentials = credentials;\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","import { createRouter, createWebHistory } from 'vue-router'\r\nimport { ElMessage } from 'element-plus'\r\nimport cookies from 'vue-cookies'\r\nimport store from '../store'\r\nimport axios from '@/utils/axios'\r\n\r\n// 通用的管理员认证守卫\r\nconst adminAuthGuard = (to, from, next) => {\r\n // 从store中获取凭据\r\n const credentials = store.getters.credentials\r\n if (credentials === null && to.name !== 'adminLogin') {\r\n // 尝试未设置密码的情况\r\n const credentials = btoa('unset:unset')\r\n axios.get('/api/manage/check', {\r\n headers: {\r\n 'Authorization': 'Basic ' + credentials\r\n },\r\n withCredentials: true\r\n }).then(res => {\r\n if (res.status !== 200) {\r\n throw new Error('认证失败!')\r\n }\r\n store.commit('setCredentials', credentials)\r\n next()\r\n }).catch(err => {\r\n ElMessage.error('请先认证!')\r\n next({ name: 'adminLogin' })\r\n })\r\n } else {\r\n next()\r\n }\r\n}\r\n\r\n// 通用的用户认证守卫\r\nconst userAuthGuard = (to, from, next) => {\r\n let authCode = cookies.get('authCode');\r\n if (authCode === null && to.name !== 'login') {\r\n // 尝试未设置密码的情况\r\n axios.post('/api/login', {\r\n authCode: 'unset'\r\n }).then(res => {\r\n if (res.status !== 200) {\r\n throw new Error('认证失败!')\r\n }\r\n cookies.set('authCode', 'unset', '14d')\r\n authCode = 'unset'\r\n next()\r\n }).catch(err => {\r\n ElMessage.error('请先认证!')\r\n next({ name: 'login' })\r\n })\r\n } else {\r\n next()\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","// 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 + \".\" + {\"23\":\"180d02c4\",\"100\":\"d7a2e066\",\"157\":\"17e1accc\",\"214\":\"e7ecaacc\",\"226\":\"f737e39a\",\"600\":\"3d796c41\",\"601\":\"87ef6cd3\",\"667\":\"bbd60d43\",\"690\":\"ff8af593\",\"845\":\"1bb9a557\",\"866\":\"5e45788b\",\"917\":\"833cbf86\"}[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 + \".\" + {\"23\":\"e63939dd\",\"100\":\"07b87787\",\"119\":\"2a856832\",\"157\":\"3f84c0cf\",\"214\":\"07b87787\",\"226\":\"6548e7b4\",\"275\":\"bf4b380e\",\"601\":\"a3bc9ea4\",\"667\":\"a3c83e09\",\"690\":\"6783f34a\",\"845\":\"6b45e8e3\",\"917\":\"8529ad1e\"}[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 = {\"23\":1,\"100\":1,\"119\":1,\"157\":1,\"214\":1,\"226\":1,\"275\":1,\"601\":1,\"667\":1,\"690\":1,\"845\":1,\"917\":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(!/^(119|275)$/.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__(4674); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["instance","axios","create","baseURL","interceptors","request","use","config","withAuthCode","authCode","cookies","headers","error","Promise","reject","response","status","ElMessage","router","push","render","_ctx","_cache","$props","$setup","$data","$options","_component_router_view","data","osInstance","imageViewerObserver","computed","mounted","this","$nextTick","initOverlayScrollbars","setupImageViewerObserver","beforeUnmount","disconnect","watch","methods","valid","document","body","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","overflow","x","y","console","log","MutationObserver","mutations","imageViewer","querySelector","options","observe","childList","subtree","__exports__","library","add","fas","app","createApp","App","head","createHead","component","FontAwesomeIcon","key","Object","entries","ElementPlusIconsVue","initDarkModeClass","htmlElement","documentElement","isDarkMode","store","state","cusDarkMode","useDarkMode","window","matchMedia","matches","now","Date","hour","getHours","commit","classList","remove","applyDarkModeClass","presetSiteTitle","userConfig","title","siteTitle","presetSiteIcon","existingIcons","querySelectorAll","forEach","icon","iconLink","createElement","appleIconLink","maskIconLink","rel","href","siteIcon","appendChild","dispatch","then","getters","subscribe","mutation","type","payload","ElementPlus","mount","catch","createStore","bingWallPapers","credentials","uploadMethod","uploadCopyUrlForm","compressConfig","customerCompress","undefined","compressQuality","compressBar","serverCompress","convertToWebp","storeUploadChannel","storeChannelName","storeAutoRetry","storeUploadNameType","uploadFolder","customUrlSettings","useCustomUrl","customUrlPrefix","adminUrlSettings","autoReUpload","storeUploadMethod","storeUploadFolder","localStorage","getItem","storeAutoReUpload","setUserConfig","setBingWallPapers","setCredentials","setUploadMethod","setUploadCopyUrlForm","setCompressConfig","value","setStoreUploadChannel","uploadChannel","setStoreChannelName","channelName","setStoreUploadNameType","setCustomUrlSettings","setStoreAutoRetry","setAdminUrlSettings","setUseDarkMode","setCusDarkMode","setStoreUploadFolder","folder","setItem","setStoreAutoReUpload","actions","fetchUserConfig","get","fetchBingWallPapers","wallpapers","map","wallpaper","url","all","resolve","img","Image","onload","onerror","src","modules","plugins","createPersistedState","adminAuthGuard","to","from","next","name","btoa","withCredentials","res","Error","err","userAuthGuard","post","routes","path","beforeEnter","createRouter","history","createWebHistory","process","__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","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","code","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.28705dac.js","mappings":"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","sources":["webpack://sanyue_imghub/./src/utils/axios.js","webpack://sanyue_imghub/./src/App.vue?ab25","webpack://sanyue_imghub/./src/App.vue","webpack://sanyue_imghub/./src/App.vue?a135","webpack://sanyue_imghub/./src/main.js","webpack://sanyue_imghub/./src/store/index.js","webpack://sanyue_imghub/./src/router/index.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\nimport cookies from 'vue-cookies';\r\nimport router from '@/router/index';\r\nimport { ElMessage } from 'element-plus'\r\n\r\n// 创建axios实例\r\nconst instance = axios.create({\r\n baseURL: process.env.NODE_ENV === 'production' ? '/' : '/api',\r\n});\r\n\r\n// 请求拦截器\r\ninstance.interceptors.request.use(\r\n (config) => {\r\n // 如果配置中标记了withAuthCode,则添加authCode到header\r\n if (config.withAuthCode) {\r\n const authCode = cookies.get('authCode');\r\n if (authCode) {\r\n config.headers['authCode'] = authCode;\r\n }\r\n }\r\n return config;\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// 响应拦截器\r\ninstance.interceptors.response.use(\r\n (response) => {\r\n return response;\r\n },\r\n (error) => {\r\n // 如果请求配置了withAuthCode且返回401,则跳转到登录页\r\n if (error.config?.withAuthCode && error.response?.status === 401) {\r\n ElMessage.error('认证失败,请重新登录!');\r\n router.push('/login');\r\n }\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nexport default instance;\r\n","import { resolveComponent as _resolveComponent, 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 return _openBlock(), _createBlock(_component_router_view);\n}","import { mapGetters } from 'vuex';\nimport { OverlayScrollbars } from 'overlayscrollbars';\nexport default {\n data() {\n return {\n osInstance: null,\n imageViewerObserver: null\n };\n },\n computed: {\n ...mapGetters(['userConfig', 'useDarkMode'])\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=1693ad63\"\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 { fas } from '@fortawesome/free-solid-svg-icons'; // 引入所有 solid 图标\r\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';\r\n\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\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(fas);\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 || '/logo-dark.png';\r\n appleIconLink.href = userConfig?.siteIcon || '/logo-dark.png';\r\n maskIconLink.href = userConfig?.siteIcon || '/logo-dark.png';\r\n } else {\r\n iconLink.href = userConfig?.siteIcon || '/logo.png';\r\n appleIconLink.href = userConfig?.siteIcon || '/logo.png';\r\n maskIconLink.href = userConfig?.siteIcon || '/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).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(head).mount('#app');\r\n})\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 credentials: null,\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 credentials: state => state.credentials,\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 setCredentials(state, credentials) {\r\n state.credentials = credentials;\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","import { createRouter, createWebHistory } from 'vue-router'\r\nimport { ElMessage } from 'element-plus'\r\nimport cookies from 'vue-cookies'\r\nimport store from '../store'\r\nimport axios from '@/utils/axios'\r\n\r\n// 通用的管理员认证守卫\r\nconst adminAuthGuard = (to, from, next) => {\r\n // 从store中获取凭据\r\n const credentials = store.getters.credentials\r\n if (credentials === null && to.name !== 'adminLogin') {\r\n // 尝试未设置密码的情况\r\n const credentials = btoa('unset:unset')\r\n axios.get('/api/manage/check', {\r\n headers: {\r\n 'Authorization': 'Basic ' + credentials\r\n },\r\n withCredentials: true\r\n }).then(res => {\r\n if (res.status !== 200) {\r\n throw new Error('认证失败!')\r\n }\r\n store.commit('setCredentials', credentials)\r\n next()\r\n }).catch(err => {\r\n ElMessage.error('请先认证!')\r\n next({ name: 'adminLogin' })\r\n })\r\n } else {\r\n next()\r\n }\r\n}\r\n\r\n// 通用的用户认证守卫\r\nconst userAuthGuard = (to, from, next) => {\r\n let authCode = cookies.get('authCode');\r\n if (authCode === null && to.name !== 'login') {\r\n // 尝试未设置密码的情况\r\n axios.post('/api/login', {\r\n authCode: 'unset'\r\n }).then(res => {\r\n if (res.status !== 200) {\r\n throw new Error('认证失败!')\r\n }\r\n cookies.set('authCode', 'unset', '14d')\r\n authCode = 'unset'\r\n next()\r\n }).catch(err => {\r\n ElMessage.error('请先认证!')\r\n next({ name: 'login' })\r\n })\r\n } else {\r\n next()\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","// 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 + \".\" + {\"100\":\"d7a2e066\",\"157\":\"17e1accc\",\"214\":\"e7ecaacc\",\"226\":\"f737e39a\",\"280\":\"65ead6f8\",\"600\":\"3d796c41\",\"601\":\"87ef6cd3\",\"667\":\"bbd60d43\",\"690\":\"ff8af593\",\"845\":\"1bb9a557\",\"866\":\"5e45788b\",\"917\":\"833cbf86\"}[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 + \".\" + {\"100\":\"07b87787\",\"119\":\"2a856832\",\"157\":\"3f84c0cf\",\"214\":\"07b87787\",\"226\":\"6548e7b4\",\"275\":\"bf4b380e\",\"280\":\"6f363073\",\"601\":\"a3bc9ea4\",\"667\":\"a3c83e09\",\"690\":\"6783f34a\",\"845\":\"6b45e8e3\",\"917\":\"8529ad1e\"}[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 = {\"100\":1,\"119\":1,\"157\":1,\"214\":1,\"226\":1,\"275\":1,\"280\":1,\"601\":1,\"667\":1,\"690\":1,\"845\":1,\"917\":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(!/^(119|275)$/.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__(4674); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["instance","axios","create","baseURL","interceptors","request","use","config","withAuthCode","authCode","cookies","headers","error","Promise","reject","response","status","ElMessage","router","push","render","_ctx","_cache","$props","$setup","$data","$options","_component_router_view","data","osInstance","imageViewerObserver","computed","mounted","this","$nextTick","initOverlayScrollbars","setupImageViewerObserver","beforeUnmount","disconnect","watch","methods","valid","document","body","scrollbars","theme","visibility","autoHide","autoHideDelay","dragScroll","clickScroll","overflow","x","y","console","log","MutationObserver","mutations","imageViewer","querySelector","options","observe","childList","subtree","__exports__","library","add","fas","app","createApp","App","head","createHead","component","FontAwesomeIcon","key","Object","entries","ElementPlusIconsVue","initDarkModeClass","htmlElement","documentElement","isDarkMode","store","state","cusDarkMode","useDarkMode","window","matchMedia","matches","now","Date","hour","getHours","commit","classList","remove","applyDarkModeClass","presetSiteTitle","userConfig","title","siteTitle","presetSiteIcon","existingIcons","querySelectorAll","forEach","icon","iconLink","createElement","appleIconLink","maskIconLink","rel","href","siteIcon","appendChild","dispatch","then","getters","subscribe","mutation","type","payload","ElementPlus","mount","catch","createStore","bingWallPapers","credentials","uploadMethod","uploadCopyUrlForm","compressConfig","customerCompress","undefined","compressQuality","compressBar","serverCompress","convertToWebp","storeUploadChannel","storeChannelName","storeAutoRetry","storeUploadNameType","uploadFolder","customUrlSettings","useCustomUrl","customUrlPrefix","adminUrlSettings","autoReUpload","storeUploadMethod","storeUploadFolder","localStorage","getItem","storeAutoReUpload","setUserConfig","setBingWallPapers","setCredentials","setUploadMethod","setUploadCopyUrlForm","setCompressConfig","value","setStoreUploadChannel","uploadChannel","setStoreChannelName","channelName","setStoreUploadNameType","setCustomUrlSettings","setStoreAutoRetry","setAdminUrlSettings","setUseDarkMode","setCusDarkMode","setStoreUploadFolder","folder","setItem","setStoreAutoReUpload","actions","fetchUserConfig","get","fetchBingWallPapers","wallpapers","map","wallpaper","url","all","resolve","img","Image","onload","onerror","src","modules","plugins","createPersistedState","adminAuthGuard","to","from","next","name","btoa","withCredentials","res","Error","err","userAuthGuard","post","routes","path","beforeEnter","createRouter","history","createWebHistory","process","__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","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","code","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/js/app.28705dac.js.map.gz b/js/app.28705dac.js.map.gz new file mode 100644 index 0000000000000000000000000000000000000000..ac5e7fe69dbabfd45505bbaacefcd11a113ed540 GIT binary patch literal 15716 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