diff --git a/css/743.ab3d1775.css b/css/257.0e3de612.css similarity index 92% rename from css/743.ab3d1775.css rename to css/257.0e3de612.css index cdd4940..88e77b3 100644 --- a/css/743.ab3d1775.css +++ b/css/257.0e3de612.css @@ -1 +1 @@ -.mobile-drawer-overlay[data-v-2d8e83ec]{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.4);z-index:2000;backdrop-filter:blur(4px)}.mobile-drawer[data-v-2d8e83ec]{position:absolute;top:22vh;left:8px;bottom:8px;width:280px;max-width:calc(85vw - 16px);background:var(--el-bg-color);border-radius:16px;box-shadow:0 8px 32px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);display:flex;flex-direction:column;overflow:hidden}html.dark .mobile-drawer[data-v-2d8e83ec]{background:rgba(40,40,45,.98);box-shadow:0 8px 32px rgba(0,0,0,.4),0 2px 8px rgba(0,0,0,.3)}.mobile-drawer-header[data-v-2d8e83ec]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:linear-gradient(135deg,rgba(56,189,248,.12),rgba(14,165,233,.08));border-bottom:1px solid var(--el-border-color-lighter)}.mobile-drawer-title[data-v-2d8e83ec]{font-size:15px;font-weight:600;color:#38bdf8;display:flex;align-items:center;gap:8px}.mobile-drawer-title[data-v-2d8e83ec]:before{content:"";display:inline-block;width:4px;height:16px;background:linear-gradient(180deg,#38bdf8,rgba(14,165,233,.5));border-radius:2px}.mobile-drawer-close[data-v-2d8e83ec]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:16px;color:var(--el-text-color-secondary);cursor:pointer;border-radius:8px;transition:all .2s ease;background:transparent}.mobile-drawer-close[data-v-2d8e83ec]:active{background:var(--el-fill-color);color:var(--el-text-color-primary)}.mobile-drawer-content[data-v-2d8e83ec]{flex:1;overflow-y:auto;padding:8px}.mobile-drawer-item[data-v-2d8e83ec]{display:flex;align-items:center;gap:12px;padding:14px 16px;margin:2px 0;cursor:pointer;transition:all .2s ease;color:var(--el-text-color-primary);border-radius:10px;font-size:14px}.mobile-drawer-item[data-v-2d8e83ec]:active{background:var(--el-fill-color-light);transform:scale(.98)}.mobile-drawer-item.active[data-v-2d8e83ec]{background:linear-gradient(135deg,rgba(56,189,248,.2),rgba(14,165,233,.12));color:#38bdf8;font-weight:600}.mobile-drawer-item-icon[data-v-2d8e83ec]{font-size:18px;width:24px;text-align:center;opacity:.7}.mobile-drawer-item.active .mobile-drawer-item-icon[data-v-2d8e83ec]{opacity:1;color:#38bdf8}.mobile-drawer-back[data-v-2d8e83ec]{display:flex;align-items:center;gap:12px;padding:14px 16px;margin:8px 8px;border-radius:10px;background:var(--el-fill-color-lighter);cursor:pointer;transition:all .2s ease;color:var(--el-text-color-secondary);font-size:14px}.mobile-drawer-back[data-v-2d8e83ec]:active{background:var(--el-fill-color);color:var(--el-text-color-primary);transform:scale(.98)}.drawer-slide-enter-active[data-v-2d8e83ec]{transition:opacity .3s ease}.drawer-slide-leave-active[data-v-2d8e83ec]{transition:opacity .2s ease}.drawer-slide-enter-active .mobile-drawer[data-v-2d8e83ec]{animation:slideInLeft-2d8e83ec .3s ease-out}.drawer-slide-leave-active .mobile-drawer[data-v-2d8e83ec]{animation:slideOutLeft-2d8e83ec .2s ease-in}.drawer-slide-enter-from[data-v-2d8e83ec],.drawer-slide-leave-to[data-v-2d8e83ec]{opacity:0}@keyframes slideInLeft-2d8e83ec{0%{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes slideOutLeft-2d8e83ec{0%{transform:translateX(0)}to{transform:translateX(-100%)}}.bottom-sheet-overlay[data-v-7579ad69]{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:9999;display:flex;align-items:flex-end;justify-content:center}.bottom-sheet[data-v-7579ad69]{width:100%;max-width:100%;background:var(--bottom-sheet-bg,hsla(0,0%,100%,.95));backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-radius:20px 20px 0 0;max-height:70vh;overflow:hidden;box-shadow:0 -4px 30px rgba(0,0,0,.15);border-top:1px solid var(--bottom-sheet-border,rgba(0,0,0,.05))}html.dark .bottom-sheet[data-v-7579ad69]{--bottom-sheet-bg:rgba(40,44,52,.95);--bottom-sheet-border:hsla(0,0%,100%,.1);box-shadow:0 -4px 30px rgba(0,0,0,.4)}.bottom-sheet-header[data-v-7579ad69]{display:flex;flex-direction:column;align-items:center;gap:12px;padding:16px 20px 12px;border-bottom:1px solid var(--el-border-color-lighter)}.bottom-sheet-handle[data-v-7579ad69]{width:40px;height:4px;background:var(--el-border-color);border-radius:2px}.bottom-sheet-title[data-v-7579ad69]{font-size:16px;font-weight:600;color:var(--el-text-color-primary);text-align:center;max-width:80%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.dark .bottom-sheet-title[data-v-7579ad69]{color:#f0f0f0}.bottom-sheet-content[data-v-7579ad69]{padding:12px 16px;padding-bottom:calc(20px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:8px}.bottom-sheet-item[data-v-7579ad69]{display:flex;align-items:center;gap:16px;padding:16px 20px;border-radius:14px;cursor:pointer;transition:all .2s ease;background:var(--bottom-sheet-item-bg,rgba(0,0,0,.04));color:var(--el-text-color-primary)}html.dark .bottom-sheet-item[data-v-7579ad69]{--bottom-sheet-item-bg:hsla(0,0%,100%,.08)}.bottom-sheet-item[data-v-7579ad69]:active{transform:scale(.98);background:var(--bottom-sheet-item-active-bg,rgba(0,0,0,.08))}html.dark .bottom-sheet-item[data-v-7579ad69]:active{--bottom-sheet-item-active-bg:hsla(0,0%,100%,.15)}.bottom-sheet-icon[data-v-7579ad69]{font-size:20px;width:28px;text-align:center;color:#38bdf8}.bottom-sheet-danger .bottom-sheet-icon[data-v-7579ad69],.bottom-sheet-danger[data-v-7579ad69]{color:var(--el-color-danger)}.bottom-sheet-enter-active[data-v-7579ad69]{transition:all .3s ease-out}.bottom-sheet-leave-active[data-v-7579ad69]{transition:all .2s ease-in}.bottom-sheet-enter-active .bottom-sheet[data-v-7579ad69]{animation:slideUp-7579ad69 .3s ease-out}.bottom-sheet-leave-active .bottom-sheet[data-v-7579ad69]{animation:slideDown-7579ad69 .2s ease-in}.bottom-sheet-enter-from[data-v-7579ad69],.bottom-sheet-leave-to[data-v-7579ad69]{opacity:0}.bottom-sheet-enter-from .bottom-sheet[data-v-7579ad69],.bottom-sheet-leave-to .bottom-sheet[data-v-7579ad69]{transform:translateY(100%)}@keyframes slideUp-7579ad69{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown-7579ad69{0%{transform:translateY(0)}to{transform:translateY(100%)}}: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-tabs{--el-tabs-header-height:40px;display:flex}.el-tabs__header{align-items:center;display:flex;justify-content:space-between;margin:0 0 15px;padding:0;position:relative}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{background-color:var(--el-color-primary);bottom:0;height:2px;left:0;list-style:none;position:absolute;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);z-index:1}.el-tabs__active-bar.is-bottom{bottom:auto}.el-tabs__new-tab{align-items:center;border:1px solid var(--el-border-color);border-radius:3px;color:var(--el-text-color-primary);cursor:pointer;display:flex;flex-shrink:0;font-size:12px;height:20px;justify-content:center;line-height:20px;margin:10px 0 10px 10px;text-align:center;transition:all .15s;width:20px}.el-tabs__new-tab .is-icon-plus{height:inherit;transform:scale(.8);width:inherit}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__new-tab-vertical{margin-left:0}.el-tabs__nav-wrap{flex:1 auto;margin-bottom:-1px;overflow:hidden;position:relative}.el-tabs__nav-wrap:after{background-color:var(--el-border-color-light);bottom:0;content:"";height:2px;left:0;position:absolute;width:100%;z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-bottom:after{bottom:auto;top:0}.el-tabs__nav-wrap.is-scrollable{box-sizing:border-box;padding:0 20px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;line-height:44px;position:absolute;text-align:center;width:20px}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;float:left;position:relative;transition:transform var(--el-transition-duration);white-space:nowrap;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{display:flex;min-width:100%}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{align-items:center;box-sizing:border-box;color:var(--el-text-color-primary);display:flex;font-size:var(--el-font-size-base);font-weight:500;height:var(--el-tabs-header-height);justify-content:center;list-style:none;padding:0 20px;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{border-radius:3px;box-shadow:0 0 2px 2px var(--el-color-primary) inset}.el-tabs__item .is-icon-close{border-radius:50%;margin-left:5px;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active,.el-tabs__item:hover{color:var(--el-color-primary)}.el-tabs__item:hover{cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{flex-grow:1;overflow:hidden;position:relative}.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);box-sizing:border-box;height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{font-size:12px;height:14px;overflow:hidden;position:relative;right:-2px;transform-origin:100% 50%;width:0}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);margin-top:-1px;transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{border:1px solid transparent;color:var(--el-text-color-secondary);margin-top:-1px;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background-color:var(--el-bg-color-overlay);border-left-color:var(--el-border-color);border-right-color:var(--el-border-color);color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom{flex-direction:column}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-bottom:0;margin-top:-1px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{bottom:auto;height:auto;top:0;width:2px}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{cursor:pointer;height:30px;line-height:30px;text-align:center;width:100%}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{bottom:auto;height:100%;top:0;width:2px}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left{flex-direction:row}.el-tabs--left .el-tabs__header.is-left{margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-bottom:none;border-left:none;border-right:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-radius:4px 0 0 4px;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--left>.el-tabs__content+.el-tabs__header{order:-1}.el-tabs--right .el-tabs__header.is-right{margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:1px solid #fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.el-tabs--top{flex-direction:column}.el-tabs--top>.el-tabs__content+.el-tabs__header{order:-1}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);left:0;position:absolute;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);left:0;position:absolute;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform:translateX(100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInRight-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(100%);transform-origin:0 0}}@keyframes slideInLeft-enter{0%{opacity:0;transform:translateX(-100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInLeft-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(-100%);transform-origin:0 0}}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:14px;--el-alert-title-with-description-font-size:16px;--el-alert-description-font-size:14px;--el-alert-close-font-size:16px;--el-alert-close-customed-font-size:14px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;align-items:center;background-color:var(--el-color-white);border-radius:var(--el-alert-border-radius-base);box-sizing:border-box;display:flex;margin:0;opacity:1;overflow:hidden;padding:var(--el-alert-padding);position:relative;transition:opacity var(--el-transition-duration-fast);width:100%}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--primary{--el-alert-bg-color:var(--el-color-primary-light-9)}.el-alert--primary.is-light{background-color:var(--el-alert-bg-color)}.el-alert--primary.is-light,.el-alert--primary.is-light .el-alert__description{color:var(--el-color-primary)}.el-alert--primary.is-dark{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color)}.el-alert--success.is-light,.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color)}.el-alert--info.is-light,.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color)}.el-alert--warning.is-light,.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color)}.el-alert--error.is-light,.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:flex;flex-direction:column;gap:4px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);margin-right:8px;width:var(--el-alert-icon-size)}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);margin-right:12px;width:var(--el-alert-icon-large-size)}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:24px}.el-alert__title.with-description{font-size:var(--el-alert-title-with-description-font-size)}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:0}.el-alert .el-alert__close-btn{cursor:pointer;font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;right:16px;top:12px}.el-alert .el-alert__close-btn.is-customed{font-size:var(--el-alert-close-customed-font-size);font-style:normal;line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.batch-tag-container[data-v-dacf7742]{padding:0}.tab-content[data-v-dacf7742]{padding:20px}.tab-description[data-v-dacf7742]{margin:0 0 15px 0;color:#606266;font-size:14px}.input-section[data-v-dacf7742]{position:relative;margin-bottom:20px}.suggestions-panel[data-v-dacf7742]{position:absolute;top:100%;left:0;right:0;background:var(--admin-dashboard-tag-suggestion-bg-color);border:1px solid var(--admin-dashboard-tag-suggestion-border-color);border-radius:4px;box-shadow:var(--admin-dashboard-tag-suggestion-box-shadow);max-height:200px;overflow-y:auto;z-index:1000;margin-top:4px}.suggestion-item[data-v-dacf7742]{padding:8px 12px;cursor:pointer;transition:background-color .2s}.suggestion-item[data-v-dacf7742]:hover{background-color:var(--admin-dashboard-tag-suggestion-item-hover-bg-color)}.common-tags-section[data-v-dacf7742],.tags-to-add-section[data-v-dacf7742]{margin-bottom:20px}.common-tags-section h4[data-v-dacf7742],.tags-to-add-section h4[data-v-dacf7742]{margin:0 0 10px 0;font-size:14px;color:#606266}.tags-container[data-v-dacf7742]{display:flex;flex-wrap:wrap;gap:8px;min-height:40px}.tag-item[data-v-dacf7742]{cursor:default}.empty-message[data-v-dacf7742]{color:#909399;font-size:13px;padding:10px 0}.action-buttons[data-v-dacf7742]{margin-top:20px;display:flex;justify-content:flex-end}.tag-management-container[data-v-8b4291b4]{padding:10px 0}.input-section[data-v-8b4291b4]{position:relative;margin-bottom:20px}.suggestions-panel[data-v-8b4291b4]{position:absolute;top:100%;left:0;right:0;background:var(--admin-dashboard-tag-suggestion-bg-color);border:1px solid var(--admin-dashboard-tag-suggestion-border-color);border-radius:4px;box-shadow:var(--admin-dashboard-tag-suggestion-box-shadow);max-height:200px;overflow-y:auto;z-index:1000;margin-top:4px}.suggestion-item[data-v-8b4291b4]{padding:8px 12px;cursor:pointer;transition:background-color .2s}.suggestion-item[data-v-8b4291b4]:hover{background-color:var(--admin-dashboard-tag-suggestion-item-hover-bg-color)}.current-tags-section[data-v-8b4291b4],.popular-tags-section[data-v-8b4291b4]{margin-bottom:20px}.current-tags-section h4[data-v-8b4291b4],.popular-tags-section h4[data-v-8b4291b4]{margin:0 0 10px 0;font-size:14px;color:#606266}.tags-container[data-v-8b4291b4]{display:flex;flex-wrap:wrap;gap:8px;min-height:40px}.tag-item[data-v-8b4291b4]{cursor:default}.tag-item.clickable[data-v-8b4291b4]{cursor:pointer;transition:transform .2s}.tag-item.clickable[data-v-8b4291b4]:hover{transform:translateY(-2px)}.empty-message[data-v-8b4291b4]{color:#909399;font-size:13px;padding:10px 0}.dialog-footer[data-v-8b4291b4]{display:flex;justify-content:flex-end}.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-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;color:var(--el-text-color-primary);font-size:var(--el-font-size-base)}.el-descriptions__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;font-size:14px;line-height:23px;text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{background:var(--el-descriptions-item-bordered-label-background);color:var(--el-text-color-regular);font-weight:700}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translateX(-50%)}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;gap:22px;height:100%;justify-content:space-around;padding:0 6px;width:100%}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{bottom:90px;color:#fff;cursor:default;left:50%;transform:translateX(-50%)}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.el-image-viewer-parent--hidden{overflow:hidden}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}.detail-actions[data-v-0dc381fc]{display:flex;justify-content:right;margin-bottom:10px;flex-wrap:wrap;gap:8px}.detail-action[data-v-0dc381fc]{margin-left:0!important}.video-preview[data-v-0dc381fc]{max-height:300px;cursor:pointer;-o-object-fit:contain;object-fit:contain}.audio-preview[data-v-0dc381fc],.video-preview[data-v-0dc381fc]{width:100%;max-width:400px;border-radius:8px}.image-preview[data-v-0dc381fc]{width:auto;height:auto;max-width:100%;max-height:300px;border-radius:8px;cursor:pointer}.image-preview[data-v-0dc381fc] img{max-width:100%;max-height:300px;-o-object-fit:contain;object-fit:contain}.file-icon-detail[data-v-0dc381fc]{font-size:64px;color:var(--el-text-color-secondary)}.preview-section[data-v-0dc381fc]{display:flex;justify-content:center;margin-bottom:15px;padding:12px;background:var(--el-fill-color-light);border-radius:8px;min-height:60px}.preview-content[data-v-0dc381fc]{display:flex;justify-content:center;align-items:center;width:100%}[data-v-0dc381fc] .description-item{word-break:break-all;word-wrap:break-word}[data-v-0dc381fc] .el-descriptions__label{width:120px!important;min-width:100px!important;max-width:120px!important}@media (max-width:768px){.detail-actions[data-v-0dc381fc]{justify-content:center}}.el-container{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0}.el-container.is-vertical{flex-direction:column}.el-aside{overflow:auto;width:var(--el-aside-width,300px)}.el-aside,.el-footer{box-sizing:border-box;flex-shrink:0}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;height:var(--el-footer-height);padding:var(--el-footer-padding)}.el-header{--el-header-padding:0 20px;--el-header-height:60px;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.el-header,.el-main{box-sizing:border-box}.el-main{--el-main-padding:20px;display:block;flex:1;flex-basis:auto;overflow:auto;padding:var(--el-main-padding)}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-button-width-large:40px;--el-pagination-button-height-large:40px;--el-pagination-item-gap:16px;align-items:center;color:var(--el-pagination-text-color);display:flex;font-size:var(--el-pagination-font-size);font-weight:400;white-space:nowrap}.el-pagination .el-input__inner{-moz-appearance:textfield;text-align:center}.el-pagination .el-select{width:128px}.el-pagination .btn-next,.el-pagination .btn-prev{align-items:center;background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;display:flex;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pagination .btn-next *,.el-pagination .btn-prev *{pointer-events:none}.el-pagination .btn-next:focus,.el-pagination .btn-prev:focus{outline:none}.el-pagination .btn-next:hover,.el-pagination .btn-prev:hover{color:var(--el-pagination-hover-color)}.el-pagination .btn-next.is-active,.el-pagination .btn-prev.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination .btn-next.is-active.is-disabled,.el-pagination .btn-prev.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pagination .btn-next.is-disabled,.el-pagination .btn-next:disabled,.el-pagination .btn-prev.is-disabled,.el-pagination .btn-prev:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pagination .btn-next:focus-visible,.el-pagination .btn-prev:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{color:var(--el-text-color-regular);font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{align-items:center;color:var(--el-text-color-regular);display:flex;font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{box-sizing:border-box;text-align:center}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{align-items:center;display:flex;flex:1;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{background-color:var(--el-pagination-button-bg-color);margin:0 4px}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{background-color:var(--el-disabled-bg-color);color:var(--el-text-color-placeholder)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{background-color:var(--el-fill-color-dark);color:var(--el-text-color-secondary)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{font-size:var(--el-pagination-font-size-small);height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select{width:100px}.el-pagination--large .btn-next,.el-pagination--large .btn-prev,.el-pagination--large .el-pager li{height:var(--el-pagination-button-height-large);line-height:var(--el-pagination-button-height-large);min-width:var(--el-pagination-button-width-large)}.el-pagination--large .el-select .el-input{width:160px}.el-pager{font-size:0;list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.el-pager,.el-pager li{align-items:center;display:flex}.el-pager li{background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:none}.el-pager li.is-active,.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pager li.is-disabled,.el-pager li:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.list-item[data-v-9968e9fe]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;align-items:center;transition:background .2s ease;border-bottom:1px solid var(--el-border-color-lighter);min-width:-moz-fit-content;min-width:fit-content}.list-item[data-v-9968e9fe]:last-child{border-bottom:none}.list-item[data-v-9968e9fe]:hover{background:var(--el-fill-color-light)}.list-col[data-v-9968e9fe]{display:flex;align-items:center}.list-col-checkbox[data-v-9968e9fe]{justify-content:center;min-width:40px}.list-col-preview[data-v-9968e9fe]{justify-content:center;cursor:pointer}.list-col-name[data-v-9968e9fe]{cursor:pointer;overflow:hidden;padding-right:16px;min-width:0}.list-col-name[data-v-9968e9fe]:hover{color:#38bdf8}.filename-ellipsis[data-v-9968e9fe]{display:flex;max-width:100%;overflow:hidden;align-items:center}.filename-start[data-v-9968e9fe]{flex-shrink:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.filename-end[data-v-9968e9fe]{flex-shrink:0;white-space:nowrap}.list-col-channel-name[data-v-9968e9fe],.list-col-channel[data-v-9968e9fe],.list-col-date[data-v-9968e9fe],.list-col-size[data-v-9968e9fe]{font-size:13px;color:var(--el-text-color-secondary)}.list-col-address[data-v-9968e9fe]{font-size:13px}.address-box[data-v-9968e9fe],.channel-name-box[data-v-9968e9fe]{background:var(--el-fill-color-light);border:1px solid var(--el-border-color-lighter);border-radius:4px;padding:4px 8px;font-size:12px;color:var(--el-text-color-secondary);max-width:100%;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-width:none;-ms-overflow-style:none}.address-box[data-v-9968e9fe]{width:85px;font-family:Consolas,Monaco,monospace}.channel-name-box[data-v-9968e9fe]{width:70px}.address-box[data-v-9968e9fe]::-webkit-scrollbar,.channel-name-box[data-v-9968e9fe]::-webkit-scrollbar{display:none}.list-col-tags[data-v-9968e9fe]{display:flex;align-items:center;gap:4px;flex-wrap:nowrap;overflow:hidden}.custom-checkbox[data-v-9968e9fe]{width:18px;height:18px;border:2px solid var(--el-border-color);border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;background:transparent}.custom-checkbox[data-v-9968e9fe]:hover{border-color:#38bdf8}.custom-checkbox.checked[data-v-9968e9fe]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8}.custom-checkbox .check-icon[data-v-9968e9fe]{font-size:10px;color:#fff}.color-tag[data-v-9968e9fe]{padding:2px 8px;border-radius:10px;font-size:11px;color:#fff;white-space:nowrap;max-width:60px;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 2px rgba(0,0,0,.2)}.color-tag-more[data-v-9968e9fe]{min-width:30px;text-align:center}.list-empty[data-v-9968e9fe]{color:var(--el-text-color-placeholder)}.list-col-actions[data-v-9968e9fe]{display:flex;gap:8px;justify-content:flex-end}.list-preview-img[data-v-9968e9fe]{width:40px;height:40px;-o-object-fit:cover;object-fit:cover;border-radius:6px}.list-folder-icon[data-v-9968e9fe]{font-size:28px;color:var(--el-color-primary)}.list-file-icon[data-v-9968e9fe]{font-size:24px;color:var(--el-text-color-secondary)}.list-action-btn[data-v-9968e9fe]{width:32px;height:32px;border:none;border-radius:8px;background:var(--el-fill-color);color:var(--el-text-color-regular);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.list-action-btn[data-v-9968e9fe]:hover{background:#38bdf8;color:#fff}.list-action-danger[data-v-9968e9fe]:hover{background:var(--el-color-danger)}@media (max-width:768px){.list-item[data-v-9968e9fe]{grid-template-columns:28px 40px 1fr auto;padding:10px 8px;gap:8px}.list-col-address[data-v-9968e9fe],.list-col-channel-name[data-v-9968e9fe],.list-col-channel[data-v-9968e9fe],.list-col-date[data-v-9968e9fe],.list-col-size[data-v-9968e9fe],.list-col-tags[data-v-9968e9fe]{display:none}.list-col-actions[data-v-9968e9fe]{gap:4px}.list-action-btn[data-v-9968e9fe]{width:28px;height:28px}.list-col-checkbox[data-v-9968e9fe]{width:24px;min-width:24px}}.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-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-checkbox-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-checkbox-font-weight);height:var(--el-checkbox-height,32px);margin-right:30px;position:relative;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:0 11px 0 7px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox input:focus-visible+.el-checkbox__inner{border-radius:var(--el-checkbox-border-radius);outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px}.el-checkbox__input{cursor:pointer;display:inline-flex;outline:none;position:relative;white-space:nowrap}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-icon-color);cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-checked-icon-color);transform:translate(-45%,-60%) rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-checked-icon-color);content:"";display:block;height:2px;left:0;position:absolute;right:0;top:5px;transform:scale(.5)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{background-color:var(--el-checkbox-bg-color);border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;display:inline-block;height:var(--el-checkbox-input-height);position:relative;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46);width:var(--el-checkbox-input-width);z-index:var(--el-index-normal)}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{border:1px solid transparent;border-left:0;border-top:0;box-sizing:content-box;content:"";height:7px;left:50%;position:absolute;top:50%;transform:translate(-45%,-60%) rotate(45deg) scaleY(0);transform-origin:center;transition:transform .15s ease-in .05s;width:3px}.el-checkbox__original{height:0;margin:0;opacity:0;outline:none;position:absolute;width:0;z-index:-1}.el-checkbox__label{display:inline-block;font-size:var(--el-checkbox-font-size);line-height:1;padding-left:8px}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox:last-of-type{margin-right:0}.img-card[data-v-ddf49ce2]{width:100%;height:22vh;background:var(--admin-dashboard-imgcard-bg-color);border-radius:8px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative;transition:transform .3s ease}.img-card[data-v-ddf49ce2] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-ddf49ce2] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-ddf49ce2]:hover{transform:scale(1.05)}.image-preview[data-v-ddf49ce2],.video-preview[data-v-ddf49ce2]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .4s ease,opacity .3s ease;filter:var(--image-preview-filter)}.video-preview[data-v-ddf49ce2]{cursor:pointer}.img-card:hover .file-icon[data-v-ddf49ce2],.img-card:hover .image-preview[data-v-ddf49ce2],.img-card:hover .video-preview[data-v-ddf49ce2]{transform:scale(1.08)}.image-preview[data-v-ddf49ce2]:hover{opacity:.8}.file-short-info[data-v-ddf49ce2]{position:absolute;z-index:10;top:3px;left:3px;display:flex;gap:5px;align-items:start}.success-tag[data-v-ddf49ce2]{background-color:rgba(34,139,34,.6);border:1px solid rgba(34,139,34,.7);border-radius:6px}.fail-tag[data-v-ddf49ce2],.success-tag[data-v-ddf49ce2]{color:hsla(0,0%,100%,.95);padding:3px 8px;font-size:11px;font-weight:500;height:auto;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,.3);backdrop-filter:blur(4px)}.fail-tag[data-v-ddf49ce2]{background-color:rgba(220,53,69,.6);border:1px solid rgba(220,53,69,.7);border-radius:6px}.primary-tag[data-v-ddf49ce2]{background-color:rgba(250,82,194,.6);color:hsla(0,0%,100%,.95);border:1px solid rgba(250,82,194,.7);padding:3px 8px;border-radius:6px;font-size:11px;font-weight:500;display:flex;align-items:center;height:auto;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,.3);backdrop-filter:blur(4px)}.file-preview[data-v-ddf49ce2]{display:flex;justify-content:center;align-items:center;width:100%;height:100%}.file-icon[data-v-ddf49ce2]{opacity:.6;font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.audio-icon[data-v-ddf49ce2]{color:var(--el-color-primary);opacity:.8}.audio-card-preview[data-v-ddf49ce2]{cursor:pointer}.card-bottom-overlay[data-v-ddf49ce2]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,.7));padding:clamp(15px,2.5vh,30px) clamp(6px,1vw,12px) clamp(5px,.8vh,10px);display:flex;flex-direction:column;gap:clamp(3px,.5vh,6px);z-index:10}.file-name-row[data-v-ddf49ce2]{display:flex;align-items:center;justify-content:center}.file-name[data-v-ddf49ce2]{color:#fff;font-size:clamp(10px,1.1vw,14px);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-shadow:0 1px 3px rgba(0,0,0,.5)}.action-bar[data-v-ddf49ce2]{display:flex;justify-content:space-between;align-items:center;opacity:0;transform:translateY(4px);transition:all .25s cubic-bezier(.4,0,.2,1);pointer-events:none}.el-card:hover .action-bar[data-v-ddf49ce2]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-ddf49ce2],.action-bar-right[data-v-ddf49ce2]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-ddf49ce2]{width:clamp(24px,2.5vw,28px);height:clamp(24px,2.5vw,28px);border:none;border-radius:clamp(5px,.6vw,8px);background:hsla(0,0%,100%,.15);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:clamp(11px,1.1vw,14px)}.action-btn[data-v-ddf49ce2]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-ddf49ce2]:active{transform:scale(.95)}.action-btn-danger[data-v-ddf49ce2]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.action-bar[data-v-ddf49ce2]{display:none!important}}@keyframes skeleton-shimmer-ddf49ce2{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton-wrapper[data-v-ddf49ce2]{width:100%;height:100%;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-ddf49ce2 1.5s ease-in-out infinite}.error-wrapper[data-v-ddf49ce2]{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--skeleton-bg-color);cursor:pointer;gap:8px}.error-icon[data-v-ddf49ce2]{font-size:32px;color:var(--el-color-warning);opacity:.7}.error-text[data-v-ddf49ce2]{font-size:12px;color:var(--el-text-color-secondary)}.img-card[data-v-20e5d6b4]{width:100%;height:22vh;background:var(--admin-dashboard-imgcard-bg-color);border-radius:8px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative;transition:transform .3s ease}.img-card[data-v-20e5d6b4] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-20e5d6b4] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-20e5d6b4]:hover{transform:scale(1.05)}.folder-card[data-v-20e5d6b4]{cursor:pointer}.folder-icon[data-v-20e5d6b4]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;color:var(--el-color-primary)}.folder-icon-svg[data-v-20e5d6b4]{font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.img-card:hover .folder-icon-svg[data-v-20e5d6b4]{transform:scale(1.08)}.card-bottom-overlay[data-v-20e5d6b4]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,.7));padding:clamp(15px,2.5vh,30px) clamp(6px,1vw,12px) clamp(5px,.8vh,10px);display:flex;flex-direction:column;gap:clamp(3px,.5vh,6px);z-index:10}.file-name-row[data-v-20e5d6b4]{display:flex;align-items:center;justify-content:center}.file-name[data-v-20e5d6b4]{color:#fff;font-size:clamp(10px,1.1vw,14px);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-shadow:0 1px 3px rgba(0,0,0,.5)}.action-bar[data-v-20e5d6b4]{display:flex;justify-content:space-between;align-items:center;opacity:0;transform:translateY(4px);transition:all .25s cubic-bezier(.4,0,.2,1);pointer-events:none}.el-card:hover .action-bar[data-v-20e5d6b4]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-20e5d6b4],.action-bar-right[data-v-20e5d6b4]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-20e5d6b4]{width:clamp(24px,2.5vw,28px);height:clamp(24px,2.5vw,28px);border:none;border-radius:clamp(5px,.6vw,8px);background:hsla(0,0%,100%,.15);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:clamp(11px,1.1vw,14px)}.action-btn[data-v-20e5d6b4]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-20e5d6b4]:active{transform:scale(.95)}.action-btn-danger[data-v-20e5d6b4]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.action-bar[data-v-20e5d6b4]{display:none!important}}@keyframes skeleton-shimmer-71848b62{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes skeleton-pulse-71848b62{0%,to{opacity:.4}50%{opacity:.8}}.skeleton-card[data-v-71848b62]{width:100%;height:22vh;background:var(--admin-dashboard-imgcard-bg-color);border-radius:12px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative}.skeleton-image[data-v-71848b62]{width:100%;height:100%;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-71848b62 1.5s ease-in-out infinite}.skeleton-info[data-v-71848b62]{position:absolute;bottom:0;left:0;right:0;padding:15px;background:linear-gradient(transparent,rgba(0,0,0,.5))}.skeleton-text[data-v-71848b62]{height:14px;width:60%;margin:0 auto;border-radius:4px;background:linear-gradient(90deg,hsla(0,0%,100%,.1) 25%,hsla(0,0%,100%,.25) 50%,hsla(0,0%,100%,.1) 75%);background-size:200% 100%;animation:skeleton-shimmer-71848b62 1.5s ease-in-out infinite}.skeleton-list-item[data-v-71848b62]{animation:skeleton-pulse-71848b62 1.5s ease-in-out infinite}.skeleton-checkbox[data-v-71848b62]{width:18px;height:18px;border-radius:4px;background:var(--skeleton-bg-color)}.skeleton-preview[data-v-71848b62]{width:40px;height:40px;border-radius:6px;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-71848b62 1.5s ease-in-out infinite}.skeleton-text-long[data-v-71848b62]{width:80%}.skeleton-text-long[data-v-71848b62],.skeleton-text-short[data-v-71848b62]{height:14px;border-radius:4px;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-71848b62 1.5s ease-in-out infinite}.skeleton-text-short[data-v-71848b62]{width:60px}.skeleton-text-tiny[data-v-71848b62]{height:14px;width:40px;border-radius:4px}.skeleton-tag[data-v-71848b62],.skeleton-text-tiny[data-v-71848b62]{background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-71848b62 1.5s ease-in-out infinite}.skeleton-tag[data-v-71848b62]{height:20px;width:50px;border-radius:10px}.skeleton-actions[data-v-71848b62]{height:28px;width:80px;border-radius:6px;background:var(--skeleton-bg-color)}.list-item[data-v-71848b62]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;align-items:center;border-bottom:1px solid var(--el-border-color-lighter)}.list-col[data-v-71848b62]{display:flex;align-items:center}.list-col-checkbox[data-v-71848b62],.list-col-preview[data-v-71848b62]{justify-content:center}@media (max-width:768px){.list-item[data-v-71848b62]{grid-template-columns:28px 40px 1fr auto;padding:10px 8px;gap:8px}.list-col-address[data-v-71848b62],.list-col-channel-name[data-v-71848b62],.list-col-channel[data-v-71848b62],.list-col-date[data-v-71848b62],.list-col-size[data-v-71848b62],.list-col-tags[data-v-71848b62]{display:none}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{content:"";display:table}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{color:var(--el-text-color-placeholder);font-weight:700;margin:0 9px}.el-breadcrumb__separator.el-icon{font-weight:400;margin:0 6px}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{align-items:center;display:inline-flex;float:left}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{color:var(--el-text-color-primary);font-weight:700;text-decoration:none;transition:var(--el-transition-color)}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{color:var(--el-text-color-regular);cursor:text;font-weight:400}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-checkbox-group{font-size:0;line-height:0}.filter-dropdown[data-v-062d5f10]{flex-shrink:0}.filter-trigger[data-v-062d5f10]{cursor:pointer;display:flex;align-items:center}.header-icon[data-v-062d5f10]{font-size:1.5em;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);outline:none}.header-icon[data-v-062d5f10]:hover{color:var(--admin-purple);transform:scale(1.2)}.filter-badge[data-v-062d5f10] .el-badge__content{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border:none;font-size:10px;height:16px;line-height:16px;padding:0 5px}.filter-dropdown-menu[data-v-062d5f10]{padding:8px 0;min-width:180px;max-height:400px;overflow-y:auto}.filter-section[data-v-062d5f10]{padding:8px 12px;border-bottom:1px solid var(--el-border-color-lighter)}.filter-section[data-v-062d5f10]:last-of-type{border-bottom:none}.filter-title[data-v-062d5f10]{font-size:12px;font-weight:600;color:var(--el-text-color-secondary);margin-bottom:6px}.filter-options[data-v-062d5f10],.filter-options[data-v-062d5f10] .el-checkbox-group{display:flex;flex-direction:column;gap:2px}.filter-options[data-v-062d5f10] .el-checkbox{margin-right:0;height:26px;padding:0 6px;border-radius:4px;transition:all .2s ease}.filter-options[data-v-062d5f10] .el-checkbox:hover{background:var(--el-fill-color-light)}.filter-options[data-v-062d5f10] .el-checkbox__label{font-size:13px;color:var(--el-text-color-primary)}.filter-options[data-v-062d5f10] .el-checkbox__input.is-checked+.el-checkbox__label{color:#0ea5e9}.channel-group-title[data-v-062d5f10]{font-size:11px;font-weight:600;color:var(--el-text-color-secondary);text-transform:uppercase;letter-spacing:.5px;padding:4px 6px;margin-top:4px;margin-bottom:2px}.channel-divider[data-v-062d5f10]{height:1px;background:var(--el-border-color-lighter);margin:6px 0}.filter-options[data-v-062d5f10] .el-checkbox__input.is-checked .el-checkbox__inner{background-color:#0ea5e9;border-color:#0ea5e9}.filter-actions[data-v-062d5f10]{padding:10px 12px 6px;display:flex;justify-content:center}.filter-actions .el-button[data-v-062d5f10]{width:100%;background:var(--el-fill-color-light);border:1px solid var(--el-border-color);color:var(--el-text-color-regular);border-radius:6px;transition:all .2s ease}.filter-actions .el-button[data-v-062d5f10]:hover:not(:disabled){background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8;color:#fff}.filter-actions .el-button[data-v-062d5f10]:disabled{opacity:.5;cursor:not-allowed}@media (max-width:768px){.filter-dropdown-menu[data-v-062d5f10]{min-width:160px;max-height:320px}.filter-section[data-v-062d5f10]{padding:6px 10px}.filter-title[data-v-062d5f10]{font-size:11px;margin-bottom:4px}.filter-options[data-v-062d5f10] .el-checkbox{height:24px;padding:0 4px}.filter-options[data-v-062d5f10] .el-checkbox__label{font-size:12px}.header-icon[data-v-062d5f10]{font-size:1.2em}}#themeToggle[data-v-4c6ec90c]{border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.375rem;transition-property:background-color,border-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.theme_toggle_circle1[data-v-4c6ec90c]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-4c6ec90c]{transition:all .5s ease-in-out;fill:var(--admin-theme-toggle-bg-color)}.theme_toggle_svg[data-v-4c6ec90c]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--admin-theme-toggle-color)}.dark.theme_toggle_svg[data-v-4c6ec90c]{transform:rotate(40deg)}.theme_toggle_g[data-v-4c6ec90c]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-4c6ec90c],.icon-fade-leave-active[data-v-4c6ec90c]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-4c6ec90c]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-4c6ec90c]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-4c6ec90c],.icon-fade-leave-from[data-v-4c6ec90c]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-4c6ec90c]{display:inline-block}.tabs[data-v-4673d77a]{display:flex;align-items:center;justify-content:center;gap:12px}.title[data-v-4673d77a]{display:flex;align-items:center;gap:10px;font-size:1.2em;font-weight:700;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);padding:6px 14px;border-radius:10px;background:linear-gradient(135deg,rgba(99,102,241,.08),rgba(139,92,246,.05));border:1px solid rgba(99,102,241,.15)}.title[data-v-4673d77a]:hover{background:linear-gradient(135deg,rgba(99,102,241,.15),rgba(139,92,246,.1));border-color:rgba(99,102,241,.25);transform:translateY(-1px)}.title .fa-images[data-v-4673d77a]{font-size:1em;color:var(--el-color-primary);background:linear-gradient(135deg,#6366f1,#8b5cf6);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.tabs-dropdown[data-v-4673d77a]{display:flex;align-items:center}.tabs-dropdown-link[data-v-4673d77a]{cursor:pointer;font-size:1.5em;transition:all .3s ease;color:var(--admin-container-color);padding:6px 10px;border-radius:8px;background:transparent}.tabs-dropdown-link.rotate-up[data-v-4673d77a],.tabs-dropdown-link[data-v-4673d77a]:hover{background:rgba(99,102,241,.1);color:var(--el-color-primary)}@media (max-width:768px){.title[data-v-4673d77a]{font-size:1.3em;padding:4px 10px;gap:6px}.tabs-dropdown-link[data-v-4673d77a]{font-size:1.3em;padding:4px 8px}}.el-dropdown__popper.el-popper.tabs-dropdown-popper{border-radius:12px;border:none;background-color:var(--tabs-dropdown-popper-bg-color);backdrop-filter:blur(10px);box-shadow:var(--tabs-dropdown-popper-shadow)}.el-dropdown__popper.el-popper.tabs-dropdown-popper .el-dropdown-menu{border:none;background:none}.el-dropdown__popper.el-popper.tabs-dropdown-popper .el-dropdown-menu__item{border:none;background:none;font-size:16px;font-weight:700;transition:font-size .3s ease}.el-dropdown__popper.el-popper.tabs-dropdown-popper .el-dropdown-menu__item:hover{font-size:18px}.container[data-v-5c4ee283]{background:var(--admin-container-bg-color);min-height:100vh;font-family:Arial,sans-serif;color:var(--admin-container-color);margin:0;padding:0}[data-v-5c4ee283] .el-container,[data-v-5c4ee283] .el-main{overflow:visible}[data-v-5c4ee283] .el-dialog{border-radius:12px;background-color:var(--dialog-bg-color);backdrop-filter:blur(10px);box-shadow:var(--dialog-box-shadow)}.header-content[data-v-5c4ee283]{display:flex;justify-content:space-between;align-items:center;padding:10px 24px;background:hsla(0,0%,100%,.72);backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border:1px solid hsla(0,0%,100%,.3);border-top:1px solid hsla(0,0%,100%,.5);box-shadow:0 4px 30px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.05),inset 0 1px 0 hsla(0,0%,100%,.4);transition:all .4s cubic-bezier(.4,0,.2,1);border-radius:16px;position:fixed;top:8px;left:50%;transform:translateX(-50%);width:calc(95% - 16px);z-index:2001;min-height:45px}html.dark .header-content[data-v-5c4ee283]{background:rgba(30,30,30,.75);border:1px solid hsla(0,0%,100%,.08);border-top:1px solid hsla(0,0%,100%,.12);box-shadow:0 4px 30px rgba(0,0,0,.3),0 1px 3px rgba(0,0,0,.2),inset 0 1px 0 hsla(0,0%,100%,.05)}@media (max-width:768px){.header-content[data-v-5c4ee283]{flex-direction:column;top:6px;width:calc(100% - 32px);border-radius:14px;padding:6px 12px;gap:4px}.header-icon[data-v-5c4ee283]{font-size:.95em}.header-content .actions[data-v-5c4ee283]{gap:10px}.search-card[data-v-5c4ee283] .el-input__inner{height:28px;font-size:.85em;width:50vw}.search-card[data-v-5c4ee283] .el-input__wrapper{padding:0 10px}.search-card[data-v-5c4ee283] .el-input__inner:focus{width:65vw}}.header-content[data-v-5c4ee283]:hover{background:hsla(0,0%,100%,.82);box-shadow:0 8px 40px rgba(0,0,0,.12),0 2px 6px rgba(0,0,0,.08),inset 0 1px 0 hsla(0,0%,100%,.5);transform:translateX(-50%) translateY(-1px)}html.dark .header-content[data-v-5c4ee283]:hover{background:rgba(35,35,35,.85);box-shadow:0 8px 40px rgba(0,0,0,.4),0 2px 6px rgba(0,0,0,.3),inset 0 1px 0 hsla(0,0%,100%,.08)}.header-icon[data-v-5c4ee283]{font-size:1.5em;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);outline:none}.header-icon[data-v-5c4ee283]:hover{color:var(--admin-purple);transform:scale(1.2)}.breadcrumb-container[data-v-5c4ee283]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 10px;margin-bottom:4px}@media (max-width:768px){.breadcrumb-container[data-v-5c4ee283]{flex-direction:row;align-items:center;gap:8px;padding:0 5px;margin-bottom:2px}}.stats-badge[data-v-5c4ee283]{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:500;color:var(--el-text-color-secondary);background:var(--el-fill-color-light);padding:4px 10px;border-radius:12px;border:1px solid var(--el-border-color-lighter);transition:all .2s ease;white-space:nowrap;flex-shrink:0}.stats-badge[data-v-5c4ee283]:hover{background:var(--el-fill-color);color:var(--admin-purple);border-color:var(--admin-purple)}.stats-badge-icon[data-v-5c4ee283]{font-size:11px;opacity:.8}@media (max-width:768px){.stats-badge[data-v-5c4ee283]{font-size:10px;padding:2px 6px;border-radius:8px}.stats-badge-icon[data-v-5c4ee283]{font-size:9px}}.header-content .actions[data-v-5c4ee283]{display:flex;align-items:center;gap:15px}@media (max-width:768px){.header-content .actions[data-v-5c4ee283]{margin-top:10px}}.header-content .actions i[data-v-5c4ee283]{font-size:1.5em;cursor:pointer;transition:color .3s,transform .3s;color:var(--admin-container-color)}.header-content .actions i[data-v-5c4ee283]:hover{color:var(--admin-purple);transform:scale(1.2)}.header-content .actions .el-dropdown-link i[data-v-5c4ee283]{color:var(--admin-container-color)}.header-content .actions .el-dropdown-link i[data-v-5c4ee283]:hover{color:var(--admin-purple)}.header-content .actions .disabled[data-v-5c4ee283]{color:#bbb;pointer-events:none}.header-content .actions .enabled[data-v-5c4ee283]{color:var(--admin-purple)}.batch-action-item-icon[data-v-5c4ee283]{width:20px;margin-right:5px}.search-area[data-v-5c4ee283]{margin-left:auto;margin-right:20px;display:flex;align-items:center;gap:8px}@media (max-width:768px){.search-area[data-v-5c4ee283]{margin-right:0;margin-left:0;margin-top:10px;gap:6px}}.search-card[data-v-5c4ee283]{display:flex;align-items:center}.search-card[data-v-5c4ee283] .el-input__wrapper{border-radius:20px;background:var(--admin-dashboard-search-card-bg-color);box-shadow:var(--admin-dashboard-search-card-box-shadow);transition:background-color .3s}.search-card[data-v-5c4ee283] .el-input__inner{width:280px;height:40px;font-size:1.2em;border:none;transition:width .3s;background:none}.search-card[data-v-5c4ee283] .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-style:italic;font-weight:400;font-size:14px;opacity:.6;letter-spacing:.5px;-moz-transition:all .3s ease;transition:all .3s ease}.search-card[data-v-5c4ee283] .el-input__inner::placeholder{color:var(--el-text-color-placeholder);font-style:italic;font-weight:400;font-size:14px;opacity:.6;letter-spacing:.5px;transition:all .3s ease}.search-card[data-v-5c4ee283] .el-input__inner:focus::-moz-placeholder{opacity:.4;transform:translateX(5px)}.search-card[data-v-5c4ee283] .el-input__inner:focus::placeholder{opacity:.4;transform:translateX(5px)}@media (max-width:768px){.search-card[data-v-5c4ee283] .el-input__inner{width:45vw;height:32px;font-size:1em}}.search-card[data-v-5c4ee283] .el-input__inner:focus{width:350px}@media (max-width:768px){.search-card[data-v-5c4ee283] .el-input__inner:focus{width:55vw}}.search-icon[data-v-5c4ee283]{cursor:pointer;color:var(--admin-container-color);transition:all .3s ease;font-size:1.3em;opacity:0;transform:scale(.8);pointer-events:none}.search-card:focus-within .search-icon[data-v-5c4ee283]{opacity:1;transform:scale(1);pointer-events:auto}.search-card:focus-within .search-icon[data-v-5c4ee283]:hover{color:var(--admin-purple);transform:scale(1.2)}.search-card[data-v-5c4ee283] .el-input__suffix{display:flex;align-items:center;right:10px}.main-container[data-v-5c4ee283]{display:flex;flex-direction:column;padding:20px 60px;min-height:calc(100vh - 80px)}@media (max-width:768px){.main-container[data-v-5c4ee283]{margin-top:12vh}}.content[data-v-5c4ee283]{display:grid;grid-template-columns:repeat(5,1fr);grid-template-rows:repeat(3,1fr);gap:20px;padding:10px;padding-bottom:0;flex-grow:1;min-height:80vh}.empty-state[data-v-5c4ee283]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:var(--admin-container-color);opacity:.6}.empty-icon[data-v-5c4ee283]{font-size:64px;margin-bottom:20px;color:var(--admin-container-color);opacity:.3}.empty-text[data-v-5c4ee283]{font-size:18px;font-weight:500;margin:0 0 8px 0}.empty-hint[data-v-5c4ee283]{font-size:14px;margin:0;opacity:.7}.list-empty[data-v-5c4ee283]{padding:80px 20px}@media (max-width:768px){.content[data-v-5c4ee283]{grid-template-columns:1fr;grid-template-rows:none}}.list-view[data-v-5c4ee283]{display:flex;flex-direction:column;gap:0;background:var(--admin-dashboard-imgcard-bg-color);border-radius:12px;overflow-x:auto;overflow-y:visible;box-shadow:var(--admin-dashboard-imgcard-shadow);margin-top:15px}.list-header[data-v-5c4ee283]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;background:var(--admin-dashboard-stats-bg);font-weight:600;font-size:13px;color:var(--el-text-color-secondary);border-bottom:1px solid var(--el-border-color-lighter);min-width:-moz-fit-content;min-width:fit-content}.list-col[data-v-5c4ee283]{display:flex;align-items:center}.list-col-checkbox[data-v-5c4ee283]{justify-content:center;min-width:40px}.custom-checkbox[data-v-5c4ee283]{width:18px;height:18px;border:2px solid var(--el-border-color);border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;background:transparent}.custom-checkbox[data-v-5c4ee283]:hover{border-color:#38bdf8}.custom-checkbox.checked[data-v-5c4ee283],.custom-checkbox.indeterminate[data-v-5c4ee283]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8}.custom-checkbox .check-icon[data-v-5c4ee283]{font-size:10px;color:#fff}@media (max-width:768px){.list-header[data-v-5c4ee283]{display:none}}.pagination-container[data-v-5c4ee283]{display:flex;justify-content:center;align-items:center;margin-top:20px;padding-bottom:20px;gap:15px;position:relative}.pagination-center[data-v-5c4ee283]{display:flex;align-items:center;gap:10px}.pagination-container[data-v-5c4ee283] .el-pagination{--el-pagination-button-bg-color:var(--admin-dashboard-btn-bg-color);--el-pagination-hover-color:var(--admin-purple)}.pagination-container[data-v-5c4ee283] .el-pager li{background:var(--admin-dashboard-btn-bg-color);border-radius:10px;margin:0 4px;min-width:36px;height:36px;line-height:36px;font-weight:500;border:none;box-shadow:var(--admin-dashboard-btn-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.pagination-container[data-v-5c4ee283] .el-pager li:hover{color:#38bdf8;transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow)}.pagination-container[data-v-5c4ee283] .el-pager li.is-active{background:linear-gradient(135deg,#0ea5e9,#38bdf8)!important;color:#fff!important;border-radius:10px;box-shadow:var(--admin-dashboard-btn-shadow),0 4px 12px rgba(56,189,248,.3),inset 0 1px 0 hsla(0,0%,100%,.2);transition:all .3s cubic-bezier(.4,0,.2,1)}.pagination-container[data-v-5c4ee283] .el-pager li.is-active:hover{transform:translateY(-2px)!important;box-shadow:var(--admin-dashboard-btn-hover-shadow),0 6px 16px rgba(56,189,248,.4),inset 0 1px 0 hsla(0,0%,100%,.2)!important}.pagination-container[data-v-5c4ee283] .btn-next,.pagination-container[data-v-5c4ee283] .btn-prev{background:var(--admin-dashboard-btn-bg-color)!important;border-radius:10px!important;min-width:36px;height:36px;border:none;box-shadow:var(--admin-dashboard-btn-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.pagination-container[data-v-5c4ee283] .btn-next:hover,.pagination-container[data-v-5c4ee283] .btn-prev:hover{color:#38bdf8;transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow)}.pagination-right[data-v-5c4ee283]{display:flex;align-items:center;gap:10px;position:absolute;right:0}.page-total[data-v-5c4ee283]{font-size:13px;color:var(--el-text-color-secondary);white-space:nowrap}.page-jump[data-v-5c4ee283]{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--el-text-color-secondary)}.page-jump .jump-input[data-v-5c4ee283]{width:50px}.page-jump .jump-input[data-v-5c4ee283] .el-input__wrapper{background:var(--admin-dashboard-btn-bg-color);box-shadow:var(--admin-dashboard-btn-shadow);border-radius:8px;padding:0 8px;height:28px}.page-jump .jump-input[data-v-5c4ee283] .el-input__inner{text-align:center;color:var(--el-text-color-primary);height:28px;line-height:28px}.page-jump .jump-btn[data-v-5c4ee283]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border:none;border-radius:8px;padding:0 12px;height:28px;font-size:12px;font-weight:600;color:#fff;box-shadow:0 2px 8px rgba(56,189,248,.3);transition:all .3s ease}.page-jump .jump-btn[data-v-5c4ee283]:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(56,189,248,.4)}@media (max-width:768px){.pagination-container[data-v-5c4ee283]{flex-direction:column;gap:12px;padding-bottom:15px}.pagination-center[data-v-5c4ee283]{order:0}.pagination-right[data-v-5c4ee283]{position:static;width:100%;justify-content:center;order:1}.page-jump .jump-input[data-v-5c4ee283]{width:45px}}.refresh-btn[data-v-5c4ee283]{cursor:pointer;background:var(--admin-dashboard-btn-bg-color);box-shadow:var(--admin-dashboard-btn-shadow);color:#38bdf8;border:none;border-radius:10px;width:36px;height:36px;min-width:36px;padding:0;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .3s cubic-bezier(.4,0,.2,1)}.refresh-btn[data-v-5c4ee283]:hover{transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow);background:linear-gradient(135deg,#0ea5e9,#38bdf8);color:#fff}.load-more[data-v-5c4ee283]{cursor:pointer;background:linear-gradient(135deg,#0ea5e9,#38bdf8);box-shadow:0 4px 15px rgba(56,189,248,.3);color:#fff;border:none;border-radius:10px;height:36px;padding:0 16px;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1)}.load-more[data-v-5c4ee283]:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(56,189,248,.5)}[data-v-5c4ee283] .btn-prev{left:8px}[data-v-5c4ee283] .btn-next,[data-v-5c4ee283] .btn-prev{border-radius:100%;position:fixed;top:50%;scale:1;color:var(--admin-dashboard-btn-color)}[data-v-5c4ee283] .btn-next{right:8px}@media (min-width:768px){[data-v-5c4ee283] .el-pagination.is-background .btn-next,[data-v-5c4ee283] .el-pagination.is-background .btn-prev{background-color:var(--admin-dashboard-btn-bg-color);backdrop-filter:blur(10px);box-shadow:var(--admin-dashboard-btn-shadow);transition:all .3s ease}[data-v-5c4ee283] .el-pagination.is-background .btn-next:hover,[data-v-5c4ee283] .el-pagination.is-background .btn-prev:hover{transform:translateY(-10%);box-shadow:var(--admin-dashboard-btn-hover-shadow)}}.question-icon[data-v-5c4ee283]{margin:0 3px}.breadcrumb[data-v-5c4ee283]{padding:8px 12px;background-color:var(--el-bg-color);border-radius:6px;font-size:.95em;box-shadow:var(--admin-dashboard-stats-shadow);transition:all .3s ease}.breadcrumb[data-v-5c4ee283]:hover{transform:translateY(-1px);box-shadow:var(--admin-dashboard-stats-hover-shadow)}.breadcrumb-home-icon[data-v-5c4ee283]{font-size:14px;color:#38bdf8;transition:color .2s ease}.breadcrumb-home-icon[data-v-5c4ee283]:hover{color:var(--admin-purple)}[data-v-5c4ee283] .el-breadcrumb__item{cursor:pointer}[data-v-5c4ee283] .el-breadcrumb__inner:hover{color:var(--el-color-primary)}.mobile-directory-trigger[data-v-5c4ee283]{display:none;align-items:center;gap:6px;padding:6px 10px;background:var(--el-fill-color-light);border-radius:8px;border:1px solid var(--el-border-color-lighter);cursor:pointer;transition:all .2s ease}.mobile-directory-trigger[data-v-5c4ee283]:active{background:var(--el-fill-color)}.mobile-directory-icon[data-v-5c4ee283]{font-size:12px;color:#38bdf8}.mobile-directory-path[data-v-5c4ee283]{font-size:12px;font-weight:500;color:var(--el-text-color-primary);max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-directory-arrow[data-v-5c4ee283]{font-size:8px;color:var(--el-text-color-secondary)}.desktop-only[data-v-5c4ee283]{display:block}@media (max-width:768px){.mobile-directory-trigger[data-v-5c4ee283]{display:flex}.desktop-only[data-v-5c4ee283]{display:none!important}.breadcrumb-container[data-v-5c4ee283]{padding:0;margin-left:0}} \ No newline at end of file +.mobile-drawer-overlay[data-v-2d8e83ec]{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.4);z-index:2000;backdrop-filter:blur(4px)}.mobile-drawer[data-v-2d8e83ec]{position:absolute;top:22vh;left:8px;bottom:8px;width:280px;max-width:calc(85vw - 16px);background:var(--el-bg-color);border-radius:16px;box-shadow:0 8px 32px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);display:flex;flex-direction:column;overflow:hidden}html.dark .mobile-drawer[data-v-2d8e83ec]{background:rgba(40,40,45,.98);box-shadow:0 8px 32px rgba(0,0,0,.4),0 2px 8px rgba(0,0,0,.3)}.mobile-drawer-header[data-v-2d8e83ec]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:linear-gradient(135deg,rgba(56,189,248,.12),rgba(14,165,233,.08));border-bottom:1px solid var(--el-border-color-lighter)}.mobile-drawer-title[data-v-2d8e83ec]{font-size:15px;font-weight:600;color:#38bdf8;display:flex;align-items:center;gap:8px}.mobile-drawer-title[data-v-2d8e83ec]:before{content:"";display:inline-block;width:4px;height:16px;background:linear-gradient(180deg,#38bdf8,rgba(14,165,233,.5));border-radius:2px}.mobile-drawer-close[data-v-2d8e83ec]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:16px;color:var(--el-text-color-secondary);cursor:pointer;border-radius:8px;transition:all .2s ease;background:transparent}.mobile-drawer-close[data-v-2d8e83ec]:active{background:var(--el-fill-color);color:var(--el-text-color-primary)}.mobile-drawer-content[data-v-2d8e83ec]{flex:1;overflow-y:auto;padding:8px}.mobile-drawer-item[data-v-2d8e83ec]{display:flex;align-items:center;gap:12px;padding:14px 16px;margin:2px 0;cursor:pointer;transition:all .2s ease;color:var(--el-text-color-primary);border-radius:10px;font-size:14px}.mobile-drawer-item[data-v-2d8e83ec]:active{background:var(--el-fill-color-light);transform:scale(.98)}.mobile-drawer-item.active[data-v-2d8e83ec]{background:linear-gradient(135deg,rgba(56,189,248,.2),rgba(14,165,233,.12));color:#38bdf8;font-weight:600}.mobile-drawer-item-icon[data-v-2d8e83ec]{font-size:18px;width:24px;text-align:center;opacity:.7}.mobile-drawer-item.active .mobile-drawer-item-icon[data-v-2d8e83ec]{opacity:1;color:#38bdf8}.mobile-drawer-back[data-v-2d8e83ec]{display:flex;align-items:center;gap:12px;padding:14px 16px;margin:8px 8px;border-radius:10px;background:var(--el-fill-color-lighter);cursor:pointer;transition:all .2s ease;color:var(--el-text-color-secondary);font-size:14px}.mobile-drawer-back[data-v-2d8e83ec]:active{background:var(--el-fill-color);color:var(--el-text-color-primary);transform:scale(.98)}.drawer-slide-enter-active[data-v-2d8e83ec]{transition:opacity .3s ease}.drawer-slide-leave-active[data-v-2d8e83ec]{transition:opacity .2s ease}.drawer-slide-enter-active .mobile-drawer[data-v-2d8e83ec]{animation:slideInLeft-2d8e83ec .3s ease-out}.drawer-slide-leave-active .mobile-drawer[data-v-2d8e83ec]{animation:slideOutLeft-2d8e83ec .2s ease-in}.drawer-slide-enter-from[data-v-2d8e83ec],.drawer-slide-leave-to[data-v-2d8e83ec]{opacity:0}@keyframes slideInLeft-2d8e83ec{0%{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes slideOutLeft-2d8e83ec{0%{transform:translateX(0)}to{transform:translateX(-100%)}}.bottom-sheet-overlay[data-v-7579ad69]{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:9999;display:flex;align-items:flex-end;justify-content:center}.bottom-sheet[data-v-7579ad69]{width:100%;max-width:100%;background:var(--bottom-sheet-bg,hsla(0,0%,100%,.95));backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-radius:20px 20px 0 0;max-height:70vh;overflow:hidden;box-shadow:0 -4px 30px rgba(0,0,0,.15);border-top:1px solid var(--bottom-sheet-border,rgba(0,0,0,.05))}html.dark .bottom-sheet[data-v-7579ad69]{--bottom-sheet-bg:rgba(40,44,52,.95);--bottom-sheet-border:hsla(0,0%,100%,.1);box-shadow:0 -4px 30px rgba(0,0,0,.4)}.bottom-sheet-header[data-v-7579ad69]{display:flex;flex-direction:column;align-items:center;gap:12px;padding:16px 20px 12px;border-bottom:1px solid var(--el-border-color-lighter)}.bottom-sheet-handle[data-v-7579ad69]{width:40px;height:4px;background:var(--el-border-color);border-radius:2px}.bottom-sheet-title[data-v-7579ad69]{font-size:16px;font-weight:600;color:var(--el-text-color-primary);text-align:center;max-width:80%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}html.dark .bottom-sheet-title[data-v-7579ad69]{color:#f0f0f0}.bottom-sheet-content[data-v-7579ad69]{padding:12px 16px;padding-bottom:calc(20px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:8px}.bottom-sheet-item[data-v-7579ad69]{display:flex;align-items:center;gap:16px;padding:16px 20px;border-radius:14px;cursor:pointer;transition:all .2s ease;background:var(--bottom-sheet-item-bg,rgba(0,0,0,.04));color:var(--el-text-color-primary)}html.dark .bottom-sheet-item[data-v-7579ad69]{--bottom-sheet-item-bg:hsla(0,0%,100%,.08)}.bottom-sheet-item[data-v-7579ad69]:active{transform:scale(.98);background:var(--bottom-sheet-item-active-bg,rgba(0,0,0,.08))}html.dark .bottom-sheet-item[data-v-7579ad69]:active{--bottom-sheet-item-active-bg:hsla(0,0%,100%,.15)}.bottom-sheet-icon[data-v-7579ad69]{font-size:20px;width:28px;text-align:center;color:#38bdf8}.bottom-sheet-danger .bottom-sheet-icon[data-v-7579ad69],.bottom-sheet-danger[data-v-7579ad69]{color:var(--el-color-danger)}.bottom-sheet-enter-active[data-v-7579ad69]{transition:all .3s ease-out}.bottom-sheet-leave-active[data-v-7579ad69]{transition:all .2s ease-in}.bottom-sheet-enter-active .bottom-sheet[data-v-7579ad69]{animation:slideUp-7579ad69 .3s ease-out}.bottom-sheet-leave-active .bottom-sheet[data-v-7579ad69]{animation:slideDown-7579ad69 .2s ease-in}.bottom-sheet-enter-from[data-v-7579ad69],.bottom-sheet-leave-to[data-v-7579ad69]{opacity:0}.bottom-sheet-enter-from .bottom-sheet[data-v-7579ad69],.bottom-sheet-leave-to .bottom-sheet[data-v-7579ad69]{transform:translateY(100%)}@keyframes slideUp-7579ad69{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown-7579ad69{0%{transform:translateY(0)}to{transform:translateY(100%)}}: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-tabs{--el-tabs-header-height:40px;display:flex}.el-tabs__header{align-items:center;display:flex;justify-content:space-between;margin:0 0 15px;padding:0;position:relative}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{background-color:var(--el-color-primary);bottom:0;height:2px;left:0;list-style:none;position:absolute;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);z-index:1}.el-tabs__active-bar.is-bottom{bottom:auto}.el-tabs__new-tab{align-items:center;border:1px solid var(--el-border-color);border-radius:3px;color:var(--el-text-color-primary);cursor:pointer;display:flex;flex-shrink:0;font-size:12px;height:20px;justify-content:center;line-height:20px;margin:10px 0 10px 10px;text-align:center;transition:all .15s;width:20px}.el-tabs__new-tab .is-icon-plus{height:inherit;transform:scale(.8);width:inherit}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__new-tab-vertical{margin-left:0}.el-tabs__nav-wrap{flex:1 auto;margin-bottom:-1px;overflow:hidden;position:relative}.el-tabs__nav-wrap:after{background-color:var(--el-border-color-light);bottom:0;content:"";height:2px;left:0;position:absolute;width:100%;z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-bottom:after{bottom:auto;top:0}.el-tabs__nav-wrap.is-scrollable{box-sizing:border-box;padding:0 20px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;line-height:44px;position:absolute;text-align:center;width:20px}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;float:left;position:relative;transition:transform var(--el-transition-duration);white-space:nowrap;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{display:flex;min-width:100%}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{align-items:center;box-sizing:border-box;color:var(--el-text-color-primary);display:flex;font-size:var(--el-font-size-base);font-weight:500;height:var(--el-tabs-header-height);justify-content:center;list-style:none;padding:0 20px;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{border-radius:3px;box-shadow:0 0 2px 2px var(--el-color-primary) inset}.el-tabs__item .is-icon-close{border-radius:50%;margin-left:5px;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#fff}.el-tabs__item.is-active,.el-tabs__item:hover{color:var(--el-color-primary)}.el-tabs__item:hover{cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{flex-grow:1;overflow:hidden;position:relative}.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);box-sizing:border-box;height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{font-size:12px;height:14px;overflow:hidden;position:relative;right:-2px;transform-origin:100% 50%;width:0}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);margin-top:-1px;transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{border:1px solid transparent;color:var(--el-text-color-secondary);margin-top:-1px;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background-color:var(--el-bg-color-overlay);border-left-color:var(--el-border-color);border-right-color:var(--el-border-color);color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom{flex-direction:column}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-bottom:0;margin-top:-1px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{bottom:auto;height:auto;top:0;width:2px}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{cursor:pointer;height:30px;line-height:30px;text-align:center;width:100%}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{bottom:auto;height:100%;top:0;width:2px}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left{flex-direction:row}.el-tabs--left .el-tabs__header.is-left{margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-bottom:none;border-left:none;border-right:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-radius:4px 0 0 4px;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--left>.el-tabs__content+.el-tabs__header{order:-1}.el-tabs--right .el-tabs__header.is-right{margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:1px solid #fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.el-tabs--top{flex-direction:column}.el-tabs--top>.el-tabs__content+.el-tabs__header{order:-1}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);left:0;position:absolute;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);left:0;position:absolute;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform:translateX(100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInRight-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(100%);transform-origin:0 0}}@keyframes slideInLeft-enter{0%{opacity:0;transform:translateX(-100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInLeft-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(-100%);transform-origin:0 0}}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:14px;--el-alert-title-with-description-font-size:16px;--el-alert-description-font-size:14px;--el-alert-close-font-size:16px;--el-alert-close-customed-font-size:14px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;align-items:center;background-color:var(--el-color-white);border-radius:var(--el-alert-border-radius-base);box-sizing:border-box;display:flex;margin:0;opacity:1;overflow:hidden;padding:var(--el-alert-padding);position:relative;transition:opacity var(--el-transition-duration-fast);width:100%}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--primary{--el-alert-bg-color:var(--el-color-primary-light-9)}.el-alert--primary.is-light{background-color:var(--el-alert-bg-color)}.el-alert--primary.is-light,.el-alert--primary.is-light .el-alert__description{color:var(--el-color-primary)}.el-alert--primary.is-dark{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color)}.el-alert--success.is-light,.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color)}.el-alert--info.is-light,.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color)}.el-alert--warning.is-light,.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color)}.el-alert--error.is-light,.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:flex;flex-direction:column;gap:4px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);margin-right:8px;width:var(--el-alert-icon-size)}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);margin-right:12px;width:var(--el-alert-icon-large-size)}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:24px}.el-alert__title.with-description{font-size:var(--el-alert-title-with-description-font-size)}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:0}.el-alert .el-alert__close-btn{cursor:pointer;font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;right:16px;top:12px}.el-alert .el-alert__close-btn.is-customed{font-size:var(--el-alert-close-customed-font-size);font-style:normal;line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.batch-tag-container[data-v-dacf7742]{padding:0}.tab-content[data-v-dacf7742]{padding:20px}.tab-description[data-v-dacf7742]{margin:0 0 15px 0;color:#606266;font-size:14px}.input-section[data-v-dacf7742]{position:relative;margin-bottom:20px}.suggestions-panel[data-v-dacf7742]{position:absolute;top:100%;left:0;right:0;background:var(--admin-dashboard-tag-suggestion-bg-color);border:1px solid var(--admin-dashboard-tag-suggestion-border-color);border-radius:4px;box-shadow:var(--admin-dashboard-tag-suggestion-box-shadow);max-height:200px;overflow-y:auto;z-index:1000;margin-top:4px}.suggestion-item[data-v-dacf7742]{padding:8px 12px;cursor:pointer;transition:background-color .2s}.suggestion-item[data-v-dacf7742]:hover{background-color:var(--admin-dashboard-tag-suggestion-item-hover-bg-color)}.common-tags-section[data-v-dacf7742],.tags-to-add-section[data-v-dacf7742]{margin-bottom:20px}.common-tags-section h4[data-v-dacf7742],.tags-to-add-section h4[data-v-dacf7742]{margin:0 0 10px 0;font-size:14px;color:#606266}.tags-container[data-v-dacf7742]{display:flex;flex-wrap:wrap;gap:8px;min-height:40px}.tag-item[data-v-dacf7742]{cursor:default}.empty-message[data-v-dacf7742]{color:#909399;font-size:13px;padding:10px 0}.action-buttons[data-v-dacf7742]{margin-top:20px;display:flex;justify-content:flex-end}.tag-management-container[data-v-8b4291b4]{padding:10px 0}.input-section[data-v-8b4291b4]{position:relative;margin-bottom:20px}.suggestions-panel[data-v-8b4291b4]{position:absolute;top:100%;left:0;right:0;background:var(--admin-dashboard-tag-suggestion-bg-color);border:1px solid var(--admin-dashboard-tag-suggestion-border-color);border-radius:4px;box-shadow:var(--admin-dashboard-tag-suggestion-box-shadow);max-height:200px;overflow-y:auto;z-index:1000;margin-top:4px}.suggestion-item[data-v-8b4291b4]{padding:8px 12px;cursor:pointer;transition:background-color .2s}.suggestion-item[data-v-8b4291b4]:hover{background-color:var(--admin-dashboard-tag-suggestion-item-hover-bg-color)}.current-tags-section[data-v-8b4291b4],.popular-tags-section[data-v-8b4291b4]{margin-bottom:20px}.current-tags-section h4[data-v-8b4291b4],.popular-tags-section h4[data-v-8b4291b4]{margin:0 0 10px 0;font-size:14px;color:#606266}.tags-container[data-v-8b4291b4]{display:flex;flex-wrap:wrap;gap:8px;min-height:40px}.tag-item[data-v-8b4291b4]{cursor:default}.tag-item.clickable[data-v-8b4291b4]{cursor:pointer;transition:transform .2s}.tag-item.clickable[data-v-8b4291b4]:hover{transform:translateY(-2px)}.empty-message[data-v-8b4291b4]{color:#909399;font-size:13px;padding:10px 0}.dialog-footer[data-v-8b4291b4]{display:flex;justify-content:flex-end}.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-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;color:var(--el-text-color-primary);font-size:var(--el-font-size-base)}.el-descriptions__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;font-size:14px;line-height:23px;text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{background:var(--el-descriptions-item-bordered-label-background);color:var(--el-text-color-regular);font-weight:700}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translateX(-50%)}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;gap:22px;height:100%;justify-content:space-around;padding:0 6px;width:100%}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{bottom:90px;color:#fff;cursor:default;left:50%;transform:translateX(-50%)}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.el-image-viewer-parent--hidden{overflow:hidden}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}.detail-actions[data-v-0dc381fc]{display:flex;justify-content:right;margin-bottom:10px;flex-wrap:wrap;gap:8px}.detail-action[data-v-0dc381fc]{margin-left:0!important}.video-preview[data-v-0dc381fc]{max-height:300px;cursor:pointer;-o-object-fit:contain;object-fit:contain}.audio-preview[data-v-0dc381fc],.video-preview[data-v-0dc381fc]{width:100%;max-width:400px;border-radius:8px}.image-preview[data-v-0dc381fc]{width:auto;height:auto;max-width:100%;max-height:300px;border-radius:8px;cursor:pointer}.image-preview[data-v-0dc381fc] img{max-width:100%;max-height:300px;-o-object-fit:contain;object-fit:contain}.file-icon-detail[data-v-0dc381fc]{font-size:64px;color:var(--el-text-color-secondary)}.preview-section[data-v-0dc381fc]{display:flex;justify-content:center;margin-bottom:15px;padding:12px;background:var(--el-fill-color-light);border-radius:8px;min-height:60px}.preview-content[data-v-0dc381fc]{display:flex;justify-content:center;align-items:center;width:100%}[data-v-0dc381fc] .description-item{word-break:break-all;word-wrap:break-word}[data-v-0dc381fc] .el-descriptions__label{width:120px!important;min-width:100px!important;max-width:120px!important}@media (max-width:768px){.detail-actions[data-v-0dc381fc]{justify-content:center}}.el-container{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0}.el-container.is-vertical{flex-direction:column}.el-aside{overflow:auto;width:var(--el-aside-width,300px)}.el-aside,.el-footer{box-sizing:border-box;flex-shrink:0}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;height:var(--el-footer-height);padding:var(--el-footer-padding)}.el-header{--el-header-padding:0 20px;--el-header-height:60px;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.el-header,.el-main{box-sizing:border-box}.el-main{--el-main-padding:20px;display:block;flex:1;flex-basis:auto;overflow:auto;padding:var(--el-main-padding)}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-button-width-large:40px;--el-pagination-button-height-large:40px;--el-pagination-item-gap:16px;align-items:center;color:var(--el-pagination-text-color);display:flex;font-size:var(--el-pagination-font-size);font-weight:400;white-space:nowrap}.el-pagination .el-input__inner{-moz-appearance:textfield;text-align:center}.el-pagination .el-select{width:128px}.el-pagination .btn-next,.el-pagination .btn-prev{align-items:center;background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;display:flex;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pagination .btn-next *,.el-pagination .btn-prev *{pointer-events:none}.el-pagination .btn-next:focus,.el-pagination .btn-prev:focus{outline:none}.el-pagination .btn-next:hover,.el-pagination .btn-prev:hover{color:var(--el-pagination-hover-color)}.el-pagination .btn-next.is-active,.el-pagination .btn-prev.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination .btn-next.is-active.is-disabled,.el-pagination .btn-prev.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pagination .btn-next.is-disabled,.el-pagination .btn-next:disabled,.el-pagination .btn-prev.is-disabled,.el-pagination .btn-prev:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pagination .btn-next:focus-visible,.el-pagination .btn-prev:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{color:var(--el-text-color-regular);font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{align-items:center;color:var(--el-text-color-regular);display:flex;font-weight:400;margin-left:var(--el-pagination-item-gap)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{box-sizing:border-box;text-align:center}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{align-items:center;display:flex;flex:1;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{background-color:var(--el-pagination-button-bg-color);margin:0 4px}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{background-color:var(--el-disabled-bg-color);color:var(--el-text-color-placeholder)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{background-color:var(--el-fill-color-dark);color:var(--el-text-color-secondary)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{font-size:var(--el-pagination-font-size-small);height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select{width:100px}.el-pagination--large .btn-next,.el-pagination--large .btn-prev,.el-pagination--large .el-pager li{height:var(--el-pagination-button-height-large);line-height:var(--el-pagination-button-height-large);min-width:var(--el-pagination-button-width-large)}.el-pagination--large .el-select .el-input{width:160px}.el-pager{font-size:0;list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.el-pager,.el-pager li{align-items:center;display:flex}.el-pager li{background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:none}.el-pager li.is-active,.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pager li.is-disabled,.el-pager li:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.list-item[data-v-9968e9fe]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;align-items:center;transition:background .2s ease;border-bottom:1px solid var(--el-border-color-lighter);min-width:-moz-fit-content;min-width:fit-content}.list-item[data-v-9968e9fe]:last-child{border-bottom:none}.list-item[data-v-9968e9fe]:hover{background:var(--el-fill-color-light)}.list-col[data-v-9968e9fe]{display:flex;align-items:center}.list-col-checkbox[data-v-9968e9fe]{justify-content:center;min-width:40px}.list-col-preview[data-v-9968e9fe]{justify-content:center;cursor:pointer}.list-col-name[data-v-9968e9fe]{cursor:pointer;overflow:hidden;padding-right:16px;min-width:0}.list-col-name[data-v-9968e9fe]:hover{color:#38bdf8}.filename-ellipsis[data-v-9968e9fe]{display:flex;max-width:100%;overflow:hidden;align-items:center}.filename-start[data-v-9968e9fe]{flex-shrink:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.filename-end[data-v-9968e9fe]{flex-shrink:0;white-space:nowrap}.list-col-channel-name[data-v-9968e9fe],.list-col-channel[data-v-9968e9fe],.list-col-date[data-v-9968e9fe],.list-col-size[data-v-9968e9fe]{font-size:13px;color:var(--el-text-color-secondary)}.list-col-address[data-v-9968e9fe]{font-size:13px}.address-box[data-v-9968e9fe],.channel-name-box[data-v-9968e9fe]{background:var(--el-fill-color-light);border:1px solid var(--el-border-color-lighter);border-radius:4px;padding:4px 8px;font-size:12px;color:var(--el-text-color-secondary);max-width:100%;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-width:none;-ms-overflow-style:none}.address-box[data-v-9968e9fe]{width:85px;font-family:Consolas,Monaco,monospace}.channel-name-box[data-v-9968e9fe]{width:70px}.address-box[data-v-9968e9fe]::-webkit-scrollbar,.channel-name-box[data-v-9968e9fe]::-webkit-scrollbar{display:none}.list-col-tags[data-v-9968e9fe]{display:flex;align-items:center;gap:4px;flex-wrap:nowrap;overflow:hidden}.custom-checkbox[data-v-9968e9fe]{width:18px;height:18px;border:2px solid var(--el-border-color);border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;background:transparent}.custom-checkbox[data-v-9968e9fe]:hover{border-color:#38bdf8}.custom-checkbox.checked[data-v-9968e9fe]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8}.custom-checkbox .check-icon[data-v-9968e9fe]{font-size:10px;color:#fff}.color-tag[data-v-9968e9fe]{padding:2px 8px;border-radius:10px;font-size:11px;color:#fff;white-space:nowrap;max-width:60px;overflow:hidden;text-overflow:ellipsis;text-shadow:0 1px 2px rgba(0,0,0,.2)}.color-tag-more[data-v-9968e9fe]{min-width:30px;text-align:center}.list-empty[data-v-9968e9fe]{color:var(--el-text-color-placeholder)}.list-col-actions[data-v-9968e9fe]{display:flex;gap:8px;justify-content:flex-end}.list-preview-img[data-v-9968e9fe]{width:40px;height:40px;-o-object-fit:cover;object-fit:cover;border-radius:6px}.list-folder-icon[data-v-9968e9fe]{font-size:28px;color:var(--el-color-primary)}.list-file-icon[data-v-9968e9fe]{font-size:24px;color:var(--el-text-color-secondary)}.list-action-btn[data-v-9968e9fe]{width:32px;height:32px;border:none;border-radius:8px;background:var(--el-fill-color);color:var(--el-text-color-regular);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.list-action-btn[data-v-9968e9fe]:hover{background:#38bdf8;color:#fff}.list-action-danger[data-v-9968e9fe]:hover{background:var(--el-color-danger)}@media (max-width:768px){.list-item[data-v-9968e9fe]{grid-template-columns:28px 40px 1fr auto;padding:10px 8px;gap:8px}.list-col-address[data-v-9968e9fe],.list-col-channel-name[data-v-9968e9fe],.list-col-channel[data-v-9968e9fe],.list-col-date[data-v-9968e9fe],.list-col-size[data-v-9968e9fe],.list-col-tags[data-v-9968e9fe]{display:none}.list-col-actions[data-v-9968e9fe]{gap:4px}.list-action-btn[data-v-9968e9fe]{width:28px;height:28px}.list-col-checkbox[data-v-9968e9fe]{width:24px;min-width:24px}}.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-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-checkbox-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-checkbox-font-weight);height:var(--el-checkbox-height,32px);margin-right:30px;position:relative;-webkit-user-select:none;user-select:none;white-space:nowrap}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:0 11px 0 7px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox input:focus-visible+.el-checkbox__inner{border-radius:var(--el-checkbox-border-radius);outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px}.el-checkbox__input{cursor:pointer;display:inline-flex;outline:none;position:relative;white-space:nowrap}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-icon-color);cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-checked-icon-color);transform:translate(-45%,-60%) rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-checked-icon-color);content:"";display:block;height:2px;left:0;position:absolute;right:0;top:5px;transform:scale(.5)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{background-color:var(--el-checkbox-bg-color);border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;display:inline-block;height:var(--el-checkbox-input-height);position:relative;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46);width:var(--el-checkbox-input-width);z-index:var(--el-index-normal)}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{border:1px solid transparent;border-left:0;border-top:0;box-sizing:content-box;content:"";height:7px;left:50%;position:absolute;top:50%;transform:translate(-45%,-60%) rotate(45deg) scaleY(0);transform-origin:center;transition:transform .15s ease-in .05s;width:3px}.el-checkbox__original{height:0;margin:0;opacity:0;outline:none;position:absolute;width:0;z-index:-1}.el-checkbox__label{display:inline-block;font-size:var(--el-checkbox-font-size);line-height:1;padding-left:8px}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox:last-of-type{margin-right:0}.img-card[data-v-ddf49ce2]{width:100%;height:22vh;background:var(--admin-dashboard-imgcard-bg-color);border-radius:8px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative;transition:transform .3s ease}.img-card[data-v-ddf49ce2] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-ddf49ce2] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-ddf49ce2]:hover{transform:scale(1.05)}.image-preview[data-v-ddf49ce2],.video-preview[data-v-ddf49ce2]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .4s ease,opacity .3s ease;filter:var(--image-preview-filter)}.video-preview[data-v-ddf49ce2]{cursor:pointer}.img-card:hover .file-icon[data-v-ddf49ce2],.img-card:hover .image-preview[data-v-ddf49ce2],.img-card:hover .video-preview[data-v-ddf49ce2]{transform:scale(1.08)}.image-preview[data-v-ddf49ce2]:hover{opacity:.8}.file-short-info[data-v-ddf49ce2]{position:absolute;z-index:10;top:3px;left:3px;display:flex;gap:5px;align-items:start}.success-tag[data-v-ddf49ce2]{background-color:rgba(34,139,34,.6);border:1px solid rgba(34,139,34,.7);border-radius:6px}.fail-tag[data-v-ddf49ce2],.success-tag[data-v-ddf49ce2]{color:hsla(0,0%,100%,.95);padding:3px 8px;font-size:11px;font-weight:500;height:auto;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,.3);backdrop-filter:blur(4px)}.fail-tag[data-v-ddf49ce2]{background-color:rgba(220,53,69,.6);border:1px solid rgba(220,53,69,.7);border-radius:6px}.primary-tag[data-v-ddf49ce2]{background-color:rgba(250,82,194,.6);color:hsla(0,0%,100%,.95);border:1px solid rgba(250,82,194,.7);padding:3px 8px;border-radius:6px;font-size:11px;font-weight:500;display:flex;align-items:center;height:auto;line-height:1.2;text-shadow:0 1px 2px rgba(0,0,0,.3);backdrop-filter:blur(4px)}.file-preview[data-v-ddf49ce2]{display:flex;justify-content:center;align-items:center;width:100%;height:100%}.file-icon[data-v-ddf49ce2]{opacity:.6;font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.audio-icon[data-v-ddf49ce2]{color:var(--el-color-primary);opacity:.8}.audio-card-preview[data-v-ddf49ce2]{cursor:pointer}.card-bottom-overlay[data-v-ddf49ce2]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,.7));padding:clamp(15px,2.5vh,30px) clamp(6px,1vw,12px) clamp(5px,.8vh,10px);display:flex;flex-direction:column;gap:clamp(3px,.5vh,6px);z-index:10}.file-name-row[data-v-ddf49ce2]{display:flex;align-items:center;justify-content:center}.file-name[data-v-ddf49ce2]{color:#fff;font-size:clamp(10px,1.1vw,14px);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-shadow:0 1px 3px rgba(0,0,0,.5)}.action-bar[data-v-ddf49ce2]{display:flex;justify-content:space-between;align-items:center;opacity:0;transform:translateY(4px);transition:all .25s cubic-bezier(.4,0,.2,1);pointer-events:none}.el-card:hover .action-bar[data-v-ddf49ce2]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-ddf49ce2],.action-bar-right[data-v-ddf49ce2]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-ddf49ce2]{width:clamp(24px,2.5vw,28px);height:clamp(24px,2.5vw,28px);border:none;border-radius:clamp(5px,.6vw,8px);background:hsla(0,0%,100%,.15);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:clamp(11px,1.1vw,14px)}.action-btn[data-v-ddf49ce2]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-ddf49ce2]:active{transform:scale(.95)}.action-btn-danger[data-v-ddf49ce2]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.action-bar[data-v-ddf49ce2]{display:none!important}}@keyframes skeleton-shimmer-ddf49ce2{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton-wrapper[data-v-ddf49ce2]{width:100%;height:100%;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-ddf49ce2 1.5s ease-in-out infinite}.error-wrapper[data-v-ddf49ce2]{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--skeleton-bg-color);cursor:pointer;gap:8px}.error-icon[data-v-ddf49ce2]{font-size:32px;color:var(--el-color-warning);opacity:.7}.error-text[data-v-ddf49ce2]{font-size:12px;color:var(--el-text-color-secondary)}.img-card[data-v-20e5d6b4]{width:100%;height:22vh;background:var(--admin-dashboard-imgcard-bg-color);border-radius:8px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative;transition:transform .3s ease}.img-card[data-v-20e5d6b4] .el-card__body{padding:0;height:100%;overflow:hidden}.img-card[data-v-20e5d6b4] .el-checkbox{position:absolute;top:10px;right:10px;transform:scale(1.5);z-index:10}.img-card[data-v-20e5d6b4]:hover{transform:scale(1.05)}.folder-card[data-v-20e5d6b4]{cursor:pointer}.folder-icon[data-v-20e5d6b4]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;color:var(--el-color-primary)}.folder-icon-svg[data-v-20e5d6b4]{font-size:clamp(40px,4vw,64px);transition:transform .4s ease}.img-card:hover .folder-icon-svg[data-v-20e5d6b4]{transform:scale(1.08)}.card-bottom-overlay[data-v-20e5d6b4]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,.7));padding:clamp(15px,2.5vh,30px) clamp(6px,1vw,12px) clamp(5px,.8vh,10px);display:flex;flex-direction:column;gap:clamp(3px,.5vh,6px);z-index:10}.file-name-row[data-v-20e5d6b4]{display:flex;align-items:center;justify-content:center}.file-name[data-v-20e5d6b4]{color:#fff;font-size:clamp(10px,1.1vw,14px);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-shadow:0 1px 3px rgba(0,0,0,.5)}.action-bar[data-v-20e5d6b4]{display:flex;justify-content:space-between;align-items:center;opacity:0;transform:translateY(4px);transition:all .25s cubic-bezier(.4,0,.2,1);pointer-events:none}.el-card:hover .action-bar[data-v-20e5d6b4]{opacity:1;transform:translateY(0);pointer-events:auto}.action-bar-left[data-v-20e5d6b4],.action-bar-right[data-v-20e5d6b4]{display:flex;align-items:center;gap:clamp(3px,.4vw,6px)}.action-btn[data-v-20e5d6b4]{width:clamp(24px,2.5vw,28px);height:clamp(24px,2.5vw,28px);border:none;border-radius:clamp(5px,.6vw,8px);background:hsla(0,0%,100%,.15);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:clamp(11px,1.1vw,14px)}.action-btn[data-v-20e5d6b4]:hover{background:hsla(0,0%,100%,.25);transform:scale(1.08)}.action-btn[data-v-20e5d6b4]:active{transform:scale(.95)}.action-btn-danger[data-v-20e5d6b4]:hover{background:rgba(239,68,68,.6)}@media (max-width:768px){.action-bar[data-v-20e5d6b4]{display:none!important}}@keyframes skeleton-shimmer-71848b62{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes skeleton-pulse-71848b62{0%,to{opacity:.4}50%{opacity:.8}}.skeleton-card[data-v-71848b62]{width:100%;height:22vh;background:var(--admin-dashboard-imgcard-bg-color);border-radius:12px;box-shadow:var(--admin-dashboard-imgcard-shadow);overflow:hidden;position:relative}.skeleton-image[data-v-71848b62]{width:100%;height:100%;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-71848b62 1.5s ease-in-out infinite}.skeleton-info[data-v-71848b62]{position:absolute;bottom:0;left:0;right:0;padding:15px;background:linear-gradient(transparent,rgba(0,0,0,.5))}.skeleton-text[data-v-71848b62]{height:14px;width:60%;margin:0 auto;border-radius:4px;background:linear-gradient(90deg,hsla(0,0%,100%,.1) 25%,hsla(0,0%,100%,.25) 50%,hsla(0,0%,100%,.1) 75%);background-size:200% 100%;animation:skeleton-shimmer-71848b62 1.5s ease-in-out infinite}.skeleton-list-item[data-v-71848b62]{animation:skeleton-pulse-71848b62 1.5s ease-in-out infinite}.skeleton-checkbox[data-v-71848b62]{width:18px;height:18px;border-radius:4px;background:var(--skeleton-bg-color)}.skeleton-preview[data-v-71848b62]{width:40px;height:40px;border-radius:6px;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-71848b62 1.5s ease-in-out infinite}.skeleton-text-long[data-v-71848b62]{width:80%}.skeleton-text-long[data-v-71848b62],.skeleton-text-short[data-v-71848b62]{height:14px;border-radius:4px;background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-71848b62 1.5s ease-in-out infinite}.skeleton-text-short[data-v-71848b62]{width:60px}.skeleton-text-tiny[data-v-71848b62]{height:14px;width:40px;border-radius:4px}.skeleton-tag[data-v-71848b62],.skeleton-text-tiny[data-v-71848b62]{background:linear-gradient(90deg,var(--skeleton-bg-color) 25%,color-mix(in srgb,var(--skeleton-bg-color) 70%,var(--skeleton-shimmer-color)) 50%,var(--skeleton-bg-color) 75%);background-size:200% 100%;animation:skeleton-shimmer-71848b62 1.5s ease-in-out infinite}.skeleton-tag[data-v-71848b62]{height:20px;width:50px;border-radius:10px}.skeleton-actions[data-v-71848b62]{height:28px;width:80px;border-radius:6px;background:var(--skeleton-bg-color)}.list-item[data-v-71848b62]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;align-items:center;border-bottom:1px solid var(--el-border-color-lighter)}.list-col[data-v-71848b62]{display:flex;align-items:center}.list-col-checkbox[data-v-71848b62],.list-col-preview[data-v-71848b62]{justify-content:center}@media (max-width:768px){.list-item[data-v-71848b62]{grid-template-columns:28px 40px 1fr auto;padding:10px 8px;gap:8px}.list-col-address[data-v-71848b62],.list-col-channel-name[data-v-71848b62],.list-col-channel[data-v-71848b62],.list-col-date[data-v-71848b62],.list-col-size[data-v-71848b62],.list-col-tags[data-v-71848b62]{display:none}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{content:"";display:table}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{color:var(--el-text-color-placeholder);font-weight:700;margin:0 9px}.el-breadcrumb__separator.el-icon{font-weight:400;margin:0 6px}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{align-items:center;display:inline-flex;float:left}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{color:var(--el-text-color-primary);font-weight:700;text-decoration:none;transition:var(--el-transition-color)}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{color:var(--el-text-color-regular);cursor:text;font-weight:400}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-checkbox-group{font-size:0;line-height:0}.filter-dropdown[data-v-062d5f10]{flex-shrink:0}.filter-trigger[data-v-062d5f10]{cursor:pointer;display:flex;align-items:center}.header-icon[data-v-062d5f10]{font-size:1.5em;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);outline:none}.header-icon[data-v-062d5f10]:hover{color:var(--admin-purple);transform:scale(1.2)}.filter-badge[data-v-062d5f10] .el-badge__content{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border:none;font-size:10px;height:16px;line-height:16px;padding:0 5px}.filter-dropdown-menu[data-v-062d5f10]{padding:8px 0;min-width:180px;max-height:400px;overflow-y:auto}.filter-section[data-v-062d5f10]{padding:8px 12px;border-bottom:1px solid var(--el-border-color-lighter)}.filter-section[data-v-062d5f10]:last-of-type{border-bottom:none}.filter-title[data-v-062d5f10]{font-size:12px;font-weight:600;color:var(--el-text-color-secondary);margin-bottom:6px}.filter-options[data-v-062d5f10],.filter-options[data-v-062d5f10] .el-checkbox-group{display:flex;flex-direction:column;gap:2px}.filter-options[data-v-062d5f10] .el-checkbox{margin-right:0;height:26px;padding:0 6px;border-radius:4px;transition:all .2s ease}.filter-options[data-v-062d5f10] .el-checkbox:hover{background:var(--el-fill-color-light)}.filter-options[data-v-062d5f10] .el-checkbox__label{font-size:13px;color:var(--el-text-color-primary)}.filter-options[data-v-062d5f10] .el-checkbox__input.is-checked+.el-checkbox__label{color:#0ea5e9}.channel-group-title[data-v-062d5f10]{font-size:11px;font-weight:600;color:var(--el-text-color-secondary);text-transform:uppercase;letter-spacing:.5px;padding:4px 6px;margin-top:4px;margin-bottom:2px}.channel-divider[data-v-062d5f10]{height:1px;background:var(--el-border-color-lighter);margin:6px 0}.filter-options[data-v-062d5f10] .el-checkbox__input.is-checked .el-checkbox__inner{background-color:#0ea5e9;border-color:#0ea5e9}.filter-actions[data-v-062d5f10]{padding:10px 12px 6px;display:flex;justify-content:center}.filter-actions .el-button[data-v-062d5f10]{width:100%;background:var(--el-fill-color-light);border:1px solid var(--el-border-color);color:var(--el-text-color-regular);border-radius:6px;transition:all .2s ease}.filter-actions .el-button[data-v-062d5f10]:hover:not(:disabled){background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8;color:#fff}.filter-actions .el-button[data-v-062d5f10]:disabled{opacity:.5;cursor:not-allowed}@media (max-width:768px){.filter-dropdown-menu[data-v-062d5f10]{min-width:160px;max-height:320px}.filter-section[data-v-062d5f10]{padding:6px 10px}.filter-title[data-v-062d5f10]{font-size:11px;margin-bottom:4px}.filter-options[data-v-062d5f10] .el-checkbox{height:24px;padding:0 4px}.filter-options[data-v-062d5f10] .el-checkbox__label{font-size:12px}.header-icon[data-v-062d5f10]{font-size:1.2em}}#themeToggle[data-v-4c6ec90c]{border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:.375rem;transition-property:background-color,border-color,color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.theme_toggle_circle1[data-v-4c6ec90c]{transition:cx .5s ease-in-out,cy .5s ease-in-out,r .5s ease-in-out}.theme_toggle_circle2[data-v-4c6ec90c]{transition:all .5s ease-in-out;fill:var(--admin-theme-toggle-bg-color)}.theme_toggle_svg[data-v-4c6ec90c]{transition:transform .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--admin-theme-toggle-color)}.dark.theme_toggle_svg[data-v-4c6ec90c]{transform:rotate(40deg)}.theme_toggle_g[data-v-4c6ec90c]{transition:opacity .5s ease-in-out}.icon-fade-enter-active[data-v-4c6ec90c],.icon-fade-leave-active[data-v-4c6ec90c]{transition:opacity .3s ease-in-out,transform .3s ease-in-out}.icon-fade-enter-from[data-v-4c6ec90c]{opacity:0;transform:scale(.8) rotate(-90deg)}.icon-fade-leave-to[data-v-4c6ec90c]{opacity:0;transform:scale(.8) rotate(90deg)}.icon-fade-enter-to[data-v-4c6ec90c],.icon-fade-leave-from[data-v-4c6ec90c]{opacity:1;transform:scale(1) rotate(0deg)}.auto-icon[data-v-4c6ec90c]{display:inline-block}.tabs[data-v-4673d77a]{display:flex;align-items:center;justify-content:center;gap:12px}.title[data-v-4673d77a]{display:flex;align-items:center;gap:10px;font-size:1.2em;font-weight:700;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);padding:6px 14px;border-radius:10px;background:linear-gradient(135deg,rgba(99,102,241,.08),rgba(139,92,246,.05));border:1px solid rgba(99,102,241,.15)}.title[data-v-4673d77a]:hover{background:linear-gradient(135deg,rgba(99,102,241,.15),rgba(139,92,246,.1));border-color:rgba(99,102,241,.25);transform:translateY(-1px)}.title .fa-images[data-v-4673d77a]{font-size:1em;color:var(--el-color-primary);background:linear-gradient(135deg,#6366f1,#8b5cf6);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.tabs-dropdown[data-v-4673d77a]{display:flex;align-items:center}.tabs-dropdown-link[data-v-4673d77a]{cursor:pointer;font-size:1.5em;transition:all .3s ease;color:var(--admin-container-color);padding:6px 10px;border-radius:8px;background:transparent}.tabs-dropdown-link.rotate-up[data-v-4673d77a],.tabs-dropdown-link[data-v-4673d77a]:hover{background:rgba(99,102,241,.1);color:var(--el-color-primary)}@media (max-width:768px){.title[data-v-4673d77a]{font-size:1.3em;padding:4px 10px;gap:6px}.tabs-dropdown-link[data-v-4673d77a]{font-size:1.3em;padding:4px 8px}}.el-dropdown__popper.el-popper.tabs-dropdown-popper{border-radius:12px;border:none;background-color:var(--tabs-dropdown-popper-bg-color);backdrop-filter:blur(10px);box-shadow:var(--tabs-dropdown-popper-shadow)}.el-dropdown__popper.el-popper.tabs-dropdown-popper .el-dropdown-menu{border:none;background:none}.el-dropdown__popper.el-popper.tabs-dropdown-popper .el-dropdown-menu__item{border:none;background:none;font-size:16px;font-weight:700;transition:font-size .3s ease}.el-dropdown__popper.el-popper.tabs-dropdown-popper .el-dropdown-menu__item:hover{font-size:18px}.container[data-v-8820054c]{background:var(--admin-container-bg-color);min-height:100vh;font-family:Arial,sans-serif;color:var(--admin-container-color);margin:0;padding:0}[data-v-8820054c] .el-container,[data-v-8820054c] .el-main{overflow:visible}[data-v-8820054c] .el-dialog{border-radius:12px;background-color:var(--dialog-bg-color);backdrop-filter:blur(10px);box-shadow:var(--dialog-box-shadow)}.header-content[data-v-8820054c]{display:flex;justify-content:space-between;align-items:center;padding:10px 24px;background:hsla(0,0%,100%,.72);backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border:1px solid hsla(0,0%,100%,.3);border-top:1px solid hsla(0,0%,100%,.5);box-shadow:0 4px 30px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.05),inset 0 1px 0 hsla(0,0%,100%,.4);transition:all .4s cubic-bezier(.4,0,.2,1);border-radius:16px;position:fixed;top:8px;left:50%;transform:translateX(-50%);width:calc(95% - 16px);z-index:2001;min-height:45px}html.dark .header-content[data-v-8820054c]{background:rgba(30,30,30,.75);border:1px solid hsla(0,0%,100%,.08);border-top:1px solid hsla(0,0%,100%,.12);box-shadow:0 4px 30px rgba(0,0,0,.3),0 1px 3px rgba(0,0,0,.2),inset 0 1px 0 hsla(0,0%,100%,.05)}@media (max-width:768px){.header-content[data-v-8820054c]{flex-direction:column;top:6px;width:calc(100% - 32px);border-radius:14px;padding:6px 12px;gap:4px}.header-icon[data-v-8820054c]{font-size:.95em}.header-content .actions[data-v-8820054c]{gap:10px}.search-card[data-v-8820054c] .el-input__inner{height:28px;font-size:.85em;width:50vw}.search-card[data-v-8820054c] .el-input__wrapper{padding:0 10px}.search-card[data-v-8820054c] .el-input__inner:focus{width:65vw}}.header-content[data-v-8820054c]:hover{background:hsla(0,0%,100%,.82);box-shadow:0 8px 40px rgba(0,0,0,.12),0 2px 6px rgba(0,0,0,.08),inset 0 1px 0 hsla(0,0%,100%,.5);transform:translateX(-50%) translateY(-1px)}html.dark .header-content[data-v-8820054c]:hover{background:rgba(35,35,35,.85);box-shadow:0 8px 40px rgba(0,0,0,.4),0 2px 6px rgba(0,0,0,.3),inset 0 1px 0 hsla(0,0%,100%,.08)}.header-icon[data-v-8820054c]{font-size:1.5em;cursor:pointer;transition:all .3s ease;color:var(--admin-container-color);outline:none}.header-icon[data-v-8820054c]:hover{color:var(--admin-purple);transform:scale(1.2)}.breadcrumb-container[data-v-8820054c]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 10px;margin-bottom:4px}@media (max-width:768px){.breadcrumb-container[data-v-8820054c]{flex-direction:row;align-items:center;gap:8px;padding:0 5px;margin-bottom:2px}}.stats-badge[data-v-8820054c]{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:500;color:var(--el-text-color-secondary);background:var(--el-fill-color-light);padding:4px 10px;border-radius:12px;border:1px solid var(--el-border-color-lighter);transition:all .2s ease;white-space:nowrap;flex-shrink:0}.stats-badge[data-v-8820054c]:hover{background:var(--el-fill-color);color:var(--admin-purple);border-color:var(--admin-purple)}.stats-badge-icon[data-v-8820054c]{font-size:11px;opacity:.8}@media (max-width:768px){.stats-badge[data-v-8820054c]{font-size:10px;padding:2px 6px;border-radius:8px}.stats-badge-icon[data-v-8820054c]{font-size:9px}}.header-content .actions[data-v-8820054c]{display:flex;align-items:center;gap:15px}@media (max-width:768px){.header-content .actions[data-v-8820054c]{margin-top:10px}}.header-content .actions i[data-v-8820054c]{font-size:1.5em;cursor:pointer;transition:color .3s,transform .3s;color:var(--admin-container-color)}.header-content .actions i[data-v-8820054c]:hover{color:var(--admin-purple);transform:scale(1.2)}.header-content .actions .el-dropdown-link i[data-v-8820054c]{color:var(--admin-container-color)}.header-content .actions .el-dropdown-link i[data-v-8820054c]:hover{color:var(--admin-purple)}.header-content .actions .disabled[data-v-8820054c]{color:#bbb;pointer-events:none}.header-content .actions .enabled[data-v-8820054c]{color:var(--admin-purple)}.batch-action-item-icon[data-v-8820054c]{width:20px;margin-right:5px}.search-area[data-v-8820054c]{margin-left:auto;margin-right:20px;display:flex;align-items:center;gap:8px}@media (max-width:768px){.search-area[data-v-8820054c]{margin-right:0;margin-left:0;margin-top:10px;gap:6px}}.search-card[data-v-8820054c]{display:flex;align-items:center}.search-card[data-v-8820054c] .el-input__wrapper{border-radius:20px;background:var(--admin-dashboard-search-card-bg-color);box-shadow:var(--admin-dashboard-search-card-box-shadow);transition:background-color .3s}.search-card[data-v-8820054c] .el-input__inner{width:280px;height:40px;font-size:1.2em;border:none;transition:width .3s;background:none}.search-card[data-v-8820054c] .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder);font-style:italic;font-weight:400;font-size:14px;opacity:.6;letter-spacing:.5px;-moz-transition:all .3s ease;transition:all .3s ease}.search-card[data-v-8820054c] .el-input__inner::placeholder{color:var(--el-text-color-placeholder);font-style:italic;font-weight:400;font-size:14px;opacity:.6;letter-spacing:.5px;transition:all .3s ease}.search-card[data-v-8820054c] .el-input__inner:focus::-moz-placeholder{opacity:.4;transform:translateX(5px)}.search-card[data-v-8820054c] .el-input__inner:focus::placeholder{opacity:.4;transform:translateX(5px)}@media (max-width:768px){.search-card[data-v-8820054c] .el-input__inner{width:45vw;height:32px;font-size:1em}}.search-card[data-v-8820054c] .el-input__inner:focus{width:350px}@media (max-width:768px){.search-card[data-v-8820054c] .el-input__inner:focus{width:55vw}}.search-icon[data-v-8820054c]{cursor:pointer;color:var(--admin-container-color);transition:all .3s ease;font-size:1.3em;opacity:0;transform:scale(.8);pointer-events:none}.search-card:focus-within .search-icon[data-v-8820054c]{opacity:1;transform:scale(1);pointer-events:auto}.search-card:focus-within .search-icon[data-v-8820054c]:hover{color:var(--admin-purple);transform:scale(1.2)}.search-card[data-v-8820054c] .el-input__suffix{display:flex;align-items:center;right:10px}.main-container[data-v-8820054c]{display:flex;flex-direction:column;padding:20px 60px;min-height:calc(100vh - 80px)}@media (max-width:768px){.main-container[data-v-8820054c]{margin-top:12vh}}.content[data-v-8820054c]{display:grid;grid-template-columns:repeat(5,1fr);grid-template-rows:repeat(3,1fr);gap:20px;padding:10px;padding-bottom:0;flex-grow:1;min-height:80vh}.empty-state[data-v-8820054c]{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:var(--admin-container-color);opacity:.6}.empty-icon[data-v-8820054c]{font-size:64px;margin-bottom:20px;color:var(--admin-container-color);opacity:.3}.empty-text[data-v-8820054c]{font-size:18px;font-weight:500;margin:0 0 8px 0}.empty-hint[data-v-8820054c]{font-size:14px;margin:0;opacity:.7}.list-empty[data-v-8820054c]{padding:80px 20px}@media (max-width:768px){.content[data-v-8820054c]{grid-template-columns:1fr;grid-template-rows:none}}.list-view[data-v-8820054c]{display:flex;flex-direction:column;gap:0;background:var(--admin-dashboard-imgcard-bg-color);border-radius:12px;overflow-x:auto;overflow-y:visible;box-shadow:var(--admin-dashboard-imgcard-shadow);margin-top:15px}.list-header[data-v-8820054c]{display:grid;grid-template-columns:50px 60px minmax(180px,1fr) 130px 100px 110px 130px 80px 100px 120px;padding:12px 20px;background:var(--admin-dashboard-stats-bg);font-weight:600;font-size:13px;color:var(--el-text-color-secondary);border-bottom:1px solid var(--el-border-color-lighter);min-width:-moz-fit-content;min-width:fit-content}.list-col[data-v-8820054c]{display:flex;align-items:center}.list-col-checkbox[data-v-8820054c]{justify-content:center;min-width:40px}.custom-checkbox[data-v-8820054c]{width:18px;height:18px;border:2px solid var(--el-border-color);border-radius:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;background:transparent}.custom-checkbox[data-v-8820054c]:hover{border-color:#38bdf8}.custom-checkbox.checked[data-v-8820054c],.custom-checkbox.indeterminate[data-v-8820054c]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border-color:#38bdf8}.custom-checkbox .check-icon[data-v-8820054c]{font-size:10px;color:#fff}@media (max-width:768px){.list-header[data-v-8820054c]{display:none}}.pagination-container[data-v-8820054c]{display:flex;justify-content:center;align-items:center;margin-top:20px;padding-bottom:20px;gap:15px;position:relative}.pagination-center[data-v-8820054c]{display:flex;align-items:center;gap:10px}.pagination-container[data-v-8820054c] .el-pagination{--el-pagination-button-bg-color:var(--admin-dashboard-btn-bg-color);--el-pagination-hover-color:var(--admin-purple)}.pagination-container[data-v-8820054c] .el-pager li{background:var(--admin-dashboard-btn-bg-color);border-radius:10px;margin:0 4px;min-width:36px;height:36px;line-height:36px;font-weight:500;border:none;box-shadow:var(--admin-dashboard-btn-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.pagination-container[data-v-8820054c] .el-pager li:hover{color:#38bdf8;transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow)}.pagination-container[data-v-8820054c] .el-pager li.is-active{background:linear-gradient(135deg,#0ea5e9,#38bdf8)!important;color:#fff!important;border-radius:10px;box-shadow:var(--admin-dashboard-btn-shadow),0 4px 12px rgba(56,189,248,.3),inset 0 1px 0 hsla(0,0%,100%,.2);transition:all .3s cubic-bezier(.4,0,.2,1)}.pagination-container[data-v-8820054c] .el-pager li.is-active:hover{transform:translateY(-2px)!important;box-shadow:var(--admin-dashboard-btn-hover-shadow),0 6px 16px rgba(56,189,248,.4),inset 0 1px 0 hsla(0,0%,100%,.2)!important}.pagination-container[data-v-8820054c] .btn-next,.pagination-container[data-v-8820054c] .btn-prev{background:var(--admin-dashboard-btn-bg-color)!important;border-radius:10px!important;min-width:36px;height:36px;border:none;box-shadow:var(--admin-dashboard-btn-shadow);transition:all .3s cubic-bezier(.4,0,.2,1)}.pagination-container[data-v-8820054c] .btn-next:hover,.pagination-container[data-v-8820054c] .btn-prev:hover{color:#38bdf8;transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow)}.pagination-right[data-v-8820054c]{display:flex;align-items:center;gap:10px;position:absolute;right:0}.page-total[data-v-8820054c]{font-size:13px;color:var(--el-text-color-secondary);white-space:nowrap}.page-jump[data-v-8820054c]{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--el-text-color-secondary)}.page-jump .jump-input[data-v-8820054c]{width:50px}.page-jump .jump-input[data-v-8820054c] .el-input__wrapper{background:var(--admin-dashboard-btn-bg-color);box-shadow:var(--admin-dashboard-btn-shadow);border-radius:8px;padding:0 8px;height:28px}.page-jump .jump-input[data-v-8820054c] .el-input__inner{text-align:center;color:var(--el-text-color-primary);height:28px;line-height:28px}.page-jump .jump-btn[data-v-8820054c]{background:linear-gradient(135deg,#0ea5e9,#38bdf8);border:none;border-radius:8px;padding:0 12px;height:28px;font-size:12px;font-weight:600;color:#fff;box-shadow:0 2px 8px rgba(56,189,248,.3);transition:all .3s ease}.page-jump .jump-btn[data-v-8820054c]:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(56,189,248,.4)}@media (max-width:768px){.pagination-container[data-v-8820054c]{flex-direction:column;gap:12px;padding-bottom:15px}.pagination-center[data-v-8820054c]{order:0}.pagination-right[data-v-8820054c]{position:static;width:100%;justify-content:center;order:1}.page-jump .jump-input[data-v-8820054c]{width:45px}}.refresh-btn[data-v-8820054c]{cursor:pointer;background:var(--admin-dashboard-btn-bg-color);box-shadow:var(--admin-dashboard-btn-shadow);color:#38bdf8;border:none;border-radius:10px;width:36px;height:36px;min-width:36px;padding:0;display:flex;align-items:center;justify-content:center;font-size:14px;transition:all .3s cubic-bezier(.4,0,.2,1)}.refresh-btn[data-v-8820054c]:hover{transform:translateY(-2px);box-shadow:var(--admin-dashboard-btn-hover-shadow);background:linear-gradient(135deg,#0ea5e9,#38bdf8);color:#fff}.load-more[data-v-8820054c]{cursor:pointer;background:linear-gradient(135deg,#0ea5e9,#38bdf8);box-shadow:0 4px 15px rgba(56,189,248,.3);color:#fff;border:none;border-radius:10px;height:36px;padding:0 16px;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1)}.load-more[data-v-8820054c]:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(56,189,248,.5)}[data-v-8820054c] .btn-prev{left:8px}[data-v-8820054c] .btn-next,[data-v-8820054c] .btn-prev{border-radius:100%;position:fixed;top:50%;scale:1;color:var(--admin-dashboard-btn-color)}[data-v-8820054c] .btn-next{right:8px}@media (min-width:768px){[data-v-8820054c] .el-pagination.is-background .btn-next,[data-v-8820054c] .el-pagination.is-background .btn-prev{background-color:var(--admin-dashboard-btn-bg-color);backdrop-filter:blur(10px);box-shadow:var(--admin-dashboard-btn-shadow);transition:all .3s ease}[data-v-8820054c] .el-pagination.is-background .btn-next:hover,[data-v-8820054c] .el-pagination.is-background .btn-prev:hover{transform:translateY(-10%);box-shadow:var(--admin-dashboard-btn-hover-shadow)}}.question-icon[data-v-8820054c]{margin:0 3px}.breadcrumb[data-v-8820054c]{padding:8px 12px;background-color:var(--el-bg-color);border-radius:6px;font-size:.95em;box-shadow:var(--admin-dashboard-stats-shadow);transition:all .3s ease}.breadcrumb[data-v-8820054c]:hover{transform:translateY(-1px);box-shadow:var(--admin-dashboard-stats-hover-shadow)}.breadcrumb-home-icon[data-v-8820054c]{font-size:14px;color:#38bdf8;transition:color .2s ease}.breadcrumb-home-icon[data-v-8820054c]:hover{color:var(--admin-purple)}[data-v-8820054c] .el-breadcrumb__item{cursor:pointer}[data-v-8820054c] .el-breadcrumb__inner:hover{color:var(--el-color-primary)}.mobile-directory-trigger[data-v-8820054c]{display:none;align-items:center;gap:6px;padding:6px 10px;background:var(--el-fill-color-light);border-radius:8px;border:1px solid var(--el-border-color-lighter);cursor:pointer;transition:all .2s ease}.mobile-directory-trigger[data-v-8820054c]:active{background:var(--el-fill-color)}.mobile-directory-icon[data-v-8820054c]{font-size:12px;color:#38bdf8}.mobile-directory-path[data-v-8820054c]{font-size:12px;font-weight:500;color:var(--el-text-color-primary);max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-directory-arrow[data-v-8820054c]{font-size:8px;color:var(--el-text-color-secondary)}.desktop-only[data-v-8820054c]{display:block}@media (max-width:768px){.mobile-directory-trigger[data-v-8820054c]{display:flex}.desktop-only[data-v-8820054c]{display:none!important}.breadcrumb-container[data-v-8820054c]{padding:0;margin-left:0}} \ No newline at end of file diff --git a/css/743.ab3d1775.css.gz b/css/257.0e3de612.css.gz similarity index 84% rename from css/743.ab3d1775.css.gz rename to css/257.0e3de612.css.gz index ed9ad09..ed83584 100644 Binary files a/css/743.ab3d1775.css.gz and b/css/257.0e3de612.css.gz differ diff --git a/index.html b/index.html index 8481943..edf27d2 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -
>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1< >>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<
如果启用自定义链接格式,只保留xxx.jpg部分,其他部分请自行输入",placement:"top","raw-content":""},{default:(0,i.k6)(()=>[(0,i.bF)(d,{icon:"question-circle",class:"section-help-icon"})]),_:1})]),(0,i.Lk)("div",Oa,[(0,i.Lk)("div",Wa,[t[51]||(t[51]=(0,i.Lk)("span",{class:"setting-label"},"启用自定义",-1)),(0,i.bF)(O,{modelValue:o.useCustomUrl,"onUpdate:modelValue":t[14]||(t[14]=e=>o.useCustomUrl=e),"active-value":"true","inactive-value":"false"},null,8,["modelValue"])]),"true"===o.useCustomUrl?((0,i.uX)(),(0,i.CE)("div",$a,[t[52]||(t[52]=(0,i.Lk)("span",{class:"setting-label"},"自定义前缀",-1)),(0,i.bF)(h,{modelValue:o.customUrlPrefix,"onUpdate:modelValue":t[15]||(t[15]=e=>o.customUrlPrefix=e),placeholder:"请输入自定义链接前缀",class:"setting-input"},null,8,["modelValue"])])):(0,i.Q3)("",!0)])]),(0,i.Lk)("div",Pa,[(0,i.bF)(A,{type:"primary",onClick:t[16]||(t[16]=e=>o.showUrlDialog=!1),class:"confirm-btn"},{default:(0,i.k6)(()=>[...t[53]||(t[53]=[(0,i.eW)("确定",-1)])]),_:1})])]),_:1},8,["modelValue","width"]),(0,i.bF)($,{modelValue:o.showTagDialog,"onUpdate:modelValue":t[18]||(t[18]=e=>o.showTagDialog=e),fileId:o.currentTagFile,onTagsUpdated:l.handleTagsUpdated},null,8,["modelValue","fileId","onTagsUpdated"]),(0,i.bF)(P,{modelValue:o.showBatchTagDialog,"onUpdate:modelValue":t[19]||(t[19]=e=>o.showBatchTagDialog=e),selectedFiles:o.selectedFiles,onTagsUpdated:l.handleBatchTagsUpdated},null,8,["modelValue","selectedFiles","onTagsUpdated"]),(0,i.bF)(R,{modelValue:o.showMobileActionModal,"onUpdate:modelValue":t[20]||(t[20]=e=>o.showMobileActionModal=e),title:o.mobileActionIsFolder?l.getFolderName(o.mobileActionFile?.name||""):o.mobileActionFile?.metadata?.FileName||l.getFileName(o.mobileActionFile?.name||""),isFolder:o.mobileActionIsFolder,onAction:l.handleMobileAction},null,8,["modelValue","title","isFolder","onAction"]),(0,i.bF)(N,{modelValue:o.showMobileDirectoryDrawer,"onUpdate:modelValue":t[21]||(t[21]=e=>o.showMobileDirectoryDrawer=e),currentPath:o.currentPath,onNavigate:l.navigateToFolder,onGoBack:l.handleGoBack},null,8,["modelValue","currentPath","onNavigate","onGoBack"])])}a(1148),a(116),a(3579),a(7642),a(8004),a(3853),a(5876),a(2475),a(5024),a(1698),a(4603),a(7566),a(8721);var Na=a(8401),ja=a(4813),Va=a.n(ja);a(8335);class Ma{constructor(){this.FILE_LIST_PATH="data/fileList.json"}getLocalFileList(){try{const e=localStorage.getItem(this.FILE_LIST_PATH);return e?JSON.parse(e):{files:[],directories:[]}}catch(e){return console.error("Error reading local file list:",e),{files:[],directories:[]}}}saveFileList(e){try{return localStorage.setItem(this.FILE_LIST_PATH,JSON.stringify(e)),!0}catch(t){return console.error("Error saving file list:",t),!1}}addFile(e){try{const t=this.getLocalFileList();return t.files.push(e),this.saveFileList(t)}catch(t){return console.error("Error adding file:",t),!1}}addFolder(e){try{const t=this.getLocalFileList();return!t.directories.includes(e)&&(t.directories.push(e),this.saveFileList(t))}catch(t){return console.error("Error adding folder:",t),!1}}moveFile(e,t,a=!1,i=""){try{let n=this.getLocalFileList();if(a){const t=n.directories.indexOf(e);-1!==t&&n.directories.splice(t,1)}else{const t=n.files.findIndex(t=>t.name===e);-1!==t&&n.files.splice(t,1)}if(t.startsWith(i)){const e=t.substring(i.length).split("/");if(e.length>1){const t=i+e[0];n.directories.includes(t)||n.directories.push(t)}}return this.saveFileList(n)}catch(n){return console.error("Error moving file:",n),!1}}removeFile(e){try{let t=this.getLocalFileList();return t.files=t.files.filter(t=>t.name!==e),this.saveFileList(t)}catch(t){return console.error("Error removing file:",t),!1}}removeFolder(e){try{let t=this.getLocalFileList();return t.files=t.files.filter(t=>!t.name.startsWith(e+"/")),t.directories=t.directories.filter(t=>t!==e),this.saveFileList(t)}catch(t){return console.error("Error removing folder:",t),!1}}getFilesInFolder(e){try{const t=this.getLocalFileList(),a=t.files.filter(t=>t.name.startsWith(e+"/")),i=t.directories.filter(t=>t.startsWith(e+"/"));return{files:a,directories:i}}catch(t){return console.error("Error getting files in folder:",t),{files:[],directories:[]}}}buildFilterParams(e){let t="";return e.accessStatus&&e.accessStatus.length>0&&(t+=`&accessStatus=${encodeURIComponent(e.accessStatus.join(","))}`),e.listType&&e.listType.length>0&&(t+=`&listType=${encodeURIComponent(e.listType.join(","))}`),e.label&&e.label.length>0&&(t+=`&label=${encodeURIComponent(e.label.join(","))}`),e.fileType&&e.fileType.length>0&&(t+=`&fileType=${encodeURIComponent(e.fileType.join(","))}`),e.channel&&e.channel.length>0&&(t+=`&channel=${encodeURIComponent(e.channel.join(","))}`),e.channelName&&e.channelName.length>0&&(t+=`&channelName=${encodeURIComponent(e.channelName.join(","))}`),t}async refreshFileList(e,t="",a="",i="",n={}){t=t.trim();try{let s=`/api/manage/list?count=60&dir=${e}&search=${encodeURIComponent(t)}`;a&&(s+=`&includeTags=${encodeURIComponent(a)}`),i&&(s+=`&excludeTags=${encodeURIComponent(i)}`),s+=this.buildFilterParams(n);const r=await(0,K.A)(s,{method:"GET"}),o=await r.json();return o.isIndexedResponse||X.nk.warning("索引构建中,当前搜索和排序结果可能不准确,请稍后再试。"),this.saveFileList(o)}catch(s){return console.error("Error refreshing file list:",s),!1}}async loadMoreFiles(e,t="",a="",i="",n=60,s={}){t=t.trim();try{const r=this.getLocalFileList(),o=r.files.length;let l=`/api/manage/list?dir=${e}&start=${o}&count=${n}&search=${encodeURIComponent(t)}`;a&&(l+=`&includeTags=${encodeURIComponent(a)}`),i&&(l+=`&excludeTags=${encodeURIComponent(i)}`),l+=this.buildFilterParams(s);const c=await(0,K.A)(l,{method:"GET"}),d=await c.json();return r.files.push(...d.files),this.saveFileList(r)}catch(r){return console.error("Error loading more files:",r),{files:[],directories:[]}}}}const Xa=new Ma;var Za=a(2388),Ka={data(){return{Number:0,directFileCount:0,directFolderCount:0,showLogoutButton:!1,tableData:[],tempSearch:"",search:"",searchKeywords:"",searchIncludeTags:"",searchExcludeTags:"",isSearchMode:!1,currentPage:1,pageSize:15,selectedFiles:[],sortOption:"dateDesc",isUploading:!1,showdetailDialog:!1,detailFile:null,activeUrlTab:"originUrl",defaultUrlFormat:"originUrl",showUrlDialog:!1,useCustomUrl:"false",customUrlPrefix:"",loading:!1,currentPath:"",refreshLoading:!1,showTagDialog:!1,showBatchTagDialog:!1,currentTagFile:"",viewMode:"card",showMobileActionModal:!1,mobileActionFile:null,mobileActionIndex:-1,mobileActionIsFolder:!1,longPressTimer:null,showMobileDirectoryDrawer:!1,jumpPage:"",filters:{accessStatus:[],listType:[],label:[],fileType:[],channel:[],channelName:[]},channelNameOptions:[]}},components:{DashboardTabs:na.A,TagManagementDialog:me,BatchTagDialog:q,SkeletonLoader:zt,FileCard:_t,FolderCard:At,FileListItem:et,FileDetailDialog:Ee,MobileActionSheet:y,MobileDirectoryDrawer:f,FilterDropdown:ia},computed:{...(0,Na.L8)(["adminUrlSettings","userConfig"]),filteredTableData(){return this.tableData},totalPages(){return Math.ceil(this.filteredTableData.length/this.pageSize)||1},realTotalPages(){const e=this.directFolderCount+this.directFileCount;return Math.ceil(e/this.pageSize)||1},activeFilterCount(){return Object.values(this.filters).reduce((e,t)=>e+(Array.isArray(t)?t.length:0),0)},hasSearchOrFilter(){return this.isSearchMode||this.activeFilterCount>0},paginatedTableData(){const e=this.sortData(this.filteredTableData),t=(this.currentPage-1)*this.pageSize,a=t+this.pageSize;let i=e.slice(t,a);const n=i.filter(e=>this.isImage(e)).map(e=>this.getFileLink(e.name));return i.forEach(e=>{this.isImage(e)&&(e.previewSrcList=n.slice(n.indexOf(this.getFileLink(e.name))).concat(n.slice(0,n.indexOf(this.getFileLink(e.name)))))}),i.forEach(e=>{"TelegramNew"===e.metadata?.Channel?e.channelTag="TG":"CloudflareR2"===e.metadata?.Channel?e.channelTag="R2":"S3"===e.metadata?.Channel?e.channelTag="S3":"Discord"===e.metadata?.Channel?e.channelTag="DC":"HuggingFace"===e.metadata?.Channel?e.channelTag="HF":"External"===e.metadata?.Channel?e.channelTag="外链":e.channelTag="未知"}),i},sortIcon(){return"dateDesc"===this.sortOption?"sort-amount-down":"sort-alpha-up"},dialogWidth(){return window.innerWidth>768?"50%":"90%"},detailDialogWidth(){return window.innerWidth>768?"70%":"90%"},accessType(){return"White"===this.detailFile?.metadata?.ListType?"正常":"Block"===this.detailFile?.metadata?.ListType||"adult"===this.detailFile?.metadata?.Label?"受限":"正常"},allUrl(){return"External"===this.detailFile?.metadata?.Channel?{originUrl:`${this.detailFile?.metadata?.ExternalLink}`,mdUrl:``,htmlUrl:``,bbUrl:`[img]${this.detailFile?.metadata?.ExternalLink}[/img]`,tgId:this.detailFile?.metadata?.TgFileId||"未知",S3Location:this.detailFile?.metadata?.S3Location||"未知",S3CdnFileUrl:this.detailFile?.metadata?.S3CdnFileUrl||"未知"}:{originUrl:`${this.rootUrl}${this.detailFile?.name}`,mdUrl:``,htmlUrl:`
`,bbUrl:`[img]${this.rootUrl}${this.detailFile?.name}[/img]`,tgId:this.detailFile?.metadata?.TgFileId||"未知",S3Location:this.detailFile?.metadata?.S3Location||"未知",S3CdnFileUrl:this.detailFile?.metadata?.S3CdnFileUrl||"未知"}},tableColumnNum(){return window.innerWidth>768?3:1},tablePreviewSpan(){return window.innerWidth>768?2:1},disableTooltip(){return window.innerWidth<768},selectPage(){return this.paginatedTableData.every(e=>e.selected)},selectedPageFiles(){return this.paginatedTableData.some(e=>e.selected)},selectPageIcon(){return this.selectPage?"check-square":this.selectedPageFiles?"minus-square":"square"},rootUrl(){return"true"===this.useCustomUrl?this.customUrlPrefix:this.userConfig?.urlPrefix||`${document.location.origin}/file/`},isSelectAll:{get(){return this.paginatedTableData.length>0&&this.paginatedTableData.every(e=>e.selected)},set(e){this.paginatedTableData.forEach(t=>t.selected=e)}},isIndeterminate(){const e=this.paginatedTableData.filter(e=>e.selected).length;return e>0&&e
`;break;case"bbUrl":a=`[img]${this.paginatedTableData[e].metadata?.ExternalLink}[/img]`;break;case"tgId":a=this.paginatedTableData[e].metadata?.TgFileId||"none";break;case"s3Location":a=this.paginatedTableData[e].metadata?.S3Location||"none";break}else switch(this.defaultUrlFormat){case"originUrl":a=`${this.rootUrl}${t}`;break;case"mdUrl":a=`![${this.paginatedTableData[e].metadata?.FileName||t}](${this.rootUrl}${t})`;break;case"htmlUrl":a=`
`;break;case"bbUrl":a=`[img]${this.rootUrl}${t}[/img]`;break;case"tgId":a=this.paginatedTableData[e].metadata?.TgFileId||"none";break;case"s3Location":a=this.paginatedTableData[e].metadata?.S3Location||"none";break}navigator.clipboard?navigator.clipboard.writeText(a).then(()=>this.$message.success("复制文件链接成功")):this.copyToClipboardFallback(a)},async loadMoreData(){this.loading=!0;try{await Xa.loadMoreFiles(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,60,this.filters),await this.fetchFileList()}catch(e){this.$message.error("加载更多文件失败,请检查网络连接")}finally{this.loading=!1}},updateStats(e,t=!1){t?this.Number=e:this.Number+=e},sort(e){this.sortOption=e},sortData(e){const t=e.filter(e=>e.isFolder),a=e.filter(e=>!e.isFolder);return"dateDesc"===this.sortOption?(t.sort((e,t)=>new Date(t.metadata?.TimeStamp)-new Date(e.metadata?.TimeStamp)),a.sort((e,t)=>new Date(t.metadata?.TimeStamp)-new Date(e.metadata?.TimeStamp))):(t.sort((e,t)=>e.name.localeCompare(t.name)),a.sort((e,t)=>e.name.localeCompare(t.name))),t.concat(a)},handleVideoClick(e){const t=e.target;t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen&&t.msRequestFullscreen()},handleLogout(){this.$store.commit("setCredentials",null),this.$router.push("/adminLogin")},handleSelectPage(){this.selectPage?this.paginatedTableData.forEach(e=>e.selected=!1):this.paginatedTableData.forEach(e=>e.selected=!0)},handleBatchAction(e){"copy"===e?this.handleBatchCopy():"delete"===e?this.handleBatchDelete():"download"===e?this.handleBatchDownload():"move"===e?this.handleBatchMove():"tagManagement"===e?this.handleBatchTagManagement():"ban"===e?this.handleBatchBlock():"white"===e&&this.handleBatchWhite()},handleMove(e,t){this.$prompt("请输入新的目录","移动文件",{confirmButtonText:"确定",cancelButtonText:"取消",inputValue:"/",beforeClose:(e,t,a)=>{if("confirm"===e){const e=t.inputValue,i=(0,Za.G)(e);if(!i.valid)return void this.$message.error(i.error);a()}else a()}}).then(({value:e})=>{const a=e.replace(/^\/+/,"")+(e.endsWith("/")||""===e?"":"/"),i=this.tableData.find(e=>e.name===t).isFolder;a!==this.currentPath?(0,K.A)(`/api/manage/move/${t}?folder=${i}&dist=${a}`,{method:"GET"}).then(e=>{if(!e.ok)return Promise.reject("请求失败");{const e=this.tableData.findIndex(e=>e.name===t);if(-1!==e){const n=a+t.split("/").pop();Xa.moveFile(t,n,i,this.currentPath),this.tableData.splice(e,1),this.$nextTick(()=>{const e=[...this.tableData];this.tableData=[],this.$nextTick(()=>{this.tableData=e})})}this.updateStats(-1,!1),this.$message.success("移动成功")}}).then(()=>{this.refreshLocalFileList()}).catch(()=>this.$message.error("移动失败")):this.$message.warning("目标文件夹不能是当前文件夹")}).catch(()=>console.log("已取消移动文件"))},handleBatchMove(){this.$prompt("请输入新的目录","移动文件",{confirmButtonText:"确定",cancelButtonText:"取消",inputValue:"/",beforeClose:(e,t,a)=>{if("confirm"===e){const e=t.inputValue,i=(0,Za.G)(e);if(!i.valid)return void this.$message.error(i.error);a()}else a()}}).then(({value:e})=>{const t=e.replace(/^\/+/,"")+(e.endsWith("/")||""===e?"":"/");if(t===this.currentPath)return void this.$message.warning("目标文件夹不能是当前文件夹");const a=this.selectedFiles.map(e=>{const a=e.isFolder;return(0,K.A)(`/api/manage/move/${e.name}?folder=${a}&dist=${t}`,{method:"GET"})});Promise.all(a).then(e=>{let a=0;e.forEach((e,i)=>{if(e.ok){a++;const e=this.selectedFiles[i];e.selected=!1;const n=this.tableData.findIndex(t=>t.name===e.name);if(-1!==n){const a=t+e.name.split("/").pop();Xa.moveFile(e.name,a,e.isFolder,this.currentPath),this.tableData.splice(n,1)}}}),this.$nextTick(()=>{const e=[...this.tableData];this.tableData=[],this.$nextTick(()=>{this.tableData=e})}),this.updateStats(-a,!1),this.$message.success("移动成功")}).then(()=>{this.refreshLocalFileList()}).catch(()=>this.$message.error("移动失败"))}).catch(()=>console.log("已取消移动文件"))},handleBatchBlock(){this.$confirm("此操作将把选中的文件加入黑名单, 是否继续?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>e.isFolder?Promise.resolve({ok:!1}):(0,K.A)(`/api/manage/block/${e.name}`,{method:"GET"}));Promise.all(e).then(e=>{e.forEach((e,t)=>{if(e.ok){const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[t].name);-1!==e&&(this.tableData[e].metadata.ListType="Block")}}),this.$message.success("批量加入黑名单成功")}).catch(()=>this.$message.error("批量加入黑名单失败"))}).catch(()=>console.log("已取消批量加入黑名单"))},handleBatchWhite(){this.$confirm("此操作将把选中的文件加入白名单, 是否继续?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then(()=>{const e=this.selectedFiles.map(e=>e.isFolder?Promise.resolve({ok:!1}):(0,K.A)(`/api/manage/white/${e.name}`,{method:"GET"}));Promise.all(e).then(e=>{e.forEach((e,t)=>{if(e.ok){const e=this.tableData.findIndex(e=>e.name===this.selectedFiles[t].name);-1!==e&&(this.tableData[e].metadata.ListType="White")}}),this.$message.success("批量加入白名单成功")}).catch(()=>this.$message.error("批量加入白名单失败"))}).catch(()=>console.log("已取消批量加入白名单"))},handleBatchDownload(){const e=new(Va()),t=e.folder("files"),a={},i=this.selectedFiles.map(async e=>{if(e.isFolder)return;const i=await fetch(this.getFileLink(e.name)),n=await i.blob();let s=e.metadata?.FileName||e.name;if(a[s]){const t=s.substring(s.lastIndexOf(".")),i=s.substring(0,s.lastIndexOf("."));s=`${i}(${a[s]})${t}`,a[e.name]++}else a[s]=1;t.file(s,n)});Promise.all(i).then(()=>e.generateAsync({type:"blob"})).then(e=>{const t=document.createElement("a");t.href=URL.createObjectURL(e),t.download="files.zip",t.click()})},isVideo(e){if(this.isAudio(e))return!1;let t=e.metadata?.FileType?.includes("video");if(!t){const a=["mp4","webm","ogg","avi","mov","flv","wmv","mkv","rmvb","3gp","mpg","mpeg","m4v","f4v","rm","asf","dat","ts","vob","swf","divx","xvid","m2ts","mts","m2v","3g2","3gp2","3gpp","3gpp2","mpe","m1v","mpv","mpv2","mp2v","m2t","m2ts","m2v","m4v"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},isAudio(e){let t=e.metadata?.FileType?.includes("audio");if(!t){const a=["mp3","wav","flac","aac","ogg","wma","m4a","ape","aiff","alac","opus","mid","midi","m4b","m4p","m4r","amr","au","ra","ram"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},isImage(e){let t=e.metadata?.FileType?.includes("image");if(!t){const a=["jpg","jpeg","png","gif","bmp","webp","svg","ico","tiff","tif","psd","ai","eps","raw","cr2","nef","orf","sr2","dng","arw","rw2","raf","pef","x3f","srf","erf","mrw","nrw","kdc","dcr","mef","mos","crw","raf","rwl","srw","3fr","fff","iiq","qtk","bay","k25","kdc","dcs","drf","dng","erf","kdc","mdc","mef","mos","mrw","nef","nrw","orf","pef","ptx","pxn","r3d","raf","raw","rwl","rw2","rwz","sr2","srf","x3f"],i=e.name.substring(e.name.lastIndexOf(".")+1).toLowerCase();t=a.includes(i)}return t},getFileLink(e){const t=`/file/${e}?from=admin`;return t},handlePageChange(e){this.currentPage=e,this.currentPage===Math.ceil(this.tableData.length/this.pageSize)&&this.loadMoreData()},handleJumpPage(){const e=parseInt(this.jumpPage);isNaN(e)||e<1?this.$message.warning("请输入有效的页码"):e>this.realTotalPages?this.$message.warning(`页码不能超过 ${this.realTotalPages}`):(e>this.totalPages?(this.$message.info("正在加载数据,请稍候..."),this.loadMoreDataUntilPage(e)):this.currentPage=e,this.jumpPage="")},async loadMoreDataUntilPage(e){this.loading=!0;try{const t=e*this.pageSize,a=this.filteredTableData.filter(e=>e.isFolder).length,i=this.filteredTableData.filter(e=>!e.isFolder).length,n=Math.max(0,t-a-i);n>0&&(await Xa.loadMoreFiles(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,n,this.filters),await this.fetchFileList()),this.currentPage=Math.min(e,this.totalPages)}catch(t){this.$message.error("加载数据失败,请检查网络连接")}finally{this.loading=!1}},isFolder(e){if(e.isFolder)return!0;let t=e.name;if(t.startsWith("http")&&(t=t.split("/file/")[1]),t&&t.includes("/")){const e=this.currentPath?t.substring(this.currentPath.length):t;return""===this.currentPath?!t.split("/")[0].includes("."):e.includes("/")}return!1},getFolderName(e){let t="";if(e&&e.includes("/")){const a=e.split("/");if(""===this.currentPath)t=a[0];else{const a=e.substring(this.currentPath.length);t=a.split("/")[0]}}else t=e;const a=20;if(t.length>a){const e=Math.floor((a-3)/2),i=Math.ceil((a-3)/2);return`${t.substring(0,e)}...${t.substring(t.length-i)}`}return t},getFileName(e){let t=e.split("/").pop();const a=20;if(t.length>a){const e=Math.floor((a-3)/2),i=Math.ceil((a-3)/2);return`${t.substring(0,e)}...${t.substring(t.length-i)}`}return t},getFileNameStart(e){if(!e)return"";if(e.length<=30)return e;const t=e.lastIndexOf(".");if(t>0){const a=e.substring(0,t),i=Math.min(a.length,Math.floor(.6*e.length));return a.substring(0,i)}return e.substring(0,Math.floor(.6*e.length))},getFileNameEnd(e){if(!e)return"";if(e.length<=30)return"";const t=e.lastIndexOf(".");if(t>0){const a=e.substring(t),i=e.substring(0,t),n=Math.min(8,Math.floor(.2*i.length));return"…"+i.substring(i.length-n)+a}const a=Math.min(10,Math.floor(.3*e.length));return"…"+e.substring(e.length-a)},enterFolder(e){this.currentPath=e+(e.endsWith("/")?"":"/"),this.refreshFileList()},navigateToFolder(e){this.currentPath=e?e+(e.endsWith("/")?"":"/"):"",this.refreshFileList()},async fetchFileList(){this.loading=!0;try{const e=Xa.getLocalFileList(),t=new Set(e.directories||[]),a=e.files||[],i=Array.from(t).map(e=>({name:e,isFolder:!0,selected:!1,metadata:{FileName:e.split("/").pop()}})),n=a.map(e=>({name:e.name,isFolder:!1,selected:!1,metadata:e.metadata}));this.tableData=[...i,...n],this.updateStats(e.totalCount,!0),this.directFileCount=e.directFileCount||0,this.directFolderCount=e.directFolderCount||0}catch(e){console.error("Error fetching file list:",e),this.$message.error("获取文件列表失败")}finally{this.loading=!1}},async refreshFileList(){this.refreshLoading=!0,this.loading=!0;try{const e=await Xa.refreshFileList(this.currentPath,this.searchKeywords,this.searchIncludeTags,this.searchExcludeTags,this.filters);if(!e)throw new Error("Refresh failed");await this.fetchFileList()}catch(e){console.error("Error refreshing file list:",e),this.$message.error("刷新失败,请重试")}finally{this.refreshLoading=!1,this.loading=!1}},async refreshLocalFileList(){this.refreshLoading=!0,this.loading=!0;try{await this.fetchFileList()}catch(e){console.error("Error refreshing local file list:",e),this.$message.error("刷新失败,请重试")}finally{this.refreshLoading=!1,this.loading=!1}},handleTagManagement(e){this.currentTagFile=e,this.showTagDialog=!0},handleBatchTagManagement(){0!==this.selectedFiles.length?this.showBatchTagDialog=!0:this.$message.warning("请先选择文件")},async handleTagsUpdated(e){const t=this.tableData.findIndex(e=>e.name===this.currentTagFile);-1!==t&&(this.tableData[t].metadata||(this.tableData[t].metadata={}),this.tableData[t].metadata.Tags=e,this.showdetailDialog&&this.detailFile?.name===this.currentTagFile&&(this.detailFile.metadata||(this.detailFile.metadata={}),this.detailFile.metadata.Tags=e))},async handleBatchTagsUpdated(){await this.refreshLocalFileList()},generateFileLink(e,t){const a="External"===t?.Channel,i=a?t?.ExternalLink:`${this.rootUrl}${e}`,n=t?.FileName||e;switch(this.defaultUrlFormat){case"originUrl":return i;case"mdUrl":return``;case"htmlUrl":return`
`;case"bbUrl":return`[img]${i}[/img]`;case"tgId":return t?.TgFileId||"";case"s3Location":return t?.S3Location||"";default:return i}},async handleFolderCopy(e){const t=this.$loading({lock:!0,text:"正在获取文件列表..."});try{const a=await(0,K.A)(`/api/manage/list?dir=${encodeURIComponent(e)}&recursive=true&count=-1`,{method:"GET"}),i=await a.json();if(t.close(),!i.files||0===i.files.length)return void this.$message.warning("文件夹为空,没有可复制的链接");const n=i.files.map(e=>this.generateFileLink(e.name,e.metadata)).filter(e=>e);if(0===n.length)return void this.$message.warning("没有可复制的链接");const s=n.join("\n");navigator.clipboard?(await navigator.clipboard.writeText(s),this.$message.success(`已复制 ${n.length} 个文件链接`)):(this.copyToClipboardFallback(s),this.$message.success(`已复制 ${n.length} 个文件链接`))}catch(a){t.close(),console.error("复制文件夹链接失败:",a),this.$message.error("复制文件夹链接失败,请重试")}}},mounted(){this.loading=!0,(0,K.A)("/api/manage/check",{method:"GET"}).then(e=>e.text()).then(e=>{if("true"==e)return this.showLogoutButton=!0,!0;if("Not using basic auth."==e)return!0;throw new Error("Unauthorized")}).then(()=>this.refreshFileList()).then(()=>this.extractChannelNames()).catch(e=>{"Unauthorized"!==e.message&&this.$message.error("同步数据时出错,请检查网络连接")}).finally(()=>{this.loading=!1}),this.customUrlPrefix=this.adminUrlSettings.customUrlPrefix,this.useCustomUrl=this.adminUrlSettings.useCustomUrl}};const Ga=(0,h.A)(Ka,[["render",Ra],["__scopeId","data-v-5c4ee283"]]);var Ha=Ga},415:function(e,t,a){"use strict";a(5331),a(3565)},2388:function(e,t,a){"use strict";function i(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}}a.d(t,{G:function(){return i}})},2907:function(e,t,a){"use strict";a(5331),a(6808),a(6711)},3565:function(e,t,a){"use strict";a(5331)},4396:function(e,t,a){"use strict";a(5331),a(4885)},4813:function(e,t,a){a(4114),a(6573),a(8100),a(7936),a(8111),a(2489),a(7588),a(9577),a(1549),a(9797),a(9631),a(5623),a(9848),function(t){e.exports=t()}(function(){return function e(t,a,i){function n(r,o){if(!a[r]){if(!t[r]){var l=void 0;if(!o&&l)return require(r,!0);if(s)return s(r,!0);var c=new Error("Cannot find module '"+r+"'");throw c.code="MODULE_NOT_FOUND",c}var d=a[r]={exports:{}};t[r][0].call(d.exports,function(e){var a=t[r][1][e];return n(a||e)},d,d.exports,e,t,a,i)}return a[r].exports}for(var s=void 0,r=0;r
如果启用自定义链接格式,只保留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_32, [_createElementVNode(\"div\", _hoisted_33, [_cache[51] || (_cache[51] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"启用自定义\", -1)), _createVNode(_component_el_switch, {\n modelValue: $data.useCustomUrl,\n \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => $data.useCustomUrl = $event),\n \"active-value\": \"true\",\n \"inactive-value\": \"false\"\n }, null, 8, [\"modelValue\"])]), $data.useCustomUrl === 'true' ? (_openBlock(), _createElementBlock(\"div\", _hoisted_34, [_cache[52] || (_cache[52] = _createElementVNode(\"span\", {\n class: \"setting-label\"\n }, \"自定义前缀\", -1)), _createVNode(_component_el_input, {\n modelValue: $data.customUrlPrefix,\n \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => $data.customUrlPrefix = $event),\n placeholder: \"请输入自定义链接前缀\",\n class: \"setting-input\"\n }, null, 8, [\"modelValue\"])])) : _createCommentVNode(\"\", true)])]), _createElementVNode(\"div\", _hoisted_35, [_createVNode(_component_el_button, {\n type: \"primary\",\n onClick: _cache[16] || (_cache[16] = $event => $data.showUrlDialog = false),\n class: \"confirm-btn\"\n }, {\n default: _withCtx(() => [...(_cache[53] || (_cache[53] = [_createTextVNode(\"确定\", -1)]))]),\n _: 1\n })])]),\n _: 1\n }, 8, [\"modelValue\", \"width\"]), _createVNode(_component_TagManagementDialog, {\n modelValue: $data.showTagDialog,\n \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => $data.showTagDialog = $event),\n fileId: $data.currentTagFile,\n onTagsUpdated: $options.handleTagsUpdated\n }, null, 8, [\"modelValue\", \"fileId\", \"onTagsUpdated\"]), _createVNode(_component_BatchTagDialog, {\n modelValue: $data.showBatchTagDialog,\n \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => $data.showBatchTagDialog = $event),\n selectedFiles: $data.selectedFiles,\n onTagsUpdated: $options.handleBatchTagsUpdated\n }, null, 8, [\"modelValue\", \"selectedFiles\", \"onTagsUpdated\"]), _createVNode(_component_MobileActionSheet, {\n modelValue: $data.showMobileActionModal,\n \"onUpdate:modelValue\": _cache[20] || (_cache[20] = $event => $data.showMobileActionModal = $event),\n title: $data.mobileActionIsFolder ? $options.getFolderName($data.mobileActionFile?.name || '') : $data.mobileActionFile?.metadata?.FileName || $options.getFileName($data.mobileActionFile?.name || ''),\n isFolder: $data.mobileActionIsFolder,\n onAction: $options.handleMobileAction\n }, null, 8, [\"modelValue\", \"title\", \"isFolder\", \"onAction\"]), _createVNode(_component_MobileDirectoryDrawer, {\n modelValue: $data.showMobileDirectoryDrawer,\n \"onUpdate:modelValue\": _cache[21] || (_cache[21] = $event => $data.showMobileDirectoryDrawer = $event),\n currentPath: $data.currentPath,\n onNavigate: $options.navigateToFolder,\n onGoBack: $options.handleGoBack\n }, null, 8, [\"modelValue\", \"currentPath\", \"onNavigate\", \"onGoBack\"])]);\n}","// 文件管理器工具类\r\nimport fetchWithAuth from '@/utils/fetchWithAuth';\r\nimport { ElMessage } from 'element-plus';\r\n\r\nclass FileManager {\r\n constructor() {\r\n this.FILE_LIST_PATH = 'data/fileList.json';\r\n }\r\n\r\n // 从本地存储读取文件列表\r\n getLocalFileList() {\r\n try {\r\n const fileList = localStorage.getItem(this.FILE_LIST_PATH);\r\n return fileList ? JSON.parse(fileList) : { files: [], directories: [] };\r\n } catch (error) {\r\n console.error('Error reading local file list:', error);\r\n return { files: [], directories: [] };\r\n }\r\n }\r\n\r\n // 保存文件列表到本地存储\r\n saveFileList(fileList) {\r\n try {\r\n localStorage.setItem(this.FILE_LIST_PATH, JSON.stringify(fileList));\r\n return true;\r\n } catch (error) {\r\n console.error('Error saving file list:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 添加新文件到列表\r\n addFile(newFile) {\r\n try {\r\n const fileList = this.getLocalFileList();\r\n fileList.files.push(newFile);\r\n return this.saveFileList(fileList);\r\n } catch (error) {\r\n console.error('Error adding file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 添加新文件夹\r\n addFolder(folderName) {\r\n try {\r\n const fileList = this.getLocalFileList();\r\n if (!fileList.directories.includes(folderName)) {\r\n fileList.directories.push(folderName);\r\n return this.saveFileList(fileList);\r\n }\r\n return false; // 文件夹已存在\r\n } catch (error) {\r\n console.error('Error adding folder:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 移动文件或文件夹\r\n moveFile(oldPath, newPath, isFolder = false, currentPath = '') {\r\n try {\r\n let fileList = this.getLocalFileList();\r\n \r\n if (isFolder) {\r\n // 更新目录列表\r\n const oldFolderIndex = fileList.directories.indexOf(oldPath);\r\n if (oldFolderIndex !== -1) {\r\n fileList.directories.splice(oldFolderIndex, 1);\r\n }\r\n\r\n } else {\r\n // 移动单个文件\r\n const fileIndex = fileList.files.findIndex(file => file.name === oldPath);\r\n if (fileIndex !== -1) {\r\n // 从旧位置移除\r\n fileList.files.splice(fileIndex, 1);\r\n }\r\n\r\n }\r\n\r\n // 如果新路径包含当前目录的直接子目录,则添加直接子目录\r\n if (newPath.startsWith(currentPath)) {\r\n const pathArray = newPath.substring(currentPath.length).split('/');\r\n if (pathArray.length > 1) {\r\n const newFolder = currentPath + pathArray[0];\r\n if (!fileList.directories.includes(newFolder)) {\r\n fileList.directories.push(newFolder);\r\n }\r\n }\r\n }\r\n\r\n return this.saveFileList(fileList);\r\n } catch (error) {\r\n console.error('Error moving file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 从列表中删除文件\r\n removeFile(fileName) {\r\n try {\r\n let fileList = this.getLocalFileList();\r\n fileList.files = fileList.files.filter(file => file.name !== fileName);\r\n return this.saveFileList(fileList);\r\n } catch (error) {\r\n console.error('Error removing file:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 从列表中删除文件夹(同时删除该文件夹下的所有文件)\r\n removeFolder(folderName) {\r\n try {\r\n let fileList = this.getLocalFileList();\r\n fileList.files = fileList.files.filter(file => !file.name.startsWith(folderName + '/'));\r\n fileList.directories = fileList.directories.filter(dir => dir !== folderName);\r\n return this.saveFileList(fileList);\r\n } catch (error) {\r\n console.error('Error removing folder:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 获取指定目录下的文件和子目录\r\n getFilesInFolder(folderName) {\r\n try {\r\n const fileList = this.getLocalFileList();\r\n const files = fileList.files.filter(file => file.name.startsWith(folderName + '/'));\r\n const subdirectories = fileList.directories.filter(dir => dir.startsWith(folderName + '/'));\r\n return { files, directories: subdirectories };\r\n } catch (error) {\r\n console.error('Error getting files in folder:', error);\r\n return { files: [], directories: [] };\r\n }\r\n }\r\n\r\n // 构建筛选参数URL\r\n buildFilterParams(filters) {\r\n let params = '';\r\n // 访问状态筛选(综合判断)\r\n if (filters.accessStatus && filters.accessStatus.length > 0) {\r\n params += `&accessStatus=${encodeURIComponent(filters.accessStatus.join(','))}`;\r\n }\r\n // 黑白名单筛选(直接使用 ListType 字段)\r\n if (filters.listType && filters.listType.length > 0) {\r\n params += `&listType=${encodeURIComponent(filters.listType.join(','))}`;\r\n }\r\n if (filters.label && filters.label.length > 0) {\r\n params += `&label=${encodeURIComponent(filters.label.join(','))}`;\r\n }\r\n if (filters.fileType && filters.fileType.length > 0) {\r\n params += `&fileType=${encodeURIComponent(filters.fileType.join(','))}`;\r\n }\r\n if (filters.channel && filters.channel.length > 0) {\r\n params += `&channel=${encodeURIComponent(filters.channel.join(','))}`;\r\n }\r\n if (filters.channelName && filters.channelName.length > 0) {\r\n params += `&channelName=${encodeURIComponent(filters.channelName.join(','))}`;\r\n }\r\n return params;\r\n }\r\n\r\n // 更新文件列表\r\n async refreshFileList(dir, search = '', includeTags = '', excludeTags = '', filters = {}) {\r\n search = search.trim();\r\n try {\r\n let url = `/api/manage/list?count=60&dir=${dir}&search=${encodeURIComponent(search)}`;\r\n if (includeTags) {\r\n url += `&includeTags=${encodeURIComponent(includeTags)}`;\r\n }\r\n if (excludeTags) {\r\n url += `&excludeTags=${encodeURIComponent(excludeTags)}`;\r\n }\r\n // 添加筛选参数(支持多选)\r\n url += this.buildFilterParams(filters);\r\n \r\n const response = await fetchWithAuth(url, {\r\n method: 'GET',\r\n });\r\n const newFileList = await response.json();\r\n if (!newFileList.isIndexedResponse) {\r\n ElMessage.warning('索引构建中,当前搜索和排序结果可能不准确,请稍后再试。');\r\n }\r\n // 保存包含新字段的完整数据\r\n return this.saveFileList(newFileList);\r\n } catch (error) {\r\n console.error('Error refreshing file list:', error);\r\n return false;\r\n }\r\n }\r\n\r\n // 读取更多数据\r\n async loadMoreFiles(dir, search = '', includeTags = '', excludeTags = '', count = 60, filters = {}) {\r\n search = search.trim();\r\n try {\r\n const fileList = this.getLocalFileList();\r\n const start = fileList.files.length;\r\n\r\n let url = `/api/manage/list?dir=${dir}&start=${start}&count=${count}&search=${encodeURIComponent(search)}`;\r\n if (includeTags) {\r\n url += `&includeTags=${encodeURIComponent(includeTags)}`;\r\n }\r\n if (excludeTags) {\r\n url += `&excludeTags=${encodeURIComponent(excludeTags)}`;\r\n }\r\n // 添加筛选参数(支持多选)\r\n url += this.buildFilterParams(filters);\r\n\r\n const response = await fetchWithAuth(url, {\r\n method: 'GET',\r\n });\r\n \r\n const moreFiles = await response.json();\r\n fileList.files.push(...moreFiles.files);\r\n return this.saveFileList(fileList);\r\n } catch (error) {\r\n console.error('Error loading more files:', error);\r\n return { files: [], directories: [] };\r\n }\r\n }\r\n}\r\n\r\nexport const fileManager = new FileManager();\r\n","import \"core-js/modules/es.array.push.js\";\nimport \"core-js/modules/es.iterator.constructor.js\";\nimport \"core-js/modules/es.iterator.every.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.iterator.some.js\";\nimport \"core-js/modules/es.set.difference.v2.js\";\nimport \"core-js/modules/es.set.intersection.v2.js\";\nimport \"core-js/modules/es.set.is-disjoint-from.v2.js\";\nimport \"core-js/modules/es.set.is-subset-of.v2.js\";\nimport \"core-js/modules/es.set.is-superset-of.v2.js\";\nimport \"core-js/modules/es.set.symmetric-difference.v2.js\";\nimport \"core-js/modules/es.set.union.v2.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 { mapGetters } from 'vuex';\nimport JSZip from 'jszip';\nimport DashboardTabs from '@/components/DashboardTabs.vue';\nimport TagManagementDialog from '@/components/TagManagementDialog.vue';\nimport BatchTagDialog from '@/components/BatchTagDialog.vue';\nimport SkeletonLoader from '@/components/SkeletonLoader.vue';\nimport FileCard from '@/components/FileCard.vue';\nimport FolderCard from '@/components/FolderCard.vue';\nimport FileListItem from '@/components/FileListItem.vue';\nimport FileDetailDialog from '@/components/FileDetailDialog.vue';\nimport MobileActionSheet from '@/components/MobileActionSheet.vue';\nimport MobileDirectoryDrawer from '@/components/MobileDirectoryDrawer.vue';\nimport FilterDropdown from '@/components/FilterDropdown.vue';\nimport { fileManager } from '@/utils/fileManager';\nimport fetchWithAuth from '@/utils/fetchWithAuth';\nimport { validateFolderPath } from '@/utils/pathValidator';\nexport default {\n data() {\n return {\n Number: 0,\n directFileCount: 0,\n // 当前目录直接子文件数量\n directFolderCount: 0,\n // 当前目录直接子文件夹数量\n showLogoutButton: false,\n tableData: [],\n tempSearch: '',\n search: '',\n searchKeywords: '',\n // Keywords only (without tag filters) for backend search\n searchIncludeTags: '',\n // 包含的标签,逗号分隔\n searchExcludeTags: '',\n // 排除的标签,逗号分隔\n isSearchMode: false,\n currentPage: 1,\n pageSize: 15,\n selectedFiles: [],\n sortOption: 'dateDesc',\n isUploading: false,\n showdetailDialog: false,\n detailFile: null,\n activeUrlTab: 'originUrl',\n defaultUrlFormat: 'originUrl',\n showUrlDialog: false,\n useCustomUrl: 'false',\n // 是否启用自定义链接\n customUrlPrefix: '',\n // 自定义链接前缀\n loading: false,\n // 加载状态\n currentPath: '',\n // 当前文件夹路径\n refreshLoading: false,\n showTagDialog: false,\n // 标签管理对话框\n showBatchTagDialog: false,\n // 批量标签管理对话框\n currentTagFile: '',\n // 当前标签管理的文件\n viewMode: 'card',\n // 视图模式:card 或 list\n showMobileActionModal: false,\n // 移动端操作模态框\n mobileActionFile: null,\n // 当前移动端操作的文件\n mobileActionIndex: -1,\n // 当前移动端操作的文件索引\n mobileActionIsFolder: false,\n // 是否为文件夹操作\n longPressTimer: null,\n // 长按计时器\n showMobileDirectoryDrawer: false,\n // 移动端目录抽屉\n jumpPage: '',\n // 跳转页码输入\n // 筛选相关状态(数组形式支持多选)\n filters: {\n accessStatus: [],\n // 访问状态: 'normal'(正常), 'blocked'(已屏蔽)\n listType: [],\n // 黑白名单: 'White', 'Block', 'None'\n label: [],\n // 审查结果: 'normal', 'teen', 'adult'\n fileType: [],\n // 文件类型: 'image', 'video', 'audio', 'other'\n channel: [],\n // 渠道类型: 'TelegramNew', 'CloudflareR2', 'S3', 'Discord', 'HuggingFace', 'External'\n channelName: [] // 渠道名称: 动态获取\n },\n channelNameOptions: [] // 动态从文件列表中提取\n };\n },\n components: {\n DashboardTabs,\n TagManagementDialog,\n BatchTagDialog,\n SkeletonLoader,\n FileCard,\n FolderCard,\n FileListItem,\n FileDetailDialog,\n MobileActionSheet,\n MobileDirectoryDrawer,\n FilterDropdown\n },\n computed: {\n ...mapGetters(['adminUrlSettings', 'userConfig']),\n filteredTableData() {\n return this.tableData;\n },\n totalPages() {\n return Math.ceil(this.filteredTableData.length / this.pageSize) || 1;\n },\n // 基于当前文件夹直接子文件和子文件夹数量计算的真实总页数\n realTotalPages() {\n const total = this.directFolderCount + this.directFileCount;\n return Math.ceil(total / this.pageSize) || 1;\n },\n // 计算当前激活的筛选条件数量(数组形式)\n activeFilterCount() {\n return Object.values(this.filters).reduce((count, arr) => count + (Array.isArray(arr) ? arr.length : 0), 0);\n },\n // 判断是否处于搜索或筛选模式\n hasSearchOrFilter() {\n return this.isSearchMode || this.activeFilterCount > 0;\n },\n paginatedTableData() {\n const sortedData = this.sortData(this.filteredTableData);\n const start = (this.currentPage - 1) * this.pageSize;\n const end = start + this.pageSize;\n let data = sortedData.slice(start, end);\n // 增加previewSrcList属性,用于预览图片\n const fullList = data.filter(file => this.isImage(file)).map(file => this.getFileLink(file.name));\n data.forEach(file => {\n if (this.isImage(file)) {\n // 重新排序,索引大于等于当前索引的元素在前,否则在后\n file.previewSrcList = fullList.slice(fullList.indexOf(this.getFileLink(file.name))).concat(fullList.slice(0, fullList.indexOf(this.getFileLink(file.name))));\n }\n });\n // 增加channelTag属性,用于显示渠道信息\n data.forEach(file => {\n if (file.metadata?.Channel === 'TelegramNew') {\n file.channelTag = 'TG';\n } else if (file.metadata?.Channel === 'CloudflareR2') {\n file.channelTag = 'R2';\n } else if (file.metadata?.Channel === 'S3') {\n file.channelTag = 'S3';\n } else if (file.metadata?.Channel === 'Discord') {\n file.channelTag = 'DC';\n } else if (file.metadata?.Channel === 'HuggingFace') {\n file.channelTag = 'HF';\n } else if (file.metadata?.Channel === 'External') {\n file.channelTag = '外链';\n } else {\n file.channelTag = '未知';\n }\n });\n return data;\n },\n sortIcon() {\n return this.sortOption === 'dateDesc' ? 'sort-amount-down' : 'sort-alpha-up';\n },\n dialogWidth() {\n return window.innerWidth > 768 ? '50%' : '90%';\n },\n detailDialogWidth() {\n return window.innerWidth > 768 ? '70%' : '90%';\n },\n accessType() {\n if (this.detailFile?.metadata?.ListType === 'White') {\n return '正常';\n } else if (this.detailFile?.metadata?.ListType === 'Block' || this.detailFile?.metadata?.Label === 'adult') {\n return '受限';\n } else {\n return '正常';\n }\n },\n allUrl() {\n // 外链图片均采用外链\n if (this.detailFile?.metadata?.Channel === 'External') {\n return {\n 'originUrl': `${this.detailFile?.metadata?.ExternalLink}`,\n 'mdUrl': ``,\n 'htmlUrl': ``,\n 'bbUrl': `[img]${this.detailFile?.metadata?.ExternalLink}[/img]`,\n 'tgId': this.detailFile?.metadata?.TgFileId || '未知',\n 'S3Location': this.detailFile?.metadata?.S3Location || '未知',\n 'S3CdnFileUrl': this.detailFile?.metadata?.S3CdnFileUrl || '未知'\n };\n } else {\n return {\n 'originUrl': `${this.rootUrl}${this.detailFile?.name}`,\n 'mdUrl': ``,\n 'htmlUrl': `
`,\n 'bbUrl': `[img]${this.rootUrl}${this.detailFile?.name}[/img]`,\n 'tgId': this.detailFile?.metadata?.TgFileId || '未知',\n 'S3Location': this.detailFile?.metadata?.S3Location || '未知',\n 'S3CdnFileUrl': this.detailFile?.metadata?.S3CdnFileUrl || '未知'\n };\n }\n },\n tableColumnNum() {\n return window.innerWidth > 768 ? 3 : 1;\n },\n tablePreviewSpan() {\n return window.innerWidth > 768 ? 2 : 1;\n },\n disableTooltip() {\n return window.innerWidth < 768;\n },\n selectPage() {\n // 如果当前页所有文件都被选中,则返回 true,否则返回 false\n return this.paginatedTableData.every(file => file.selected);\n },\n selectedPageFiles() {\n // 如果当前页有文件被选中,则返回 true,否则返回 false\n return this.paginatedTableData.some(file => file.selected);\n },\n selectPageIcon() {\n // 全选为 true 时,返回 check-square;部分选中为 minus-square;全不选为 square\n return this.selectPage ? 'check-square' : this.selectedPageFiles ? 'minus-square' : 'square';\n },\n rootUrl() {\n // 链接前缀,优先级:用户自定义 > urlPrefix > 默认\n return this.useCustomUrl === 'true' ? this.customUrlPrefix : this.userConfig?.urlPrefix || `${document.location.origin}/file/`;\n },\n isSelectAll: {\n get() {\n return this.paginatedTableData.length > 0 && this.paginatedTableData.every(file => file.selected);\n },\n set(val) {\n this.paginatedTableData.forEach(file => file.selected = val);\n }\n },\n isIndeterminate() {\n const selectedCount = this.paginatedTableData.filter(file => file.selected).length;\n return selectedCount > 0 && selectedCount < this.paginatedTableData.length;\n },\n pagerCount() {\n return window.innerWidth < 768 ? 3 : 7;\n }\n },\n watch: {\n tableData: {\n handler(newData) {\n // selectedFiles 增加 newData中新选中,不包含在 selectedFiles 中的文件\n this.selectedFiles = this.selectedFiles.concat(newData.filter(file => file.selected && !this.selectedFiles.includes(file)));\n // selectedFiles 删掉 newData 中已取消选中的文件\n this.selectedFiles = this.selectedFiles.filter(file => file.selected);\n // selectedFiles 删掉 tableData 中已删除的文件\n this.selectedFiles = this.selectedFiles.filter(file => newData.includes(file));\n },\n deep: true\n },\n sortOption(newOption) {\n localStorage.setItem('sortOption', newOption);\n },\n defaultUrlFormat(newFormat) {\n localStorage.setItem('defaultUrlFormat', newFormat);\n },\n showdetailDialog(newVal) {\n if (newVal) {\n this.activeUrlTab = this.defaultUrlFormat || 'originUrl';\n }\n },\n customUrlPrefix(val) {\n this.$store.commit('setAdminUrlSettings', {\n key: 'customUrlPrefix',\n value: val\n });\n },\n useCustomUrl(val) {\n this.$store.commit('setAdminUrlSettings', {\n key: 'useCustomUrl',\n value: val\n });\n },\n currentPath(val) {\n // 页面切换时,取消选择的内容\n this.tableData.forEach(file => file.selected = false);\n }\n },\n methods: {\n // 切换视图模式\n toggleViewMode() {\n this.viewMode = this.viewMode === 'card' ? 'list' : 'card';\n localStorage.setItem('viewMode', this.viewMode);\n },\n // 列表视图全选当前页\n handleSelectAllPage(val) {\n this.paginatedTableData.forEach(file => file.selected = val);\n },\n // 移动端长按开始\n handleTouchStart(item, index) {\n this.longPressTimer = setTimeout(() => {\n this.mobileActionFile = item;\n this.mobileActionIndex = index;\n this.mobileActionIsFolder = false;\n this.showMobileActionModal = true;\n }, 500); // 500ms 长按触发\n },\n // 移动端长按结束/取消\n handleTouchEnd() {\n if (this.longPressTimer) {\n clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n },\n // 文件夹长按开始\n handleFolderTouchStart(item, index) {\n this.longPressTimer = setTimeout(() => {\n this.mobileActionFile = item;\n this.mobileActionIndex = index;\n this.mobileActionIsFolder = true;\n this.showMobileActionModal = true;\n }, 500);\n },\n // 处理移动端操作\n handleMobileAction(action) {\n const file = this.mobileActionFile;\n const index = this.mobileActionIndex;\n this.showMobileActionModal = false;\n if (!file) return;\n switch (action) {\n case 'detail':\n this.openDetailDialog(index, file.name);\n break;\n case 'copy':\n this.handleCopy(index, file.name);\n break;\n case 'folderCopy':\n this.handleFolderCopy(file.name);\n break;\n case 'download':\n this.handleDownload(file.name);\n break;\n case 'move':\n this.handleMove(index, file.name);\n break;\n case 'delete':\n this.handleDelete(index, file.name);\n break;\n case 'tag':\n this.handleTagManagement(file.name);\n break;\n }\n },\n // 返回上一级目录\n handleGoBack() {\n const pathParts = this.currentPath.split('/').filter(Boolean);\n if (pathParts.length > 0) {\n pathParts.pop();\n const parentPath = pathParts.join('/');\n this.navigateToFolder(parentPath);\n }\n this.showMobileDirectoryDrawer = false;\n },\n // 获取标签颜色\n getTagColor(index) {\n const colors = ['linear-gradient(135deg, #667eea 0%, #764ba2 100%)', 'linear-gradient(135deg, #f093fb 0%, #f5576c 100%)', 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)', 'linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)', 'linear-gradient(135deg, #fa709a 0%, #fee140 100%)', 'linear-gradient(135deg, #a8edea 0%, #fed6e3 100%)'];\n return colors[index % colors.length];\n },\n // 视频hover播放控制\n handleVideoHover(event, isEnter) {\n const video = event.target;\n if (isEnter) {\n video.play().catch(() => {});\n } else {\n video.pause();\n video.currentTime = 0;\n }\n },\n // 格式化文件大小\n formatFileSize(bytes) {\n if (!bytes || bytes === 0) return '-';\n bytes = Number(bytes);\n if (isNaN(bytes)) return '-';\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let i = 0;\n while (bytes >= 1024 && i < units.length - 1) {\n bytes /= 1024;\n i++;\n }\n return bytes.toFixed(i > 0 ? 1 : 0) + ' ' + units[i];\n },\n handleSearch() {\n this.search = this.tempSearch;\n this.isSearchMode = this.search.trim() !== '';\n this.currentPage = 1; // 重置到第一页\n\n // 解析搜索字符串,提取标签和关键字\n // 支持 #tag 表示包含标签,-#tag 表示排除标签\n if (this.search && this.search.trim()) {\n const includeTags = [];\n const excludeTags = [];\n\n // 匹配 -#tag 和 #tag\n let searchText = this.search;\n\n // 先匹配排除标签 -#tag\n const excludeTagRegex = /-#([\\w\\u4e00-\\u9fa5\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af\\.\\+\\-]+)/g;\n searchText = searchText.replace(excludeTagRegex, (match, tag) => {\n excludeTags.push(tag.toLowerCase());\n return ' ';\n });\n\n // 再匹配包含标签 #tag\n const includeTagRegex = /#([\\w\\u4e00-\\u9fa5\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af\\.\\+\\-]+)/g;\n searchText = searchText.replace(includeTagRegex, (match, tag) => {\n includeTags.push(tag.toLowerCase());\n return ' ';\n });\n\n // 清理剩余的关键字(去除多余空格)\n this.searchKeywords = searchText.replace(/\\s+/g, ' ').trim();\n\n // 构建标签查询字符串\n this.searchIncludeTags = includeTags.join(',');\n this.searchExcludeTags = excludeTags.join(',');\n console.log('Search keywords:', this.searchKeywords);\n console.log('Include tags:', this.searchIncludeTags);\n console.log('Exclude tags:', this.searchExcludeTags);\n } else {\n this.searchKeywords = '';\n this.searchIncludeTags = '';\n this.searchExcludeTags = '';\n }\n this.refreshFileList();\n },\n // 处理筛选变化(来自 FilterDropdown 组件)\n handleFilterChange({\n type,\n filters\n }) {\n this.filters = filters;\n this.currentPage = 1; // 重置到第一页\n this.refreshFileList();\n },\n // 清除所有筛选条件\n clearFilters() {\n this.filters = {\n listType: [],\n label: [],\n fileType: [],\n channel: [],\n channelName: []\n };\n this.currentPage = 1;\n this.refreshFileList();\n },\n // 从 API 获取所有渠道名称\n async extractChannelNames() {\n try {\n const response = await fetchWithAuth('/api/channels?includeDisabled=true', {\n method: 'GET'\n });\n if (response.ok) {\n const channels = await response.json();\n const channelOptions = [];\n\n // 类型映射(显示名称)\n const typeLabels = {\n TelegramNew: 'Telegram',\n CloudflareR2: 'Cloudflare R2',\n S3: 'S3',\n Discord: 'Discord',\n HuggingFace: 'HuggingFace'\n };\n\n // 按类型提取渠道名称\n Object.entries(channels).forEach(([type, channelList]) => {\n if (Array.isArray(channelList) && channelList.length > 0) {\n channelList.forEach(channel => {\n if (channel.name) {\n channelOptions.push({\n name: channel.name,\n type: channel.type,\n typeLabel: typeLabels[channel.type] || channel.type,\n // 使用 type:name 作为唯一标识\n value: `${channel.type}:${channel.name}`\n });\n }\n });\n }\n });\n\n // 按类型和名称排序\n channelOptions.sort((a, b) => {\n if (a.type !== b.type) {\n return a.type.localeCompare(b.type);\n }\n return a.name.localeCompare(b.name);\n });\n this.channelNameOptions = channelOptions;\n }\n } catch (error) {\n console.error('Failed to fetch channel names:', error);\n }\n },\n handleDownload(key) {\n const link = document.createElement('a');\n link.href = this.getFileLink(key);\n link.download = key;\n link.click();\n },\n openDetailDialog(index, key) {\n this.detailFile = this.paginatedTableData[index];\n this.showdetailDialog = true;\n },\n handleTabClick(tab) {\n this.activeUrlTab = tab.props.name;\n },\n handleUrlClick(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 handleDetailDelete(key) {\n this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/delete/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n } else {\n return Promise.reject('请求失败');\n }\n }).then(() => {\n this.updateStats(-1, false);\n this.$message.success('删除成功');\n this.showdetailDialog = false;\n }).catch(() => this.$message.error('删除失败'));\n }).catch(() => console.log('已取消删除'));\n },\n handleBlock(key) {\n this.$confirm('此操作将把该文件加入黑名单, 是否继续?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/block/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'Block';\n }\n } else {\n return Promise.reject('请求失败');\n }\n }).then(() => {\n this.$message.success('加入黑名单成功');\n }).catch(() => this.$message.error('加入黑名单失败'));\n }).catch(() => console.log('已取消加入黑名单'));\n },\n handleWhite(key) {\n this.$confirm('此操作将把该文件加入白名单, 是否继续?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/white/${key}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'White';\n }\n } else {\n return Promise.reject('请求失败');\n }\n }).then(() => {\n this.$message.success('加入白名单成功');\n }).catch(() => this.$message.error('加入白名单失败'));\n }).catch(() => console.log('已取消加入白名单'));\n },\n handleDelete(index, key) {\n // 判断是否为文件夹\n const isFolder = this.tableData.find(file => file.name === key).isFolder;\n this.$confirm(`此操作将永久删除${isFolder ? '文件夹' : '该文件'}, 是否继续?`, '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n }).then(() => {\n fetchWithAuth(`/api/manage/delete/${key}?folder=${isFolder}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n } else {\n return Promise.reject('请求失败');\n }\n }).then(() => {\n this.updateStats(-1, false);\n fileManager.removeFile(key);\n this.$message.success('删除成功');\n }).catch(() => this.$message.error('删除失败'));\n }).catch(() => console.log('已取消删除'));\n },\n handleBatchDelete() {\n this.$confirm('此操作将永久删除选中的文件及文件夹, 是否继续?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n }).then(() => {\n const promises = this.selectedFiles.map(file => {\n const isFolder = file.isFolder;\n return fetchWithAuth(`/api/manage/delete/${file.name}?folder=${isFolder}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n let successNum = 0;\n results.forEach((response, index) => {\n if (response.ok) {\n successNum++;\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData.splice(fileIndex, 1);\n }\n fileManager.removeFile(this.selectedFiles[index].name);\n }\n });\n this.selectedFiles = [];\n this.updateStats(-successNum, false);\n this.$message.success('批量删除成功');\n }).catch(() => this.$message.error('批量删除失败'));\n }).catch(() => console.log('已取消批量删除'));\n },\n async handleBatchCopy() {\n // 分离文件和文件夹\n const files = this.selectedFiles.filter(item => !item.isFolder);\n const folders = this.selectedFiles.filter(item => item.isFolder);\n\n // 如果有文件夹,显示加载状态\n let loading = null;\n if (folders.length > 0) {\n loading = this.$loading({\n lock: true,\n text: '正在获取文件列表...'\n });\n }\n try {\n // 收集所有文件(包括文件夹内的文件)\n let allFiles = [...files];\n\n // 递归获取所有文件夹内的文件\n for (const folder of folders) {\n try {\n const response = await fetchWithAuth(`/api/manage/list?dir=${encodeURIComponent(folder.name)}&recursive=true&count=-1`, {\n method: 'GET'\n });\n const data = await response.json();\n if (data.files && data.files.length > 0) {\n allFiles = allFiles.concat(data.files);\n }\n } catch (error) {\n console.error(`获取文件夹 ${folder.name} 内容失败:`, error);\n }\n }\n if (loading) loading.close();\n if (allFiles.length === 0) {\n this.$message.warning('没有可复制的链接');\n return;\n }\n\n // 生成所有链接\n const links = allFiles.map(file => {\n return this.generateFileLink(file.name, file.metadata);\n }).filter(link => link); // 过滤掉空链接\n\n if (links.length === 0) {\n this.$message.warning('没有可复制的链接');\n return;\n }\n\n // 复制到剪贴板\n const text = links.join('\\n');\n if (navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n this.$message.success(`批量复制 ${links.length} 个链接成功`);\n } else {\n this.copyToClipboardFallback(text);\n }\n } catch (error) {\n if (loading) loading.close();\n console.error('批量复制链接失败:', error);\n this.$message.error('批量复制链接失败,请重试');\n }\n },\n copyToClipboardFallback(text) {\n const textarea = document.createElement('textarea');\n document.body.appendChild(textarea);\n textarea.style.position = 'fixed';\n textarea.style.clip = 'rect(0 0 0 0)';\n textarea.style.top = '10px';\n textarea.value = text;\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n this.$message.success('批量复制链接成功');\n },\n handleCopy(index, key) {\n let text = '';\n if (this.paginatedTableData[index].metadata?.Channel === 'External') {\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n text = this.paginatedTableData[index].metadata?.ExternalLink;\n break;\n case 'mdUrl':\n text = `![${this.paginatedTableData[index].metadata?.FileName || key}](${this.paginatedTableData[index].metadata?.ExternalLink})`;\n break;\n case 'htmlUrl':\n text = `
`;\n break;\n case 'bbUrl':\n text = `[img]${this.paginatedTableData[index].metadata?.ExternalLink}[/img]`;\n break;\n case 'tgId':\n text = this.paginatedTableData[index].metadata?.TgFileId || 'none';\n break;\n case 's3Location':\n text = this.paginatedTableData[index].metadata?.S3Location || 'none';\n break;\n }\n } else {\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n text = `${this.rootUrl}${key}`;\n break;\n case 'mdUrl':\n text = `![${this.paginatedTableData[index].metadata?.FileName || key}](${this.rootUrl}${key})`;\n break;\n case 'htmlUrl':\n text = `
`;\n break;\n case 'bbUrl':\n text = `[img]${this.rootUrl}${key}[/img]`;\n break;\n case 'tgId':\n text = this.paginatedTableData[index].metadata?.TgFileId || 'none';\n break;\n case 's3Location':\n text = this.paginatedTableData[index].metadata?.S3Location || 'none';\n break;\n }\n }\n navigator.clipboard ? navigator.clipboard.writeText(text).then(() => this.$message.success('复制文件链接成功')) : this.copyToClipboardFallback(text);\n },\n async loadMoreData() {\n this.loading = true;\n try {\n // 传递标签参数和筛选参数到后端\n await fileManager.loadMoreFiles(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, 60, this.filters);\n // 获取新的文件列表后\n await this.fetchFileList();\n } catch (error) {\n this.$message.error('加载更多文件失败,请检查网络连接');\n } finally {\n this.loading = false;\n }\n },\n updateStats(num, init = false) {\n if (init) {\n this.Number = num;\n } else {\n this.Number += num;\n }\n },\n sort(command) {\n this.sortOption = command;\n },\n sortData(data) {\n // 文件夹始终在前\n const folders = data.filter(file => file.isFolder);\n const files = data.filter(file => !file.isFolder);\n if (this.sortOption === 'dateDesc') {\n // 按时间降序\n folders.sort((a, b) => new Date(b.metadata?.TimeStamp) - new Date(a.metadata?.TimeStamp));\n files.sort((a, b) => new Date(b.metadata?.TimeStamp) - new Date(a.metadata?.TimeStamp));\n } else {\n // 按文件名升序\n folders.sort((a, b) => a.name.localeCompare(b.name));\n files.sort((a, b) => a.name.localeCompare(b.name));\n }\n return folders.concat(files);\n },\n handleVideoClick(event) {\n const videoElement = event.target;\n if (videoElement.requestFullscreen) {\n videoElement.requestFullscreen();\n } else if (videoElement.webkitRequestFullscreen) {\n // Safari/Old Chrome\n videoElement.webkitRequestFullscreen();\n } else if (videoElement.mozRequestFullScreen) {\n // Firefox\n videoElement.mozRequestFullScreen();\n } else if (videoElement.msRequestFullscreen) {\n // IE/Edge\n videoElement.msRequestFullscreen();\n }\n },\n handleLogout() {\n this.$store.commit('setCredentials', null);\n this.$router.push('/adminLogin');\n },\n handleSelectPage() {\n if (this.selectPage) {\n this.paginatedTableData.forEach(file => file.selected = false);\n } else {\n this.paginatedTableData.forEach(file => file.selected = true);\n }\n },\n handleBatchAction(command) {\n if (command === 'copy') {\n this.handleBatchCopy();\n } else if (command === 'delete') {\n this.handleBatchDelete();\n } else if (command === 'download') {\n this.handleBatchDownload();\n } else if (command === 'move') {\n this.handleBatchMove();\n } else if (command === 'tagManagement') {\n this.handleBatchTagManagement();\n } else if (command === 'ban') {\n this.handleBatchBlock();\n } else if (command === 'white') {\n this.handleBatchWhite();\n }\n },\n handleMove(index, key) {\n // 弹窗输入新的文件夹路径\n this.$prompt('请输入新的目录', '移动文件', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n inputValue: '/',\n beforeClose: (action, instance, done) => {\n if (action === 'confirm') {\n const value = instance.inputValue;\n // 使用共享验证器验证路径\n const validation = validateFolderPath(value);\n if (!validation.valid) {\n this.$message.error(validation.error);\n return; // 验证失败,不关闭弹窗\n }\n done(); // 验证通过,关闭弹窗\n } else {\n done(); // 取消操作,直接关闭\n }\n }\n }).then(({\n value\n }) => {\n // 去掉开头的 /,结尾若没有 /,则加上\n const newPath = value.replace(/^\\/+/, '') + (value.endsWith('/') ? '' : value === '' ? '' : '/');\n const isFolder = this.tableData.find(file => file.name === key).isFolder;\n // 判断目标文件夹是否是当前文件夹\n if (newPath === this.currentPath) {\n this.$message.warning('目标文件夹不能是当前文件夹');\n return;\n }\n fetchWithAuth(`/api/manage/move/${key}?folder=${isFolder}&dist=${newPath}`, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === key);\n if (fileIndex !== -1) {\n // 更新本地文件管理器\n const newKey = newPath + key.split('/').pop();\n fileManager.moveFile(key, newKey, isFolder, this.currentPath);\n // 移除文件\n this.tableData.splice(fileIndex, 1);\n // 强制重新渲染内容\n this.$nextTick(() => {\n // 创建临时数组\n const tempData = [...this.tableData];\n // 清空数组\n this.tableData = [];\n // 在下一个tick中恢复数据\n this.$nextTick(() => {\n this.tableData = tempData;\n });\n });\n }\n this.updateStats(-1, false);\n this.$message.success('移动成功');\n } else {\n return Promise.reject('请求失败');\n }\n }).then(() => {\n // 刷新本地文件列表\n this.refreshLocalFileList();\n }).catch(() => this.$message.error('移动失败'));\n }).catch(() => console.log('已取消移动文件'));\n },\n handleBatchMove() {\n // 弹窗输入新的文件夹路径\n this.$prompt('请输入新的目录', '移动文件', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n inputValue: '/',\n beforeClose: (action, instance, done) => {\n if (action === 'confirm') {\n const value = instance.inputValue;\n // 使用共享验证器验证路径\n const validation = validateFolderPath(value);\n if (!validation.valid) {\n this.$message.error(validation.error);\n return; // 验证失败,不关闭弹窗\n }\n done(); // 验证通过,关闭弹窗\n } else {\n done(); // 取消操作,直接关闭\n }\n }\n }).then(({\n value\n }) => {\n // 去掉开头的 /,结尾若没有 /,则加上\n const newPath = value.replace(/^\\/+/, '') + (value.endsWith('/') ? '' : value === '' ? '' : '/');\n // 判断目标文件夹是否是当前文件夹\n if (newPath === this.currentPath) {\n this.$message.warning('目标文件夹不能是当前文件夹');\n return;\n }\n const promises = this.selectedFiles.map(file => {\n const isFolder = file.isFolder;\n return fetchWithAuth(`/api/manage/move/${file.name}?folder=${isFolder}&dist=${newPath}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n let successNum = 0;\n results.forEach((response, index) => {\n if (response.ok) {\n successNum++;\n const file = this.selectedFiles[index];\n file.selected = false;\n const fileIndex = this.tableData.findIndex(f => f.name === file.name);\n if (fileIndex !== -1) {\n // 更新本地文件管理器\n const newKey = newPath + file.name.split('/').pop();\n fileManager.moveFile(file.name, newKey, file.isFolder, this.currentPath);\n // 移除文件\n this.tableData.splice(fileIndex, 1);\n }\n }\n });\n // 强制重新渲染内容\n this.$nextTick(() => {\n // 创建临时数组\n const tempData = [...this.tableData];\n // 清空数组\n this.tableData = [];\n // 在下一个tick中恢复数据\n this.$nextTick(() => {\n this.tableData = tempData;\n });\n });\n this.updateStats(-successNum, false);\n this.$message.success('移动成功');\n }).then(() => {\n // 刷新本地文件列表\n this.refreshLocalFileList();\n }).catch(() => this.$message.error('移动失败'));\n }).catch(() => console.log('已取消移动文件'));\n },\n handleBatchBlock() {\n this.$confirm('此操作将把选中的文件加入黑名单, 是否继续?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n }).then(() => {\n // 跳过文件夹\n const promises = this.selectedFiles.map(file => {\n if (file.isFolder) {\n return Promise.resolve({\n ok: false\n });\n }\n return fetchWithAuth(`/api/manage/block/${file.name}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n results.forEach((response, index) => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'Block';\n }\n }\n });\n this.$message.success('批量加入黑名单成功');\n }).catch(() => this.$message.error('批量加入黑名单失败'));\n }).catch(() => console.log('已取消批量加入黑名单'));\n },\n handleBatchWhite() {\n this.$confirm('此操作将把选中的文件加入白名单, 是否继续?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n }).then(() => {\n // 跳过文件夹\n const promises = this.selectedFiles.map(file => {\n if (file.isFolder) {\n return Promise.resolve({\n ok: false\n });\n }\n return fetchWithAuth(`/api/manage/white/${file.name}`, {\n method: 'GET'\n });\n });\n Promise.all(promises).then(results => {\n results.forEach((response, index) => {\n if (response.ok) {\n const fileIndex = this.tableData.findIndex(file => file.name === this.selectedFiles[index].name);\n if (fileIndex !== -1) {\n this.tableData[fileIndex].metadata.ListType = 'White';\n }\n }\n });\n this.$message.success('批量加入白名单成功');\n }).catch(() => this.$message.error('批量加入白名单失败'));\n }).catch(() => console.log('已取消批量加入白名单'));\n },\n handleBatchDownload() {\n // 将选中文件打包成 zip 文件下载\n const zip = new JSZip();\n const folder = zip.folder('files');\n // 构造Promise数组,等待所有文件下载完成后再打包\n const fileNameCount = {}; // 用于跟踪文件名出现的次数\n\n const downloadPromises = this.selectedFiles.map(async file => {\n // 跳过文件夹\n if (file.isFolder) {\n return;\n }\n const response = await fetch(this.getFileLink(file.name));\n const blob = await response.blob();\n // 检查文件名是否已经存在\n let fileName = file.metadata?.FileName || file.name;\n if (fileNameCount[fileName]) {\n // 如果已经存在,则在文件名后加上编号\n const extension = fileName.substring(fileName.lastIndexOf('.'));\n const baseName = fileName.substring(0, fileName.lastIndexOf('.'));\n fileName = `${baseName}(${fileNameCount[fileName]})${extension}`;\n fileNameCount[file.name]++;\n } else {\n // 如果不存在,则初始化为1\n fileNameCount[fileName] = 1;\n }\n // 将文件添加到 zip 文件夹中\n folder.file(fileName, blob);\n });\n Promise.all(downloadPromises).then(() => zip.generateAsync({\n type: 'blob'\n })).then(blob => {\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = 'files.zip';\n link.click();\n });\n },\n isVideo(file) {\n // 排除音频文件\n if (this.isAudio(file)) return false;\n let flag = file.metadata?.FileType?.includes('video');\n // 用文件名后缀判断是否为视频文件\n if (!flag) {\n const videoExtensions = ['mp4', 'webm', 'ogg', 'avi', 'mov', 'flv', 'wmv', 'mkv', 'rmvb', '3gp', 'mpg', 'mpeg', 'm4v', 'f4v', 'rm', 'asf', 'dat', 'ts', 'vob', 'swf', 'divx', 'xvid', 'm2ts', 'mts', 'm2v', '3g2', '3gp2', '3gpp', '3gpp2', 'mpe', 'm1v', 'mpv', 'mpv2', 'mp2v', 'm2t', 'm2ts', 'm2v', 'm4v'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = videoExtensions.includes(extension);\n }\n return flag;\n },\n isAudio(file) {\n let flag = file.metadata?.FileType?.includes('audio');\n // 用文件名后缀判断是否为音频文件\n if (!flag) {\n const audioExtensions = ['mp3', 'wav', 'flac', 'aac', 'ogg', 'wma', 'm4a', 'ape', 'aiff', 'alac', 'opus', 'mid', 'midi', 'm4b', 'm4p', 'm4r', 'amr', 'au', 'ra', 'ram'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = audioExtensions.includes(extension);\n }\n return flag;\n },\n isImage(file) {\n let flag = file.metadata?.FileType?.includes('image');\n // 用文件名后缀判断是否为图片文件\n if (!flag) {\n const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'ico', 'tiff', 'tif', 'psd', 'ai', 'eps', 'raw', 'cr2', 'nef', 'orf', 'sr2', 'dng', 'arw', 'rw2', 'raf', 'pef', 'x3f', 'srf', 'erf', 'mrw', 'nrw', 'kdc', 'dcr', 'mef', 'mos', 'crw', 'raf', 'rwl', 'srw', '3fr', 'fff', 'iiq', 'qtk', 'bay', 'k25', 'kdc', 'dcs', 'drf', 'dng', 'erf', 'kdc', 'mdc', 'mef', 'mos', 'mrw', 'nef', 'nrw', 'orf', 'pef', 'ptx', 'pxn', 'r3d', 'raf', 'raw', 'rwl', 'rw2', 'rwz', 'sr2', 'srf', 'x3f'];\n const extension = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase();\n flag = imageExtensions.includes(extension);\n }\n return flag;\n },\n getFileLink(filename) {\n const fileLink = process.env.NODE_ENV === 'production' ? `/file/${filename}?from=admin` : `/api/file/${filename}?from=admin`;\n return fileLink;\n },\n handlePageChange(page) {\n this.currentPage = page;\n // 到最后一页时,加载更多数据\n if (this.currentPage === Math.ceil(this.tableData.length / this.pageSize)) {\n this.loadMoreData();\n }\n },\n // 跳转到指定页码\n handleJumpPage() {\n const page = parseInt(this.jumpPage);\n if (isNaN(page) || page < 1) {\n this.$message.warning('请输入有效的页码');\n return;\n }\n if (page > this.realTotalPages) {\n this.$message.warning(`页码不能超过 ${this.realTotalPages}`);\n return;\n }\n // 如果目标页超过当前已加载的页数,需要先加载更多数据\n if (page > this.totalPages) {\n this.$message.info('正在加载数据,请稍候...');\n this.loadMoreDataUntilPage(page);\n } else {\n this.currentPage = page;\n }\n this.jumpPage = '';\n },\n // 加载数据直到指定页\n async loadMoreDataUntilPage(targetPage) {\n this.loading = true;\n try {\n // 计算目标页需要的文件数量(不包含文件夹)\n // 目标页最后一个项目的索引 = targetPage * pageSize\n // 需要的文件数 = 目标索引 - 已有文件夹数量\n const targetIndex = targetPage * this.pageSize;\n const currentFolderCount = this.filteredTableData.filter(item => item.isFolder).length;\n const currentFileCount = this.filteredTableData.filter(item => !item.isFolder).length;\n\n // 需要加载的文件数量 = 目标位置需要的文件数 - 当前已加载的文件数\n const neededFileCount = Math.max(0, targetIndex - currentFolderCount - currentFileCount);\n if (neededFileCount > 0) {\n await fileManager.loadMoreFiles(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, neededFileCount, this.filters);\n await this.fetchFileList();\n }\n this.currentPage = Math.min(targetPage, this.totalPages);\n } catch (error) {\n this.$message.error('加载数据失败,请检查网络连接');\n } finally {\n this.loading = false;\n }\n },\n // 判断是否为文件夹\n isFolder(item) {\n // 如果是已经标记为文件夹的项目,直接返回true\n if (item.isFolder) {\n return true;\n }\n\n // 获取真实的文件路径(去除URL前缀)\n let path = item.name;\n if (path.startsWith('http')) {\n path = path.split('/file/')[1];\n }\n\n // 如果文件名包含'/',需要判断是否是当前路径下的文件\n if (path && path.includes('/')) {\n // 获取相对于当前路径的部分\n const relativePath = this.currentPath ? path.substring(this.currentPath.length) : path;\n\n // 如果在根目录,第一个斜杠前的部分就是文件夹\n if (this.currentPath === '') {\n return !path.split('/')[0].includes('.');\n }\n\n // 如果在子文件夹中,检查相对路径是否还包含其他文件夹\n return relativePath.includes('/');\n }\n return false;\n },\n // 获取文件夹名称\n getFolderName(path) {\n let folderName = '';\n // 如果是文件夹路径,只返回最后一级文件夹名\n if (path && path.includes('/')) {\n const parts = path.split('/');\n // 如果是根目录下的文件夹\n if (this.currentPath === '') {\n folderName = parts[0];\n } else {\n // 如果是子文件夹\n const relativePath = path.substring(this.currentPath.length);\n folderName = relativePath.split('/')[0];\n }\n } else {\n folderName = path;\n }\n const maxLength = 20; // Adjust max length as needed\n if (folderName.length > maxLength) {\n const startLength = Math.floor((maxLength - 3) / 2);\n const endLength = Math.ceil((maxLength - 3) / 2);\n return `${folderName.substring(0, startLength)}...${folderName.substring(folderName.length - endLength)}`;\n }\n return folderName;\n },\n // 获取文件名称(去除路径和URL前缀)\n getFileName(path) {\n let fileName = path.split('/').pop();\n const maxLength = 20; // Adjust max length as needed, ensure it fits in one line\n if (fileName.length > maxLength) {\n const startLength = Math.floor((maxLength - 3) / 2);\n const endLength = Math.ceil((maxLength - 3) / 2);\n return `${fileName.substring(0, startLength)}...${fileName.substring(fileName.length - endLength)}`;\n }\n return fileName;\n },\n // 获取文件名前半部分(用于中间省略效果)\n getFileNameStart(name) {\n if (!name) return '';\n // 如果文件名较短,返回全部\n if (name.length <= 30) return name;\n // 保留开头部分(约60%的长度用于显示前半部分)\n const dotIndex = name.lastIndexOf('.');\n if (dotIndex > 0) {\n // 有扩展名的情况:返回文件名主体部分\n const baseName = name.substring(0, dotIndex);\n const keepLength = Math.min(baseName.length, Math.floor(name.length * 0.6));\n return baseName.substring(0, keepLength);\n }\n // 无扩展名的情况\n return name.substring(0, Math.floor(name.length * 0.6));\n },\n // 获取文件名后半部分(用于中间省略效果)\n getFileNameEnd(name) {\n if (!name) return '';\n // 如果文件名较短,返回空\n if (name.length <= 30) return '';\n // 保留末尾部分(包含扩展名)\n const dotIndex = name.lastIndexOf('.');\n if (dotIndex > 0) {\n // 有扩展名的情况:返回最后几个字符 + 扩展名\n const ext = name.substring(dotIndex);\n const baseName = name.substring(0, dotIndex);\n const keepLength = Math.min(8, Math.floor(baseName.length * 0.2));\n return '…' + baseName.substring(baseName.length - keepLength) + ext;\n }\n // 无扩展名的情况\n const keepLength = Math.min(10, Math.floor(name.length * 0.3));\n return '…' + name.substring(name.length - keepLength);\n },\n // 进入文件夹\n enterFolder(folderPath) {\n // 确保路径末尾有 '/'\n this.currentPath = folderPath + (folderPath.endsWith('/') ? '' : '/');\n // 刷新文件列表,到指定currentPath下\n this.refreshFileList();\n },\n // 导航到指定文件夹\n navigateToFolder(path) {\n // 确保空路径时不添加 '/'\n this.currentPath = path ? path + (path.endsWith('/') ? '' : '/') : '';\n // 刷新文件列表,到指定currentPath下\n this.refreshFileList();\n },\n // 获取文件列表\n async fetchFileList() {\n this.loading = true;\n try {\n // 从本地存储获取数据\n const data = fileManager.getLocalFileList();\n\n // 解析返回的数据\n const folders = new Set(data.directories || []);\n const files = data.files || [];\n\n // 处理文件夹数据\n const folderItems = Array.from(folders).map(folder => ({\n name: folder,\n isFolder: true,\n selected: false,\n metadata: {\n FileName: folder.split('/').pop()\n }\n }));\n\n // 处理文件数据\n const fileItems = files.map(file => ({\n name: file.name,\n isFolder: false,\n selected: false,\n metadata: file.metadata\n }));\n\n // 更新表格数据\n this.tableData = [...folderItems, ...fileItems];\n\n // 更新统计信息\n this.updateStats(data.totalCount, true);\n\n // 更新直接文件和文件夹数量\n this.directFileCount = data.directFileCount || 0;\n this.directFolderCount = data.directFolderCount || 0;\n } catch (error) {\n console.error('Error fetching file list:', error);\n this.$message.error('获取文件列表失败');\n } finally {\n this.loading = false;\n }\n },\n // 刷新文件列表\n async refreshFileList() {\n this.refreshLoading = true;\n this.loading = true;\n try {\n // 传递标签参数和筛选参数到后端\n const success = await fileManager.refreshFileList(this.currentPath, this.searchKeywords, this.searchIncludeTags, this.searchExcludeTags, this.filters);\n if (success) {\n await this.fetchFileList();\n } else {\n throw new Error('Refresh failed');\n }\n } catch (error) {\n console.error('Error refreshing file list:', error);\n this.$message.error('刷新失败,请重试');\n } finally {\n this.refreshLoading = false;\n this.loading = false;\n }\n },\n // 刷新本地文件列表\n async refreshLocalFileList() {\n this.refreshLoading = true;\n this.loading = true;\n try {\n await this.fetchFileList();\n } catch (error) {\n console.error('Error refreshing local file list:', error);\n this.$message.error('刷新失败,请重试');\n } finally {\n this.refreshLoading = false;\n this.loading = false;\n }\n },\n // Tag management methods\n handleTagManagement(fileId) {\n this.currentTagFile = fileId;\n this.showTagDialog = true;\n },\n handleBatchTagManagement() {\n if (this.selectedFiles.length === 0) {\n this.$message.warning('请先选择文件');\n return;\n }\n this.showBatchTagDialog = true;\n },\n async handleTagsUpdated(tags) {\n // 更新本地文件数据中的标签\n const fileIndex = this.tableData.findIndex(file => file.name === this.currentTagFile);\n if (fileIndex !== -1) {\n // 更新 tableData 中的标签\n if (!this.tableData[fileIndex].metadata) {\n this.tableData[fileIndex].metadata = {};\n }\n this.tableData[fileIndex].metadata.Tags = tags;\n\n // 如果详情对话框正在显示这个文件,也更新详情数据\n if (this.showdetailDialog && this.detailFile?.name === this.currentTagFile) {\n if (!this.detailFile.metadata) {\n this.detailFile.metadata = {};\n }\n this.detailFile.metadata.Tags = tags;\n }\n }\n },\n async handleBatchTagsUpdated() {\n // 刷新文件列表以显示更新后的标签\n await this.refreshLocalFileList();\n },\n // 生成单个文件链接\n generateFileLink(key, metadata) {\n const isExternal = metadata?.Channel === 'External';\n const baseUrl = isExternal ? metadata?.ExternalLink : `${this.rootUrl}${key}`;\n const fileName = metadata?.FileName || key;\n switch (this.defaultUrlFormat) {\n case 'originUrl':\n return baseUrl;\n case 'mdUrl':\n return ``;\n case 'htmlUrl':\n return `
`;\n case 'bbUrl':\n return `[img]${baseUrl}[/img]`;\n case 'tgId':\n return metadata?.TgFileId || '';\n case 's3Location':\n return metadata?.S3Location || '';\n default:\n return baseUrl;\n }\n },\n // 复制文件夹中所有文件的链接\n async handleFolderCopy(folderName) {\n // 显示加载状态\n const loading = this.$loading({\n lock: true,\n text: '正在获取文件列表...'\n });\n try {\n // 调用 list API 递归获取文件夹内所有文件\n const response = await fetchWithAuth(`/api/manage/list?dir=${encodeURIComponent(folderName)}&recursive=true&count=-1`, {\n method: 'GET'\n });\n const data = await response.json();\n loading.close();\n if (!data.files || data.files.length === 0) {\n this.$message.warning('文件夹为空,没有可复制的链接');\n return;\n }\n\n // 根据当前链接格式生成所有文件链接\n const links = data.files.map(file => {\n return this.generateFileLink(file.name, file.metadata);\n }).filter(link => link); // 过滤掉空链接\n\n if (links.length === 0) {\n this.$message.warning('没有可复制的链接');\n return;\n }\n\n // 复制到剪贴板\n const text = links.join('\\n');\n if (navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n this.$message.success(`已复制 ${links.length} 个文件链接`);\n } else {\n this.copyToClipboardFallback(text);\n this.$message.success(`已复制 ${links.length} 个文件链接`);\n }\n } catch (error) {\n loading.close();\n console.error('复制文件夹链接失败:', error);\n this.$message.error('复制文件夹链接失败,请重试');\n }\n }\n },\n mounted() {\n this.loading = true;\n fetchWithAuth(\"/api/manage/check\", {\n method: 'GET'\n }).then(response => response.text()).then(result => {\n if (result == \"true\") {\n this.showLogoutButton = true;\n return true;\n } else if (result == \"Not using basic auth.\") {\n return true;\n } else {\n throw new Error('Unauthorized');\n }\n }).then(() => {\n // 首次加载时刷新文件列表\n return this.refreshFileList();\n }).then(() => {\n // 获取所有渠道名称\n return this.extractChannelNames();\n }).catch(err => {\n if (err.message !== 'Unauthorized') {\n this.$message.error('同步数据时出错,请检查网络连接');\n }\n }).finally(() => {\n this.loading = false;\n });\n\n // 读取自定义链接设置项\n this.customUrlPrefix = this.adminUrlSettings.customUrlPrefix;\n this.useCustomUrl = this.adminUrlSettings.useCustomUrl;\n }\n};","/* unplugin-vue-components disabled */import { render } from \"./AdminDashBoard.vue?vue&type=template&id=5c4ee283&scoped=true\"\nimport script from \"./AdminDashBoard.vue?vue&type=script&lang=js\"\nexport * from \"./AdminDashBoard.vue?vue&type=script&lang=js\"\n\nimport \"./AdminDashBoard.vue?vue&type=style&index=0&id=5c4ee283&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-5c4ee283\"]])\n\nexport default __exports__","/**\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","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n
>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4