slider-captcha-sdk 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/slider-captcha.js","../src/password-validator.js","../src/index.js"],"sourcesContent":["/**\n * 纯JavaScript弹窗滑块验证码组件\n */\nclass PopupSliderCaptcha {\n static DEFAULTS = {\n width: 320,\n height: 155,\n sliderSize: 38,\n maxRetries: 3,\n timeout: 30000,\n apiUrl: \"/api/captcha\",\n verifyUrl: \"/api/captcha/verify\",\n throttleDelay: 16,\n clickMaskClose: false\n }\n\n static CSS_CLASSES = {\n overlay: \"slider-captcha-overlay\",\n modal: \"slider-captcha-modal\",\n header: \"slider-captcha-header\",\n container: \"slider-captcha-container\",\n track: \"slider-captcha-track\",\n btn: \"slider-captcha-btn\",\n hint: \"slider-captcha-hint\",\n loading: \"slider-captcha-loading\",\n error: \"slider-captcha-error\"\n }\n\n // 优化:提取CSS样式为独立方法,减少主体代码长度\n static getStyles() {\n return `:root{--sc-primary:#409eff;--sc-success:#67c23a;--sc-danger:#f56c6c;--sc-border:#e4e7eb;--sc-bg:linear-gradient(90deg, #f7f9fa 0%, #e8f4fd 100%);--sc-text:#333;--sc-text-light:#999;--sc-shadow:0 4px 20px rgba(0,0,0,.3);--sc-radius:8px;--sc-transition:.3s ease}.slider-captcha-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);z-index:9999;display:none;justify-content:center;align-items:center;opacity:0;transition:opacity var(--sc-transition)}.slider-captcha-overlay.show{opacity:1}.slider-captcha-modal{background:#fff;border-radius:var(--sc-radius);padding:20px;box-shadow:var(--sc-shadow);position:relative;max-width:90vw;max-height:90vh;transform:scale(.8) translateY(-20px);opacity:0;transition:all var(--sc-transition)}.slider-captcha-modal.show{transform:scale(1) translateY(0);opacity:1}.slider-captcha-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px;padding-bottom:10px;border-bottom:1px solid var(--sc-border)}.slider-captcha-container{display:flex;align-items:center;position:relative;border-radius:4px;overflow:hidden;margin-bottom:15px;background:#837a7a;justify-content:center}.slider-captcha-track{width:100%;height:40px;line-height:40px;background:var(--sc-bg);border:1px solid var(--sc-border);border-radius:20px;position:relative;margin-bottom:15px;overflow:hidden}.slider-captcha-btn{width:38px;height:38px;background:#fff;border:1px solid #ccc;border-radius:50%;position:absolute;top:0;left:0;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 4px rgba(0,0,0,.1);transition:all var(--sc-transition);user-select:none;z-index:1}.slider-captcha-loading{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(255,255,255,.6);display:flex;align-items:center;justify-content:center;flex-direction:column;color:#666;font-size:14px;z-index:10;border-radius:4px}.slider-captcha-error{color:var(--sc-danger);font-size:12px;text-align:center;margin-top:10px;display:none}.slider-captcha-title{margin:0;font-size:16px;color:var(--sc-text)}.slider-captcha-close,.slider-captcha-refresh{background:none;border:none;cursor:pointer;color:var(--sc-text-light);padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:all var(--sc-transition);position:relative;font-size:0}.slider-captcha-close::before,.slider-captcha-close::after{content:'';position:absolute;width:16px;height:2px;background-color:var(--sc-text-light);border-radius:1px;transition:all var(--sc-transition)}.slider-captcha-close::before{transform:rotate(45deg)}.slider-captcha-close::after{transform:rotate(-45deg)}.slider-captcha-close:hover{background:#f5f5f5;transform:scale(1.1)}.slider-captcha-close:hover::before,.slider-captcha-close:hover::after{background-color:var(--sc-danger)}.slider-captcha-refresh{margin-left:10px}.slider-captcha-refresh svg{width:20px;height:20px;fill:var(--sc-text-light);transition:all var(--sc-transition)}.slider-captcha-refresh:hover{background:#f5f5f5;transform:scale(1.1)}.slider-captcha-refresh:hover svg{fill:var(--sc-primary);transform:rotate(180deg)}.slider-captcha-floating-time{position:absolute;bottom:-40px;left:50%;transform:translateX(-50%);color:#fff;font-size:12px;white-space:nowrap;opacity:0;pointer-events:none;z-index:10;transition:all var(--sc-transition);background:#fff;padding:2px 15px;border-radius:10px}.slider-captcha-floating-time.show{opacity:1;transform:translateX(-50%) translateY(-45px)}.slider-captcha-floating-time.success{color:var(--sc-success)}.slider-captcha-floating-time.fail{color:var(--sc-danger)}.slider-captcha-bg{width:100%;height:100%;object-fit:cover;display:block}.slider-captcha-piece{position:absolute;top:0;left:0;cursor:pointer;transition:none;z-index:2}.slider-captcha-finger{position:absolute;top:50%;left:10px;transform:translateY(-50%);font-size:20px;animation:fingerSlide 2s ease-in-out infinite;pointer-events:none;z-index:1;opacity:.6}.slider-captcha-hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--sc-text-light);font-size:14px;pointer-events:none;z-index:1;transition:all var(--sc-transition)}.slider-captcha-header-buttons{display:flex;align-items:center}@keyframes fingerSlide{0%{left:10px;opacity:.6}50%{opacity:1}100%{left:calc(50% - 10px);opacity:.6}}`\n }\n\n constructor(options = {}) {\n this.options = { ...PopupSliderCaptcha.DEFAULTS, ...options }\n this.elements = {}\n this.state = this.createInitialState()\n this.captchaData = null\n this.times = []\n this.startTime = null\n this.eventListeners = []\n this.timers = new Set()\n this.rafId = null\n this.cachedDimensions = null\n this.imageCache = new Map()\n\n // 优化:使用箭头函数绑定this,避免重复bind调用\n this.throttledHandleMove = this.throttle((e) => this.handleMove(e), this.options.throttleDelay)\n\n this.init()\n }\n\n // 优化:提取初始状态创建为独立方法\n createInitialState() {\n return {\n isVisible: false,\n isDragging: false,\n currentX: 0,\n startX: 0,\n retryCount: 0,\n isLoading: false\n }\n }\n\n init() {\n this.injectStyles()\n this.createElements()\n this.bindEvents()\n }\n\n injectStyles() {\n if (document.querySelector(\"#slider-captcha-styles\")) return\n\n const style = document.createElement(\"style\")\n style.id = \"slider-captcha-styles\"\n style.textContent = PopupSliderCaptcha.getStyles()\n document.head.appendChild(style)\n }\n\n // 优化:简化元素创建逻辑\n createElements() {\n const { elements, options } = this\n\n // 批量创建元素配置\n const elementConfigs = [\n ['overlay', 'div', PopupSliderCaptcha.CSS_CLASSES.overlay],\n ['modal', 'div', PopupSliderCaptcha.CSS_CLASSES.modal],\n ['header', 'div', PopupSliderCaptcha.CSS_CLASSES.header],\n ['title', 'h3', 'slider-captcha-title', '安全验证'],\n ['closeBtn', 'button', 'slider-captcha-close'],\n ['refreshBtn', 'button', 'slider-captcha-refresh'],\n ['container', 'div', PopupSliderCaptcha.CSS_CLASSES.container],\n ['backgroundImg', 'img', 'slider-captcha-bg'],\n ['sliderImg', 'img', 'slider-captcha-piece'],\n ['loadingText', 'div', PopupSliderCaptcha.CSS_CLASSES.loading, '加载中...'],\n ['floatingTime', 'div', 'slider-captcha-floating-time'],\n ['track', 'div', PopupSliderCaptcha.CSS_CLASSES.track],\n ['fingerAnimation', 'div', 'slider-captcha-finger', '👉'],\n ['btn', 'div', PopupSliderCaptcha.CSS_CLASSES.btn],\n ['icon', 'div', '', '→'],\n ['hint', 'div', PopupSliderCaptcha.CSS_CLASSES.hint, '向右滑动完成验证'],\n ['error', 'div', PopupSliderCaptcha.CSS_CLASSES.error]\n ]\n\n // 批量创建元素\n elementConfigs.forEach(([key, tag, className, textContent]) => {\n elements[key] = this.createElement(tag, className, textContent)\n })\n\n // 设置容器尺寸\n elements.container.style.cssText = `width:${options.width}px;height:${options.height}px`\n\n // 添加刷新按钮图标\n elements.refreshBtn.innerHTML = `<svg viewBox=\"0 0 24 24\"><path d=\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\"/></svg>`\n\n this.assembleDOM()\n this.setInitialState()\n }\n\n createElement(tag, className = \"\", textContent = \"\") {\n const element = document.createElement(tag)\n if (className) element.className = className\n if (textContent) element.textContent = textContent\n return element\n }\n\n // 优化:简化DOM组装逻辑\n assembleDOM() {\n const { elements } = this\n\n // 组装头部\n const headerButtons = this.createElement(\"div\", \"slider-captcha-header-buttons\")\n headerButtons.append(elements.refreshBtn, elements.closeBtn)\n elements.header.append(elements.title, headerButtons)\n\n // 组装验证码容器\n elements.container.append(\n elements.backgroundImg,\n elements.sliderImg,\n elements.loadingText,\n elements.floatingTime\n )\n\n // 组装滑块轨道\n elements.btn.appendChild(elements.icon)\n elements.track.append(\n elements.fingerAnimation,\n elements.btn,\n elements.hint\n )\n\n // 组装模态框\n elements.modal.append(\n elements.header,\n elements.container,\n elements.track,\n elements.error\n )\n\n // 组装到覆盖层\n elements.overlay.appendChild(elements.modal)\n document.body.appendChild(elements.overlay)\n }\n\n setInitialState() {\n // 批量设置初始状态\n Object.assign(this.elements.container.style, { display: \"none\" })\n Object.assign(this.elements.track.style, { display: \"none\" })\n }\n\n // 优化:简化事件绑定\n bindEvents() {\n const { elements } = this\n\n // 基础事件\n this.addEventListener(elements.closeBtn, \"click\", () => this.hide())\n this.addEventListener(elements.refreshBtn, \"click\", () => this.refresh())\n this.addEventListener(elements.overlay, \"click\", (e) => {\n if (e.target === elements.overlay && this.options.clickMaskClose) this.hide()\n })\n this.addEventListener(document, \"keydown\", (e) => {\n if (e.key === \"Escape\" && this.state.isVisible) this.hide()\n })\n this.addEventListener(document, \"visibilitychange\", () => this.handleVisibilityChange())\n\n this.bindSliderEvents()\n }\n\n bindSliderEvents() {\n const { elements } = this\n const handlers = {\n start: (e) => this.handleStart(e),\n move: this.throttledHandleMove,\n end: () => this.handleEnd()\n }\n\n // 滑块事件\n this.addEventListener(elements.btn, \"mousedown\", handlers.start)\n this.addEventListener(elements.btn, \"touchstart\", handlers.start)\n this.addEventListener(elements.sliderImg, \"mousedown\", handlers.start)\n this.addEventListener(elements.sliderImg, \"touchstart\", handlers.start)\n this.addEventListener(document, \"mousemove\", handlers.move, { passive: false })\n this.addEventListener(document, \"touchmove\", handlers.move, { passive: false })\n this.addEventListener(document, \"mouseup\", handlers.end)\n this.addEventListener(document, \"touchend\", handlers.end)\n }\n\n // 优化:改进事件管理\n addEventListener(element, event, handler, options = {}) {\n if (!element || typeof handler !== 'function') return\n\n element.addEventListener(event, handler, options)\n this.eventListeners.push({ element, event, handler, options })\n }\n\n removeAllEventListeners() {\n this.eventListeners.forEach(({ element, event, handler, options }) => {\n try {\n element?.removeEventListener?.(event, handler, options)\n } catch (error) {\n console.warn('Failed to remove event listener:', error)\n }\n })\n this.eventListeners.length = 0\n }\n\n // 优化:缓存尺寸计算\n getDimensions() {\n if (!this.cachedDimensions) {\n const trackWidth = this.elements.track.offsetWidth\n const btnWidth = this.elements.btn.offsetWidth\n this.cachedDimensions = {\n trackWidth,\n btnWidth,\n maxX: trackWidth - btnWidth\n }\n }\n return this.cachedDimensions\n }\n\n getPosition() {\n const { maxX } = this.getDimensions()\n const percentage = this.state.currentX / maxX\n return Math.round(percentage * (this.options.width - this.options.sliderSize))\n }\n\n // 优化:简化拖拽处理\n handleStart(e) {\n if (!this.captchaData || this.state.isDragging || this.state.isLoading) return\n\n e.preventDefault()\n this.state.isDragging = true\n this.state.startX = this.getClientX(e) - this.state.currentX\n this.startTime = this.startTime || Date.now()\n this.times = [{ time: Date.now(), position: this.getPosition() }]\n\n this.setTransition(false)\n this.updateUIState(\"dragging\")\n this.cachedDimensions = null // 清除缓存\n }\n\n handleMove(e) {\n if (!this.state.isDragging) return\n e.preventDefault()\n\n const clientX = this.getClientX(e)\n const deltaX = clientX - this.state.startX\n const { maxX } = this.getDimensions()\n\n this.state.currentX = Math.max(0, Math.min(deltaX, maxX))\n this.times.push({ time: Date.now(), position: this.getPosition() })\n\n // 优化:使用RAF批量更新\n this.rafId && cancelAnimationFrame(this.rafId)\n this.rafId = requestAnimationFrame(() => this.updateSliderPosition())\n }\n\n handleEnd() {\n if (!this.state.isDragging) return\n\n this.times.push({ time: Date.now(), position: this.getPosition() })\n this.state.isDragging = false\n\n if (this.rafId) {\n cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n\n this.verify()\n }\n\n handleVisibilityChange() {\n const animationState = document.hidden ? 'paused' : 'running'\n if (this.elements.fingerAnimation) {\n this.elements.fingerAnimation.style.animationPlayState = animationState\n }\n }\n\n getClientX(e) {\n return e.type.includes(\"touch\") ? e.touches[0].clientX : e.clientX\n }\n\n setTransition(enabled) {\n const transition = enabled ? \"all 0.3s ease\" : \"none\"\n requestAnimationFrame(() => {\n this.elements.btn.style.transition = transition\n this.elements.sliderImg.style.transition = transition\n })\n }\n\n // 优化:简化UI状态更新\n updateUIState(state) {\n const { elements } = this\n const updates = {\n dragging: () => {\n elements.hint.style.opacity = \"0\"\n elements.fingerAnimation.style.display = \"none\"\n },\n success: () => {\n Object.assign(elements.btn.style, { background: \"var(--sc-success)\" })\n Object.assign(elements.icon.style, { innerHTML: \"✓\", color: \"white\" })\n elements.icon.innerHTML = \"✓\"\n },\n fail: () => {\n Object.assign(elements.btn.style, { background: \"var(--sc-danger)\" })\n Object.assign(elements.icon.style, { innerHTML: \"✗\", color: \"white\" })\n elements.icon.innerHTML = \"✗\"\n },\n reset: () => {\n Object.assign(elements.btn.style, { background: \"white\" })\n Object.assign(elements.icon.style, { color: \"#666\" })\n elements.icon.innerHTML = \"→\"\n elements.fingerAnimation.style.display = \"block\"\n this.updateHintText(\"向右滑动完成验证\", \"var(--sc-text-light)\")\n },\n loading: () => {\n elements.hint.style.opacity = \"0\"\n elements.fingerAnimation.style.display = \"none\"\n Object.assign(elements.track.style, { pointerEvents: \"none\", opacity: \"0.6\" })\n }\n }\n\n if (updates[state]) {\n requestAnimationFrame(() => {\n updates[state]()\n if (state !== \"loading\") {\n Object.assign(elements.track.style, { pointerEvents: \"auto\", opacity: \"1\" })\n }\n })\n }\n }\n\n updateHintText(text, color) {\n requestAnimationFrame(() => {\n Object.assign(this.elements.hint, { textContent: text })\n Object.assign(this.elements.hint.style, { color, opacity: \"1\" })\n })\n }\n\n updateSliderPosition() {\n const { elements, options, state } = this\n const { maxX } = this.getDimensions()\n const pieceX = (state.currentX / maxX) * (options.width - options.sliderSize)\n const progress = state.currentX / maxX\n\n requestAnimationFrame(() => {\n elements.btn.style.transform = `translateX(${state.currentX}px)`\n elements.sliderImg.style.transform = `translateX(${pieceX}px)`\n elements.fingerAnimation.style.opacity = progress >= 0.8 ? \"0\" : \"0.6\"\n })\n }\n\n // 优化:简化显示/隐藏逻辑\n show() {\n this.state.isVisible = true\n this.elements.overlay.style.display = \"flex\"\n this.elements.overlay.offsetHeight // 强制重绘\n\n requestAnimationFrame(() => {\n this.elements.overlay.classList.add(\"show\")\n this.elements.modal.classList.add(\"show\")\n })\n\n this.loadCaptcha()\n }\n\n hide() {\n this.state.isVisible = false\n this.elements.overlay.classList.remove(\"show\")\n this.elements.modal.classList.remove(\"show\")\n\n this.safeSetTimeout(() => {\n this.elements.overlay.style.display = \"none\"\n document.body.removeChild(this.elements.overlay)\n this.reset()\n this.options.onClose?.()\n this.elements.overlay = null\n }, 300)\n }\n\n // 优化:简化加载逻辑\n async loadCaptcha() {\n try {\n this.showLoading()\n this.startTime = Date.now()\n\n const controller = new AbortController()\n const timeoutId = this.safeSetTimeout(() => controller.abort(), this.options.timeout)\n\n const response = await fetch(this.options.apiUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ place: 2, timestamp: Date.now() }),\n signal: controller.signal\n })\n\n this.safeClearTimeout(timeoutId)\n\n if (!response.ok) throw new Error(`HTTP ${response.status}`)\n const data = await response.json()\n\n if (data.data?.canvasSrc && data.data?.blockSrc) {\n this.captchaData = data.data\n this.showCaptcha()\n await this.renderCaptcha()\n } else {\n throw new Error(\"验证码数据格式错误\")\n }\n } catch (error) {\n const message = error.name === 'AbortError' ? \"请求超时,请重试\" : `加载验证码失败: ${error.message}`\n this.showError(message)\n }\n }\n\n async renderCaptcha() {\n return new Promise((resolve, reject) => {\n let loadedCount = 0\n const onLoad = () => ++loadedCount === 2 && (this.hideLoading(), resolve())\n const onError = () => reject(new Error(\"图片加载失败\"))\n\n this.loadImage(this.elements.backgroundImg, this.captchaData.canvasSrc, {\n width: this.captchaData.canvasWidth,\n height: this.captchaData.canvasHeight\n }, onLoad, onError)\n\n this.loadImage(this.elements.sliderImg, this.captchaData.blockSrc, {\n width: this.captchaData.blockWidth,\n height: this.captchaData.blockHeight,\n top: this.captchaData.blockY\n }, onLoad, onError)\n })\n }\n\n loadImage(imgElement, src, styles, onLoad, onError) {\n // 检查缓存\n if (this.imageCache.has(src)) {\n const cachedImg = this.imageCache.get(src)\n imgElement.src = cachedImg.src\n this.applyStyles(imgElement, styles)\n onLoad()\n return\n }\n\n imgElement.onload = () => {\n this.imageCache.set(src, imgElement.cloneNode())\n onLoad()\n }\n imgElement.onerror = onError\n imgElement.src = src\n this.applyStyles(imgElement, styles)\n }\n\n // 优化:提取样式应用逻辑\n applyStyles(element, styles) {\n Object.entries(styles).forEach(([key, value]) => {\n element.style[key] = typeof value === \"number\" ? value + \"px\" : value\n })\n }\n\n // 优化:简化状态显示方法\n showLoading() {\n this.state.isLoading = true\n this.batchUpdateStyles({\n container: { display: \"block\" },\n loadingText: { display: \"flex\" },\n error: { display: \"none\" }\n })\n this.updateUIState(\"loading\")\n }\n\n hideLoading() {\n this.state.isLoading = false\n this.batchUpdateStyles({ loadingText: { display: \"none\" } })\n this.updateUIState(\"reset\")\n }\n\n showCaptcha() {\n this.batchUpdateStyles({\n container: { display: \"block\" },\n track: { display: \"block\" },\n error: { display: \"none\" }\n })\n }\n\n showError(message) {\n this.hideLoading()\n this.batchUpdateStyles({\n error: { display: \"block\", textContent: message }\n })\n }\n\n // 优化:批量样式更新\n batchUpdateStyles(updates) {\n requestAnimationFrame(() => {\n Object.entries(updates).forEach(([elementKey, styles]) => {\n const element = this.elements[elementKey]\n if (element) {\n Object.entries(styles).forEach(([prop, value]) => {\n if (prop === 'textContent') {\n element.textContent = value\n } else {\n element.style[prop] = value\n }\n })\n }\n })\n })\n }\n\n async verify() {\n if (!this.captchaData) {\n this.onVerifyFail(\"验证码数据丢失\")\n return\n }\n\n try {\n const controller = new AbortController()\n const timeoutId = this.safeSetTimeout(() => controller.abort(), this.options.timeout)\n\n const response = await fetch(this.options.verifyUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n loginVo: {\n nonceStr: this.captchaData.nonceStr,\n value: this.getPosition()\n },\n dragEventList: [...this.times]\n }),\n signal: controller.signal\n })\n\n this.safeClearTimeout(timeoutId)\n\n if (!response.ok) throw new Error(`HTTP ${response.status}`)\n const data = await response.json()\n\n if (data.code === \"0\" || data.success === true) {\n this.onVerifySuccess()\n } else {\n this.onVerifyFail(data.message || \"验证失败,请重试!\")\n }\n } catch (error) {\n const message = error.name === 'AbortError' ? \"验证超时,请重试\" : \"网络错误\"\n this.onVerifyFail(message)\n }\n }\n\n onVerifySuccess() {\n const duration = Date.now() - this.startTime\n const durationText = `验证成功!耗时:${(duration / 1000).toFixed(2)}s`\n\n this.updateUIState(\"success\")\n this.showFloatingTime(durationText, \"success\")\n\n this.safeSetTimeout(() => {\n this.options.onSuccess?.({\n captchaId: this.captchaData.captchaId,\n timestamp: Date.now(),\n duration\n })\n this.hide()\n }, 2000)\n }\n\n showFloatingTime(text, type = \"success\") {\n const { elements } = this\n elements.floatingTime.textContent = text\n elements.floatingTime.className = `slider-captcha-floating-time ${type}`\n\n this.safeSetTimeout(() => elements.floatingTime.classList.add(\"show\"), 100)\n this.safeSetTimeout(() => {\n elements.floatingTime.className = \"slider-captcha-floating-time\"\n }, 2500) // 优化:延长显示时间,避免被reset清除\n }\n\n onVerifyFail(message) {\n this.state.retryCount++\n this.updateUIState(\"fail\")\n this.showFloatingTime(message, \"fail\")\n\n this.safeSetTimeout(() => {\n if (this.state.retryCount >= this.options.maxRetries) {\n this.refresh()\n } else {\n this.reset()\n }\n }, 2500) // 优化:延长等待时间,确保浮动提示完整显示\n }\n\n reset() {\n this.clearAllTimers()\n\n // 重置状态\n Object.assign(this.state, {\n isDragging: false,\n currentX: 0,\n startX: 0,\n isLoading: false\n })\n\n this.times = []\n this.startTime = null\n this.cachedDimensions = null\n\n // 重置UI\n requestAnimationFrame(() => {\n this.setTransition(true)\n this.elements.btn.style.transform = \"translateX(0px)\"\n this.elements.sliderImg.style.transform = \"translateX(0px)\"\n this.updateUIState(\"reset\")\n this.elements.error.style.display = \"none\"\n })\n }\n\n refresh() {\n this.reset()\n this.state.retryCount = 0\n this.loadCaptcha()\n }\n\n // 安全的定时器管理\n safeSetTimeout(callback, delay) {\n const timerId = setTimeout(() => {\n this.timers.delete(timerId)\n callback()\n }, delay)\n this.timers.add(timerId)\n return timerId\n }\n\n safeClearTimeout(timerId) {\n if (timerId) {\n clearTimeout(timerId)\n this.timers.delete(timerId)\n }\n }\n\n clearAllTimers() {\n this.timers.forEach(timer => {\n clearTimeout(timer)\n clearInterval(timer)\n })\n this.timers.clear()\n\n if (this.rafId) {\n cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n }\n\n // 清理图片资源\n cleanupImages() {\n if (this.elements.backgroundImg) {\n this.elements.backgroundImg.src = ''\n this.elements.backgroundImg.onload = null\n this.elements.backgroundImg.onerror = null\n }\n if (this.elements.sliderImg) {\n this.elements.sliderImg.src = ''\n this.elements.sliderImg.onload = null\n this.elements.sliderImg.onerror = null\n }\n this.imageCache.clear()\n }\n\n // 工具函数:节流\n throttle(func, delay) {\n let lastCall = 0\n return function (...args) {\n const now = Date.now()\n if (now - lastCall >= delay) {\n lastCall = now\n return func.apply(this, args)\n }\n }\n }\n\n // 工具函数:防抖\n debounce(func, delay) {\n let timeoutId\n return function (...args) {\n clearTimeout(timeoutId)\n timeoutId = setTimeout(() => func.apply(this, args), delay)\n }\n }\n\n destroy() {\n // 恢复body样式\n document.body.style.userSelect = \"\"\n document.body.style.cursor = \"\"\n\n // 清理所有定时器\n this.clearAllTimers()\n\n // 移除所有事件监听器\n this.removeAllEventListeners()\n\n // 清理图片资源\n this.cleanupImages()\n\n // 移除DOM元素\n if (this.elements.overlay?.parentNode) {\n this.elements.overlay.parentNode.removeChild(this.elements.overlay)\n }\n\n // 清理样式表\n const styleElement = document.getElementById('slider-captcha-styles')\n if (styleElement) {\n styleElement.remove()\n }\n\n // 清空所有属性\n Object.keys(this).forEach(key => {\n if (key !== 'constructor') {\n this[key] = null\n }\n })\n }\n\n static create(options) {\n return new PopupSliderCaptcha(options)\n }\n\n static show(options) {\n const instance = new PopupSliderCaptcha(options)\n instance.show()\n return instance\n }\n}\n\n// 模块导出\nif (typeof module !== \"undefined\" && module.exports) {\n module.exports = PopupSliderCaptcha\n module.exports.default = PopupSliderCaptcha\n} else if (typeof define === \"function\" && define.amd) {\n define([], () => PopupSliderCaptcha)\n} else if (typeof window !== \"undefined\") {\n window.PopupSliderCaptcha = PopupSliderCaptcha\n window.SliderCaptcha = PopupSliderCaptcha\n}\n\n// Add ES6 export for modern module systems\nexport default PopupSliderCaptcha\n","import JSEncrypt from 'jsencrypt'\n\n/**\n * 密码校验工具类\n * 提供密码加密和校验功能\n */\nclass PasswordValidator {\n constructor(options = {}) {\n this.options = {\n // 获取公钥的接口地址\n publicKeyUrl: options.publicKeyUrl || '/microservice/strongPassword/getPublicKey',\n // 密码校验接口地址\n validateUrl: options.validateUrl || '/microservice/strongPassword/checkPassword',\n // 请求超时时间\n timeout: options.timeout || 10000,\n // 自定义请求头\n headers: options.headers || {},\n ...options\n }\n\n // 缓存公钥,避免重复请求\n this.publicKeyCache = null\n this.publicKeyExpiry = null\n }\n\n /**\n * 获取公钥\n * @returns {Promise<string>} 公钥字符串\n */\n async getPublicKey() {\n // 检查缓存是否有效(5分钟有效期)\n if (this.publicKeyCache && this.publicKeyExpiry && Date.now() < this.publicKeyExpiry) {\n return this.publicKeyCache\n }\n\n try {\n const response = await this.makeRequest(this.options.publicKeyUrl, {\n method: 'GET'\n })\n\n if (response.code !== '0' ) {\n throw new Error('获取公钥失败:' + (response.message || '未知错误'))\n }\n\n // 缓存公钥,设置5分钟过期时间\n this.publicKeyCache = response.data\n this.publicKeyExpiry = Date.now() + 5 * 60 * 1000\n\n return this.publicKeyCache\n } catch (error) {\n console.error('获取公钥失败:', error)\n throw new Error('获取公钥失败: ' + error.message)\n }\n }\n\n /**\n * 使用RSA公钥加密密码\n * @param {string} password 原始密码\n * @param {string} publicKey 公钥字符串\n * @returns {string} 加密后的密码\n */\n encryptPassword(password, publicKey) {\n try {\n // 使用导入的JSEncrypt进行RSA加密\n if (!JSEncrypt) {\n throw new Error('JSEncrypt库未正确加载')\n }\n\n const encrypt = new JSEncrypt()\n encrypt.setPublicKey(publicKey)\n const encrypted = encrypt.encrypt(password)\n\n if (!encrypted) {\n throw new Error('密码加密失败')\n }\n\n return encrypted\n } catch (error) {\n console.error('密码加密失败:', error)\n throw new Error('密码加密失败: ' + error.message)\n }\n }\n\n /**\n * 校验密码\n * @param {string} password 原始密码\n * @param {string} userName 用户\n * @param {Object} additionalData 额外的校验数据\n * @returns {Promise<Object>} 校验结果\n */\n async validatePassword(password, userName, additionalData = {}) {\n try {\n // 1. 获取公钥\n const publicKey = await this.getPublicKey()\n\n // 2. 加密密码\n const encryptedPassword = this.encryptPassword(password, publicKey)\n\n // 3. 调用校验接口\n const response = await this.makeRequest(this.options.validateUrl, {\n method: 'POST',\n body: JSON.stringify({\n userName: userName,\n password: encryptedPassword,\n timestamp: Date.now(),\n ...additionalData\n })\n })\n\n return {\n success: response.success,\n message: response.message,\n data: response.data,\n code: response.code\n }\n } catch (error) {\n console.error('密码校验失败:', error)\n return {\n success: false,\n message: error.message,\n code: 'VALIDATION_ERROR'\n }\n }\n }\n\n /**\n * 发送HTTP请求的通用方法\n * @param {string} url 请求地址\n * @param {Object} options 请求选项\n * @returns {Promise<Object>} 响应结果\n */\n async makeRequest(url, options = {}) {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.options.timeout)\n\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...this.options.headers,\n ...options.headers\n },\n signal: controller.signal\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new Error(`HTTP错误: ${response.status} ${response.statusText}`)\n }\n\n return await response.json()\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error.name === 'AbortError') {\n throw new Error('请求超时')\n }\n\n throw error\n }\n }\n\n /**\n * 清除公钥缓存\n */\n clearCache() {\n this.publicKeyCache = null\n this.publicKeyExpiry = null\n }\n\n /**\n * 更新配置\n * @param {Object} newOptions 新的配置选项\n */\n updateOptions(newOptions) {\n this.options = { ...this.options, ...newOptions }\n // 清除缓存,使用新配置重新获取\n this.clearCache()\n }\n}\n\n// 导出类和创建实例的工厂函数\nexport default PasswordValidator\n\n/**\n * 创建密码校验器实例的工厂函数\n * @param {Object} options 配置选项\n * @returns {PasswordValidator} 密码校验器实例\n */\nexport function createPasswordValidator(options) {\n return new PasswordValidator(options)\n}\n\n/**\n * 快速校验密码的便捷函数\n * @param {string} password 密码\n * @param {Object} options 配置选项\n * @param {Object} additionalData 额外数据\n * @returns {Promise<Object>} 校验结果\n */\nexport async function validatePassword(password, options = {}, additionalData = {}) {\n const validator = new PasswordValidator(options)\n // 修复:添加userName参数,可以从additionalData中提取或设为空字符串\n const userName = additionalData.userName || ''\n return await validator.validatePassword(password, userName, additionalData)\n}\n","// 导入滑块验证码组件(使用默认导入)\nimport PopupSliderCaptcha from './slider-captcha.js'\n\n// 导入密码校验器\nimport PasswordValidator, { createPasswordValidator, validatePassword } from './password-validator.js'\n\n// 导出所有模块\nexport { \n PopupSliderCaptcha,\n PasswordValidator,\n createPasswordValidator,\n validatePassword\n}\n\n// 默认导出(向后兼容)\nexport default {\n PopupSliderCaptcha,\n PasswordValidator,\n createPasswordValidator,\n validatePassword\n}\n\n// 全局注册(用于UMD构建)\nif (typeof window !== 'undefined') {\n window.SliderCaptcha = PopupSliderCaptcha\n window.PopupSliderCaptcha = PopupSliderCaptcha\n window.PasswordValidator = PasswordValidator\n window.createPasswordValidator = createPasswordValidator\n window.validatePassword = validatePassword\n}\n"],"names":[],"mappings":"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"}
package/dist/index.esm.js DELETED
@@ -1 +0,0 @@
1
- import t from"jsencrypt";class PopupSliderCaptcha{static DEFAULTS={width:320,height:155,sliderSize:38,maxRetries:3,timeout:3e4,apiUrl:"/api/captcha",verifyUrl:"/api/captcha/verify",throttleDelay:16,clickMaskClose:!1};static CSS_CLASSES={overlay:"slider-captcha-overlay",modal:"slider-captcha-modal",header:"slider-captcha-header",container:"slider-captcha-container",track:"slider-captcha-track",btn:"slider-captcha-btn",hint:"slider-captcha-hint",loading:"slider-captcha-loading",error:"slider-captcha-error"};static getStyles(){return":root{--sc-primary:#409eff;--sc-success:#67c23a;--sc-danger:#f56c6c;--sc-border:#e4e7eb;--sc-bg:linear-gradient(90deg, #f7f9fa 0%, #e8f4fd 100%);--sc-text:#333;--sc-text-light:#999;--sc-shadow:0 4px 20px rgba(0,0,0,.3);--sc-radius:8px;--sc-transition:.3s ease}.slider-captcha-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);z-index:9999;display:none;justify-content:center;align-items:center;opacity:0;transition:opacity var(--sc-transition)}.slider-captcha-overlay.show{opacity:1}.slider-captcha-modal{background:#fff;border-radius:var(--sc-radius);padding:20px;box-shadow:var(--sc-shadow);position:relative;max-width:90vw;max-height:90vh;transform:scale(.8) translateY(-20px);opacity:0;transition:all var(--sc-transition)}.slider-captcha-modal.show{transform:scale(1) translateY(0);opacity:1}.slider-captcha-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px;padding-bottom:10px;border-bottom:1px solid var(--sc-border)}.slider-captcha-container{display:flex;align-items:center;position:relative;border-radius:4px;overflow:hidden;margin-bottom:15px;background:#837a7a;justify-content:center}.slider-captcha-track{width:100%;height:40px;line-height:40px;background:var(--sc-bg);border:1px solid var(--sc-border);border-radius:20px;position:relative;margin-bottom:15px;overflow:hidden}.slider-captcha-btn{width:38px;height:38px;background:#fff;border:1px solid #ccc;border-radius:50%;position:absolute;top:0;left:0;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 4px rgba(0,0,0,.1);transition:all var(--sc-transition);user-select:none;z-index:1}.slider-captcha-loading{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(255,255,255,.6);display:flex;align-items:center;justify-content:center;flex-direction:column;color:#666;font-size:14px;z-index:10;border-radius:4px}.slider-captcha-error{color:var(--sc-danger);font-size:12px;text-align:center;margin-top:10px;display:none}.slider-captcha-title{margin:0;font-size:16px;color:var(--sc-text)}.slider-captcha-close,.slider-captcha-refresh{background:none;border:none;cursor:pointer;color:var(--sc-text-light);padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:all var(--sc-transition);position:relative;font-size:0}.slider-captcha-close::before,.slider-captcha-close::after{content:'';position:absolute;width:16px;height:2px;background-color:var(--sc-text-light);border-radius:1px;transition:all var(--sc-transition)}.slider-captcha-close::before{transform:rotate(45deg)}.slider-captcha-close::after{transform:rotate(-45deg)}.slider-captcha-close:hover{background:#f5f5f5;transform:scale(1.1)}.slider-captcha-close:hover::before,.slider-captcha-close:hover::after{background-color:var(--sc-danger)}.slider-captcha-refresh{margin-left:10px}.slider-captcha-refresh svg{width:20px;height:20px;fill:var(--sc-text-light);transition:all var(--sc-transition)}.slider-captcha-refresh:hover{background:#f5f5f5;transform:scale(1.1)}.slider-captcha-refresh:hover svg{fill:var(--sc-primary);transform:rotate(180deg)}.slider-captcha-floating-time{position:absolute;bottom:-40px;left:50%;transform:translateX(-50%);color:#fff;font-size:12px;white-space:nowrap;opacity:0;pointer-events:none;z-index:10;transition:all var(--sc-transition);background:#fff;padding:2px 15px;border-radius:10px}.slider-captcha-floating-time.show{opacity:1;transform:translateX(-50%) translateY(-45px)}.slider-captcha-floating-time.success{color:var(--sc-success)}.slider-captcha-floating-time.fail{color:var(--sc-danger)}.slider-captcha-bg{width:100%;height:100%;object-fit:cover;display:block}.slider-captcha-piece{position:absolute;top:0;left:0;cursor:pointer;transition:none;z-index:2}.slider-captcha-finger{position:absolute;top:50%;left:10px;transform:translateY(-50%);font-size:20px;animation:fingerSlide 2s ease-in-out infinite;pointer-events:none;z-index:1;opacity:.6}.slider-captcha-hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--sc-text-light);font-size:14px;pointer-events:none;z-index:1;transition:all var(--sc-transition)}.slider-captcha-header-buttons{display:flex;align-items:center}@keyframes fingerSlide{0%{left:10px;opacity:.6}50%{opacity:1}100%{left:calc(50% - 10px);opacity:.6}}"}constructor(t={}){this.options={...PopupSliderCaptcha.DEFAULTS,...t},this.elements={},this.state=this.createInitialState(),this.captchaData=null,this.times=[],this.startTime=null,this.eventListeners=[],this.timers=new Set,this.rafId=null,this.cachedDimensions=null,this.imageCache=new Map,this.throttledHandleMove=this.throttle(t=>this.handleMove(t),this.options.throttleDelay),this.init()}createInitialState(){return{isVisible:!1,isDragging:!1,currentX:0,startX:0,retryCount:0,isLoading:!1}}init(){this.injectStyles(),this.createElements(),this.bindEvents()}injectStyles(){if(document.querySelector("#slider-captcha-styles"))return;const t=document.createElement("style");t.id="slider-captcha-styles",t.textContent=PopupSliderCaptcha.getStyles(),document.head.appendChild(t)}createElements(){const{elements:t,options:e}=this;[["overlay","div",PopupSliderCaptcha.CSS_CLASSES.overlay],["modal","div",PopupSliderCaptcha.CSS_CLASSES.modal],["header","div",PopupSliderCaptcha.CSS_CLASSES.header],["title","h3","slider-captcha-title","安全验证"],["closeBtn","button","slider-captcha-close"],["refreshBtn","button","slider-captcha-refresh"],["container","div",PopupSliderCaptcha.CSS_CLASSES.container],["backgroundImg","img","slider-captcha-bg"],["sliderImg","img","slider-captcha-piece"],["loadingText","div",PopupSliderCaptcha.CSS_CLASSES.loading,"加载中..."],["floatingTime","div","slider-captcha-floating-time"],["track","div",PopupSliderCaptcha.CSS_CLASSES.track],["fingerAnimation","div","slider-captcha-finger","👉"],["btn","div",PopupSliderCaptcha.CSS_CLASSES.btn],["icon","div","","→"],["hint","div",PopupSliderCaptcha.CSS_CLASSES.hint,"向右滑动完成验证"],["error","div",PopupSliderCaptcha.CSS_CLASSES.error]].forEach(([e,i,s,a])=>{t[e]=this.createElement(i,s,a)}),t.container.style.cssText=`width:${e.width}px;height:${e.height}px`,t.refreshBtn.innerHTML='<svg viewBox="0 0 24 24"><path d="M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z"/></svg>',this.assembleDOM(),this.setInitialState()}createElement(t,e="",i=""){const s=document.createElement(t);return e&&(s.className=e),i&&(s.textContent=i),s}assembleDOM(){const{elements:t}=this,e=this.createElement("div","slider-captcha-header-buttons");e.append(t.refreshBtn,t.closeBtn),t.header.append(t.title,e),t.container.append(t.backgroundImg,t.sliderImg,t.loadingText,t.floatingTime),t.btn.appendChild(t.icon),t.track.append(t.fingerAnimation,t.btn,t.hint),t.modal.append(t.header,t.container,t.track,t.error),t.overlay.appendChild(t.modal),document.body.appendChild(t.overlay)}setInitialState(){Object.assign(this.elements.container.style,{display:"none"}),Object.assign(this.elements.track.style,{display:"none"})}bindEvents(){const{elements:t}=this;this.addEventListener(t.closeBtn,"click",()=>this.hide()),this.addEventListener(t.refreshBtn,"click",()=>this.refresh()),this.addEventListener(t.overlay,"click",e=>{e.target===t.overlay&&this.options.clickMaskClose&&this.hide()}),this.addEventListener(document,"keydown",t=>{"Escape"===t.key&&this.state.isVisible&&this.hide()}),this.addEventListener(document,"visibilitychange",()=>this.handleVisibilityChange()),this.bindSliderEvents()}bindSliderEvents(){const{elements:t}=this,e={start:t=>this.handleStart(t),move:this.throttledHandleMove,end:()=>this.handleEnd()};this.addEventListener(t.btn,"mousedown",e.start),this.addEventListener(t.btn,"touchstart",e.start),this.addEventListener(t.sliderImg,"mousedown",e.start),this.addEventListener(t.sliderImg,"touchstart",e.start),this.addEventListener(document,"mousemove",e.move,{passive:!1}),this.addEventListener(document,"touchmove",e.move,{passive:!1}),this.addEventListener(document,"mouseup",e.end),this.addEventListener(document,"touchend",e.end)}addEventListener(t,e,i,s={}){t&&"function"==typeof i&&(t.addEventListener(e,i,s),this.eventListeners.push({element:t,event:e,handler:i,options:s}))}removeAllEventListeners(){this.eventListeners.forEach(({element:t,event:e,handler:i,options:s})=>{try{t?.removeEventListener?.(e,i,s)}catch(t){}}),this.eventListeners.length=0}getDimensions(){if(!this.cachedDimensions){const t=this.elements.track.offsetWidth,e=this.elements.btn.offsetWidth;this.cachedDimensions={trackWidth:t,btnWidth:e,maxX:t-e}}return this.cachedDimensions}getPosition(){const{maxX:t}=this.getDimensions(),e=this.state.currentX/t;return Math.round(e*(this.options.width-this.options.sliderSize))}handleStart(t){!this.captchaData||this.state.isDragging||this.state.isLoading||(t.preventDefault(),this.state.isDragging=!0,this.state.startX=this.getClientX(t)-this.state.currentX,this.startTime=this.startTime||Date.now(),this.times=[{time:Date.now(),position:this.getPosition()}],this.setTransition(!1),this.updateUIState("dragging"),this.cachedDimensions=null)}handleMove(t){if(!this.state.isDragging)return;t.preventDefault();const e=this.getClientX(t)-this.state.startX,{maxX:i}=this.getDimensions();this.state.currentX=Math.max(0,Math.min(e,i)),this.times.push({time:Date.now(),position:this.getPosition()}),this.rafId&&cancelAnimationFrame(this.rafId),this.rafId=requestAnimationFrame(()=>this.updateSliderPosition())}handleEnd(){this.state.isDragging&&(this.times.push({time:Date.now(),position:this.getPosition()}),this.state.isDragging=!1,this.rafId&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.verify())}handleVisibilityChange(){const t=document.hidden?"paused":"running";this.elements.fingerAnimation&&(this.elements.fingerAnimation.style.animationPlayState=t)}getClientX(t){return t.type.includes("touch")?t.touches[0].clientX:t.clientX}setTransition(t){const e=t?"all 0.3s ease":"none";requestAnimationFrame(()=>{this.elements.btn.style.transition=e,this.elements.sliderImg.style.transition=e})}updateUIState(t){const{elements:e}=this,i={dragging:()=>{e.hint.style.opacity="0",e.fingerAnimation.style.display="none"},success:()=>{Object.assign(e.btn.style,{background:"var(--sc-success)"}),Object.assign(e.icon.style,{innerHTML:"✓",color:"white"}),e.icon.innerHTML="✓"},fail:()=>{Object.assign(e.btn.style,{background:"var(--sc-danger)"}),Object.assign(e.icon.style,{innerHTML:"✗",color:"white"}),e.icon.innerHTML="✗"},reset:()=>{Object.assign(e.btn.style,{background:"white"}),Object.assign(e.icon.style,{color:"#666"}),e.icon.innerHTML="→",e.fingerAnimation.style.display="block",this.updateHintText("向右滑动完成验证","var(--sc-text-light)")},loading:()=>{e.hint.style.opacity="0",e.fingerAnimation.style.display="none",Object.assign(e.track.style,{pointerEvents:"none",opacity:"0.6"})}};i[t]&&requestAnimationFrame(()=>{i[t](),"loading"!==t&&Object.assign(e.track.style,{pointerEvents:"auto",opacity:"1"})})}updateHintText(t,e){requestAnimationFrame(()=>{Object.assign(this.elements.hint,{textContent:t}),Object.assign(this.elements.hint.style,{color:e,opacity:"1"})})}updateSliderPosition(){const{elements:t,options:e,state:i}=this,{maxX:s}=this.getDimensions(),a=i.currentX/s*(e.width-e.sliderSize),n=i.currentX/s;requestAnimationFrame(()=>{t.btn.style.transform=`translateX(${i.currentX}px)`,t.sliderImg.style.transform=`translateX(${a}px)`,t.fingerAnimation.style.opacity=n>=.8?"0":"0.6"})}show(){this.state.isVisible=!0,this.elements.overlay.style.display="flex",this.elements.overlay.offsetHeight,requestAnimationFrame(()=>{this.elements.overlay.classList.add("show"),this.elements.modal.classList.add("show")}),this.loadCaptcha()}hide(){this.state.isVisible=!1,this.elements.overlay.classList.remove("show"),this.elements.modal.classList.remove("show"),this.safeSetTimeout(()=>{this.elements.overlay.style.display="none",document.body.removeChild(this.elements.overlay),this.reset(),this.options.onClose?.(),this.elements.overlay=null},300)}async loadCaptcha(){try{this.showLoading(),this.startTime=Date.now();const t=new AbortController,e=this.safeSetTimeout(()=>t.abort(),this.options.timeout),i=await fetch(this.options.apiUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({place:2,timestamp:Date.now()}),signal:t.signal});if(this.safeClearTimeout(e),!i.ok)throw new Error(`HTTP ${i.status}`);const s=await i.json();if(!s.data?.canvasSrc||!s.data?.blockSrc)throw new Error("验证码数据格式错误");this.captchaData=s.data,this.showCaptcha(),await this.renderCaptcha()}catch(t){const e="AbortError"===t.name?"请求超时,请重试":`加载验证码失败: ${t.message}`;this.showError(e)}}async renderCaptcha(){return new Promise((t,e)=>{let i=0;const s=()=>2===++i&&(this.hideLoading(),t()),a=()=>e(new Error("图片加载失败"));this.loadImage(this.elements.backgroundImg,this.captchaData.canvasSrc,{width:this.captchaData.canvasWidth,height:this.captchaData.canvasHeight},s,a),this.loadImage(this.elements.sliderImg,this.captchaData.blockSrc,{width:this.captchaData.blockWidth,height:this.captchaData.blockHeight,top:this.captchaData.blockY},s,a)})}loadImage(t,e,i,s,a){if(this.imageCache.has(e)){const a=this.imageCache.get(e);return t.src=a.src,this.applyStyles(t,i),void s()}t.onload=()=>{this.imageCache.set(e,t.cloneNode()),s()},t.onerror=a,t.src=e,this.applyStyles(t,i)}applyStyles(t,e){Object.entries(e).forEach(([e,i])=>{t.style[e]="number"==typeof i?i+"px":i})}showLoading(){this.state.isLoading=!0,this.batchUpdateStyles({container:{display:"block"},loadingText:{display:"flex"},error:{display:"none"}}),this.updateUIState("loading")}hideLoading(){this.state.isLoading=!1,this.batchUpdateStyles({loadingText:{display:"none"}}),this.updateUIState("reset")}showCaptcha(){this.batchUpdateStyles({container:{display:"block"},track:{display:"block"},error:{display:"none"}})}showError(t){this.hideLoading(),this.batchUpdateStyles({error:{display:"block",textContent:t}})}batchUpdateStyles(t){requestAnimationFrame(()=>{Object.entries(t).forEach(([t,e])=>{const i=this.elements[t];i&&Object.entries(e).forEach(([t,e])=>{"textContent"===t?i.textContent=e:i.style[t]=e})})})}async verify(){if(this.captchaData)try{const t=new AbortController,e=this.safeSetTimeout(()=>t.abort(),this.options.timeout),i=await fetch(this.options.verifyUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({loginVo:{nonceStr:this.captchaData.nonceStr,value:this.getPosition()},dragEventList:[...this.times]}),signal:t.signal});if(this.safeClearTimeout(e),!i.ok)throw new Error(`HTTP ${i.status}`);const s=await i.json();"0"===s.code||!0===s.success?this.onVerifySuccess():this.onVerifyFail(s.message||"验证失败,请重试!")}catch(t){const e="AbortError"===t.name?"验证超时,请重试":"网络错误";this.onVerifyFail(e)}else this.onVerifyFail("验证码数据丢失")}onVerifySuccess(){const t=Date.now()-this.startTime,e=`验证成功!耗时:${(t/1e3).toFixed(2)}s`;this.updateUIState("success"),this.showFloatingTime(e,"success"),this.safeSetTimeout(()=>{this.options.onSuccess?.({captchaId:this.captchaData.captchaId,timestamp:Date.now(),duration:t}),this.hide()},2e3)}showFloatingTime(t,e="success"){const{elements:i}=this;i.floatingTime.textContent=t,i.floatingTime.className=`slider-captcha-floating-time ${e}`,this.safeSetTimeout(()=>i.floatingTime.classList.add("show"),100),this.safeSetTimeout(()=>{i.floatingTime.className="slider-captcha-floating-time"},2500)}onVerifyFail(t){this.state.retryCount++,this.updateUIState("fail"),this.showFloatingTime(t,"fail"),this.safeSetTimeout(()=>{this.state.retryCount>=this.options.maxRetries?this.refresh():this.reset()},2500)}reset(){this.clearAllTimers(),Object.assign(this.state,{isDragging:!1,currentX:0,startX:0,isLoading:!1}),this.times=[],this.startTime=null,this.cachedDimensions=null,requestAnimationFrame(()=>{this.setTransition(!0),this.elements.btn.style.transform="translateX(0px)",this.elements.sliderImg.style.transform="translateX(0px)",this.updateUIState("reset"),this.elements.error.style.display="none"})}refresh(){this.reset(),this.state.retryCount=0,this.loadCaptcha()}safeSetTimeout(t,e){const i=setTimeout(()=>{this.timers.delete(i),t()},e);return this.timers.add(i),i}safeClearTimeout(t){t&&(clearTimeout(t),this.timers.delete(t))}clearAllTimers(){this.timers.forEach(t=>{clearTimeout(t),clearInterval(t)}),this.timers.clear(),this.rafId&&(cancelAnimationFrame(this.rafId),this.rafId=null)}cleanupImages(){this.elements.backgroundImg&&(this.elements.backgroundImg.src="",this.elements.backgroundImg.onload=null,this.elements.backgroundImg.onerror=null),this.elements.sliderImg&&(this.elements.sliderImg.src="",this.elements.sliderImg.onload=null,this.elements.sliderImg.onerror=null),this.imageCache.clear()}throttle(t,e){let i=0;return function(...s){const a=Date.now();if(a-i>=e)return i=a,t.apply(this,s)}}debounce(t,e){let i;return function(...s){clearTimeout(i),i=setTimeout(()=>t.apply(this,s),e)}}destroy(){document.body.style.userSelect="",document.body.style.cursor="",this.clearAllTimers(),this.removeAllEventListeners(),this.cleanupImages(),this.elements.overlay?.parentNode&&this.elements.overlay.parentNode.removeChild(this.elements.overlay);const t=document.getElementById("slider-captcha-styles");t&&t.remove(),Object.keys(this).forEach(t=>{"constructor"!==t&&(this[t]=null)})}static create(t){return new PopupSliderCaptcha(t)}static show(t){const e=new PopupSliderCaptcha(t);return e.show(),e}}"undefined"!=typeof module&&module.exports?(module.exports=PopupSliderCaptcha,module.exports.default=PopupSliderCaptcha):"function"==typeof define&&define.amd?define([],()=>PopupSliderCaptcha):"undefined"!=typeof window&&(window.PopupSliderCaptcha=PopupSliderCaptcha,window.SliderCaptcha=PopupSliderCaptcha);class PasswordValidator{constructor(t={}){this.options={publicKeyUrl:t.publicKeyUrl||"/microservice/strongPassword/getPublicKey",validateUrl:t.validateUrl||"/microservice/strongPassword/checkPassword",timeout:t.timeout||1e4,headers:t.headers||{},...t},this.publicKeyCache=null,this.publicKeyExpiry=null}async getPublicKey(){if(this.publicKeyCache&&this.publicKeyExpiry&&Date.now()<this.publicKeyExpiry)return this.publicKeyCache;try{const t=await this.makeRequest(this.options.publicKeyUrl,{method:"GET"});if("0"!==t.code)throw new Error("获取公钥失败:"+(t.message||"未知错误"));return this.publicKeyCache=t.data,this.publicKeyExpiry=Date.now()+3e5,this.publicKeyCache}catch(t){throw new Error("获取公钥失败: "+t.message)}}encryptPassword(e,i){try{if(!t)throw new Error("JSEncrypt库未正确加载");const s=new t;s.setPublicKey(i);const a=s.encrypt(e);if(!a)throw new Error("密码加密失败");return a}catch(t){throw new Error("密码加密失败: "+t.message)}}async validatePassword(t,e,i={}){try{const s=await this.getPublicKey(),a=this.encryptPassword(t,s),n=await this.makeRequest(this.options.validateUrl,{method:"POST",body:JSON.stringify({userName:e,password:a,timestamp:Date.now(),...i})});return{success:n.success,message:n.message,data:n.data,code:n.code}}catch(t){return{success:!1,message:t.message,code:"VALIDATION_ERROR"}}}async makeRequest(t,e={}){const i=new AbortController,s=setTimeout(()=>i.abort(),this.options.timeout);try{const a=await fetch(t,{...e,headers:{"Content-Type":"application/json",...this.options.headers,...e.headers},signal:i.signal});if(clearTimeout(s),!a.ok)throw new Error(`HTTP错误: ${a.status} ${a.statusText}`);return await a.json()}catch(t){if(clearTimeout(s),"AbortError"===t.name)throw new Error("请求超时");throw t}}clearCache(){this.publicKeyCache=null,this.publicKeyExpiry=null}updateOptions(t){this.options={...this.options,...t},this.clearCache()}}function e(t){return new PasswordValidator(t)}async function i(t,e={},i={}){const s=new PasswordValidator(e),a=i.userName||"";return await s.validatePassword(t,a,i)}var s={PopupSliderCaptcha:PopupSliderCaptcha,PasswordValidator:PasswordValidator,createPasswordValidator:e,validatePassword:i};"undefined"!=typeof window&&(window.SliderCaptcha=PopupSliderCaptcha,window.PopupSliderCaptcha=PopupSliderCaptcha,window.PasswordValidator=PasswordValidator,window.createPasswordValidator=e,window.validatePassword=i);export{PasswordValidator,PopupSliderCaptcha,e as createPasswordValidator,s as default,i as validatePassword};
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/slider-captcha.js","../src/password-validator.js","../src/index.js"],"sourcesContent":["/**\n * 纯JavaScript弹窗滑块验证码组件\n */\nclass PopupSliderCaptcha {\n static DEFAULTS = {\n width: 320,\n height: 155,\n sliderSize: 38,\n maxRetries: 3,\n timeout: 30000,\n apiUrl: \"/api/captcha\",\n verifyUrl: \"/api/captcha/verify\",\n throttleDelay: 16,\n clickMaskClose: false\n }\n\n static CSS_CLASSES = {\n overlay: \"slider-captcha-overlay\",\n modal: \"slider-captcha-modal\",\n header: \"slider-captcha-header\",\n container: \"slider-captcha-container\",\n track: \"slider-captcha-track\",\n btn: \"slider-captcha-btn\",\n hint: \"slider-captcha-hint\",\n loading: \"slider-captcha-loading\",\n error: \"slider-captcha-error\"\n }\n\n // 优化:提取CSS样式为独立方法,减少主体代码长度\n static getStyles() {\n return `:root{--sc-primary:#409eff;--sc-success:#67c23a;--sc-danger:#f56c6c;--sc-border:#e4e7eb;--sc-bg:linear-gradient(90deg, #f7f9fa 0%, #e8f4fd 100%);--sc-text:#333;--sc-text-light:#999;--sc-shadow:0 4px 20px rgba(0,0,0,.3);--sc-radius:8px;--sc-transition:.3s ease}.slider-captcha-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);z-index:9999;display:none;justify-content:center;align-items:center;opacity:0;transition:opacity var(--sc-transition)}.slider-captcha-overlay.show{opacity:1}.slider-captcha-modal{background:#fff;border-radius:var(--sc-radius);padding:20px;box-shadow:var(--sc-shadow);position:relative;max-width:90vw;max-height:90vh;transform:scale(.8) translateY(-20px);opacity:0;transition:all var(--sc-transition)}.slider-captcha-modal.show{transform:scale(1) translateY(0);opacity:1}.slider-captcha-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px;padding-bottom:10px;border-bottom:1px solid var(--sc-border)}.slider-captcha-container{display:flex;align-items:center;position:relative;border-radius:4px;overflow:hidden;margin-bottom:15px;background:#837a7a;justify-content:center}.slider-captcha-track{width:100%;height:40px;line-height:40px;background:var(--sc-bg);border:1px solid var(--sc-border);border-radius:20px;position:relative;margin-bottom:15px;overflow:hidden}.slider-captcha-btn{width:38px;height:38px;background:#fff;border:1px solid #ccc;border-radius:50%;position:absolute;top:0;left:0;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 4px rgba(0,0,0,.1);transition:all var(--sc-transition);user-select:none;z-index:1}.slider-captcha-loading{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(255,255,255,.6);display:flex;align-items:center;justify-content:center;flex-direction:column;color:#666;font-size:14px;z-index:10;border-radius:4px}.slider-captcha-error{color:var(--sc-danger);font-size:12px;text-align:center;margin-top:10px;display:none}.slider-captcha-title{margin:0;font-size:16px;color:var(--sc-text)}.slider-captcha-close,.slider-captcha-refresh{background:none;border:none;cursor:pointer;color:var(--sc-text-light);padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:all var(--sc-transition);position:relative;font-size:0}.slider-captcha-close::before,.slider-captcha-close::after{content:'';position:absolute;width:16px;height:2px;background-color:var(--sc-text-light);border-radius:1px;transition:all var(--sc-transition)}.slider-captcha-close::before{transform:rotate(45deg)}.slider-captcha-close::after{transform:rotate(-45deg)}.slider-captcha-close:hover{background:#f5f5f5;transform:scale(1.1)}.slider-captcha-close:hover::before,.slider-captcha-close:hover::after{background-color:var(--sc-danger)}.slider-captcha-refresh{margin-left:10px}.slider-captcha-refresh svg{width:20px;height:20px;fill:var(--sc-text-light);transition:all var(--sc-transition)}.slider-captcha-refresh:hover{background:#f5f5f5;transform:scale(1.1)}.slider-captcha-refresh:hover svg{fill:var(--sc-primary);transform:rotate(180deg)}.slider-captcha-floating-time{position:absolute;bottom:-40px;left:50%;transform:translateX(-50%);color:#fff;font-size:12px;white-space:nowrap;opacity:0;pointer-events:none;z-index:10;transition:all var(--sc-transition);background:#fff;padding:2px 15px;border-radius:10px}.slider-captcha-floating-time.show{opacity:1;transform:translateX(-50%) translateY(-45px)}.slider-captcha-floating-time.success{color:var(--sc-success)}.slider-captcha-floating-time.fail{color:var(--sc-danger)}.slider-captcha-bg{width:100%;height:100%;object-fit:cover;display:block}.slider-captcha-piece{position:absolute;top:0;left:0;cursor:pointer;transition:none;z-index:2}.slider-captcha-finger{position:absolute;top:50%;left:10px;transform:translateY(-50%);font-size:20px;animation:fingerSlide 2s ease-in-out infinite;pointer-events:none;z-index:1;opacity:.6}.slider-captcha-hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--sc-text-light);font-size:14px;pointer-events:none;z-index:1;transition:all var(--sc-transition)}.slider-captcha-header-buttons{display:flex;align-items:center}@keyframes fingerSlide{0%{left:10px;opacity:.6}50%{opacity:1}100%{left:calc(50% - 10px);opacity:.6}}`\n }\n\n constructor(options = {}) {\n this.options = { ...PopupSliderCaptcha.DEFAULTS, ...options }\n this.elements = {}\n this.state = this.createInitialState()\n this.captchaData = null\n this.times = []\n this.startTime = null\n this.eventListeners = []\n this.timers = new Set()\n this.rafId = null\n this.cachedDimensions = null\n this.imageCache = new Map()\n\n // 优化:使用箭头函数绑定this,避免重复bind调用\n this.throttledHandleMove = this.throttle((e) => this.handleMove(e), this.options.throttleDelay)\n\n this.init()\n }\n\n // 优化:提取初始状态创建为独立方法\n createInitialState() {\n return {\n isVisible: false,\n isDragging: false,\n currentX: 0,\n startX: 0,\n retryCount: 0,\n isLoading: false\n }\n }\n\n init() {\n this.injectStyles()\n this.createElements()\n this.bindEvents()\n }\n\n injectStyles() {\n if (document.querySelector(\"#slider-captcha-styles\")) return\n\n const style = document.createElement(\"style\")\n style.id = \"slider-captcha-styles\"\n style.textContent = PopupSliderCaptcha.getStyles()\n document.head.appendChild(style)\n }\n\n // 优化:简化元素创建逻辑\n createElements() {\n const { elements, options } = this\n\n // 批量创建元素配置\n const elementConfigs = [\n ['overlay', 'div', PopupSliderCaptcha.CSS_CLASSES.overlay],\n ['modal', 'div', PopupSliderCaptcha.CSS_CLASSES.modal],\n ['header', 'div', PopupSliderCaptcha.CSS_CLASSES.header],\n ['title', 'h3', 'slider-captcha-title', '安全验证'],\n ['closeBtn', 'button', 'slider-captcha-close'],\n ['refreshBtn', 'button', 'slider-captcha-refresh'],\n ['container', 'div', PopupSliderCaptcha.CSS_CLASSES.container],\n ['backgroundImg', 'img', 'slider-captcha-bg'],\n ['sliderImg', 'img', 'slider-captcha-piece'],\n ['loadingText', 'div', PopupSliderCaptcha.CSS_CLASSES.loading, '加载中...'],\n ['floatingTime', 'div', 'slider-captcha-floating-time'],\n ['track', 'div', PopupSliderCaptcha.CSS_CLASSES.track],\n ['fingerAnimation', 'div', 'slider-captcha-finger', '👉'],\n ['btn', 'div', PopupSliderCaptcha.CSS_CLASSES.btn],\n ['icon', 'div', '', '→'],\n ['hint', 'div', PopupSliderCaptcha.CSS_CLASSES.hint, '向右滑动完成验证'],\n ['error', 'div', PopupSliderCaptcha.CSS_CLASSES.error]\n ]\n\n // 批量创建元素\n elementConfigs.forEach(([key, tag, className, textContent]) => {\n elements[key] = this.createElement(tag, className, textContent)\n })\n\n // 设置容器尺寸\n elements.container.style.cssText = `width:${options.width}px;height:${options.height}px`\n\n // 添加刷新按钮图标\n elements.refreshBtn.innerHTML = `<svg viewBox=\"0 0 24 24\"><path d=\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\"/></svg>`\n\n this.assembleDOM()\n this.setInitialState()\n }\n\n createElement(tag, className = \"\", textContent = \"\") {\n const element = document.createElement(tag)\n if (className) element.className = className\n if (textContent) element.textContent = textContent\n return element\n }\n\n // 优化:简化DOM组装逻辑\n assembleDOM() {\n const { elements } = this\n\n // 组装头部\n const headerButtons = this.createElement(\"div\", \"slider-captcha-header-buttons\")\n headerButtons.append(elements.refreshBtn, elements.closeBtn)\n elements.header.append(elements.title, headerButtons)\n\n // 组装验证码容器\n elements.container.append(\n elements.backgroundImg,\n elements.sliderImg,\n elements.loadingText,\n elements.floatingTime\n )\n\n // 组装滑块轨道\n elements.btn.appendChild(elements.icon)\n elements.track.append(\n elements.fingerAnimation,\n elements.btn,\n elements.hint\n )\n\n // 组装模态框\n elements.modal.append(\n elements.header,\n elements.container,\n elements.track,\n elements.error\n )\n\n // 组装到覆盖层\n elements.overlay.appendChild(elements.modal)\n document.body.appendChild(elements.overlay)\n }\n\n setInitialState() {\n // 批量设置初始状态\n Object.assign(this.elements.container.style, { display: \"none\" })\n Object.assign(this.elements.track.style, { display: \"none\" })\n }\n\n // 优化:简化事件绑定\n bindEvents() {\n const { elements } = this\n\n // 基础事件\n this.addEventListener(elements.closeBtn, \"click\", () => this.hide())\n this.addEventListener(elements.refreshBtn, \"click\", () => this.refresh())\n this.addEventListener(elements.overlay, \"click\", (e) => {\n if (e.target === elements.overlay && this.options.clickMaskClose) this.hide()\n })\n this.addEventListener(document, \"keydown\", (e) => {\n if (e.key === \"Escape\" && this.state.isVisible) this.hide()\n })\n this.addEventListener(document, \"visibilitychange\", () => this.handleVisibilityChange())\n\n this.bindSliderEvents()\n }\n\n bindSliderEvents() {\n const { elements } = this\n const handlers = {\n start: (e) => this.handleStart(e),\n move: this.throttledHandleMove,\n end: () => this.handleEnd()\n }\n\n // 滑块事件\n this.addEventListener(elements.btn, \"mousedown\", handlers.start)\n this.addEventListener(elements.btn, \"touchstart\", handlers.start)\n this.addEventListener(elements.sliderImg, \"mousedown\", handlers.start)\n this.addEventListener(elements.sliderImg, \"touchstart\", handlers.start)\n this.addEventListener(document, \"mousemove\", handlers.move, { passive: false })\n this.addEventListener(document, \"touchmove\", handlers.move, { passive: false })\n this.addEventListener(document, \"mouseup\", handlers.end)\n this.addEventListener(document, \"touchend\", handlers.end)\n }\n\n // 优化:改进事件管理\n addEventListener(element, event, handler, options = {}) {\n if (!element || typeof handler !== 'function') return\n\n element.addEventListener(event, handler, options)\n this.eventListeners.push({ element, event, handler, options })\n }\n\n removeAllEventListeners() {\n this.eventListeners.forEach(({ element, event, handler, options }) => {\n try {\n element?.removeEventListener?.(event, handler, options)\n } catch (error) {\n console.warn('Failed to remove event listener:', error)\n }\n })\n this.eventListeners.length = 0\n }\n\n // 优化:缓存尺寸计算\n getDimensions() {\n if (!this.cachedDimensions) {\n const trackWidth = this.elements.track.offsetWidth\n const btnWidth = this.elements.btn.offsetWidth\n this.cachedDimensions = {\n trackWidth,\n btnWidth,\n maxX: trackWidth - btnWidth\n }\n }\n return this.cachedDimensions\n }\n\n getPosition() {\n const { maxX } = this.getDimensions()\n const percentage = this.state.currentX / maxX\n return Math.round(percentage * (this.options.width - this.options.sliderSize))\n }\n\n // 优化:简化拖拽处理\n handleStart(e) {\n if (!this.captchaData || this.state.isDragging || this.state.isLoading) return\n\n e.preventDefault()\n this.state.isDragging = true\n this.state.startX = this.getClientX(e) - this.state.currentX\n this.startTime = this.startTime || Date.now()\n this.times = [{ time: Date.now(), position: this.getPosition() }]\n\n this.setTransition(false)\n this.updateUIState(\"dragging\")\n this.cachedDimensions = null // 清除缓存\n }\n\n handleMove(e) {\n if (!this.state.isDragging) return\n e.preventDefault()\n\n const clientX = this.getClientX(e)\n const deltaX = clientX - this.state.startX\n const { maxX } = this.getDimensions()\n\n this.state.currentX = Math.max(0, Math.min(deltaX, maxX))\n this.times.push({ time: Date.now(), position: this.getPosition() })\n\n // 优化:使用RAF批量更新\n this.rafId && cancelAnimationFrame(this.rafId)\n this.rafId = requestAnimationFrame(() => this.updateSliderPosition())\n }\n\n handleEnd() {\n if (!this.state.isDragging) return\n\n this.times.push({ time: Date.now(), position: this.getPosition() })\n this.state.isDragging = false\n\n if (this.rafId) {\n cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n\n this.verify()\n }\n\n handleVisibilityChange() {\n const animationState = document.hidden ? 'paused' : 'running'\n if (this.elements.fingerAnimation) {\n this.elements.fingerAnimation.style.animationPlayState = animationState\n }\n }\n\n getClientX(e) {\n return e.type.includes(\"touch\") ? e.touches[0].clientX : e.clientX\n }\n\n setTransition(enabled) {\n const transition = enabled ? \"all 0.3s ease\" : \"none\"\n requestAnimationFrame(() => {\n this.elements.btn.style.transition = transition\n this.elements.sliderImg.style.transition = transition\n })\n }\n\n // 优化:简化UI状态更新\n updateUIState(state) {\n const { elements } = this\n const updates = {\n dragging: () => {\n elements.hint.style.opacity = \"0\"\n elements.fingerAnimation.style.display = \"none\"\n },\n success: () => {\n Object.assign(elements.btn.style, { background: \"var(--sc-success)\" })\n Object.assign(elements.icon.style, { innerHTML: \"✓\", color: \"white\" })\n elements.icon.innerHTML = \"✓\"\n },\n fail: () => {\n Object.assign(elements.btn.style, { background: \"var(--sc-danger)\" })\n Object.assign(elements.icon.style, { innerHTML: \"✗\", color: \"white\" })\n elements.icon.innerHTML = \"✗\"\n },\n reset: () => {\n Object.assign(elements.btn.style, { background: \"white\" })\n Object.assign(elements.icon.style, { color: \"#666\" })\n elements.icon.innerHTML = \"→\"\n elements.fingerAnimation.style.display = \"block\"\n this.updateHintText(\"向右滑动完成验证\", \"var(--sc-text-light)\")\n },\n loading: () => {\n elements.hint.style.opacity = \"0\"\n elements.fingerAnimation.style.display = \"none\"\n Object.assign(elements.track.style, { pointerEvents: \"none\", opacity: \"0.6\" })\n }\n }\n\n if (updates[state]) {\n requestAnimationFrame(() => {\n updates[state]()\n if (state !== \"loading\") {\n Object.assign(elements.track.style, { pointerEvents: \"auto\", opacity: \"1\" })\n }\n })\n }\n }\n\n updateHintText(text, color) {\n requestAnimationFrame(() => {\n Object.assign(this.elements.hint, { textContent: text })\n Object.assign(this.elements.hint.style, { color, opacity: \"1\" })\n })\n }\n\n updateSliderPosition() {\n const { elements, options, state } = this\n const { maxX } = this.getDimensions()\n const pieceX = (state.currentX / maxX) * (options.width - options.sliderSize)\n const progress = state.currentX / maxX\n\n requestAnimationFrame(() => {\n elements.btn.style.transform = `translateX(${state.currentX}px)`\n elements.sliderImg.style.transform = `translateX(${pieceX}px)`\n elements.fingerAnimation.style.opacity = progress >= 0.8 ? \"0\" : \"0.6\"\n })\n }\n\n // 优化:简化显示/隐藏逻辑\n show() {\n this.state.isVisible = true\n this.elements.overlay.style.display = \"flex\"\n this.elements.overlay.offsetHeight // 强制重绘\n\n requestAnimationFrame(() => {\n this.elements.overlay.classList.add(\"show\")\n this.elements.modal.classList.add(\"show\")\n })\n\n this.loadCaptcha()\n }\n\n hide() {\n this.state.isVisible = false\n this.elements.overlay.classList.remove(\"show\")\n this.elements.modal.classList.remove(\"show\")\n\n this.safeSetTimeout(() => {\n this.elements.overlay.style.display = \"none\"\n document.body.removeChild(this.elements.overlay)\n this.reset()\n this.options.onClose?.()\n this.elements.overlay = null\n }, 300)\n }\n\n // 优化:简化加载逻辑\n async loadCaptcha() {\n try {\n this.showLoading()\n this.startTime = Date.now()\n\n const controller = new AbortController()\n const timeoutId = this.safeSetTimeout(() => controller.abort(), this.options.timeout)\n\n const response = await fetch(this.options.apiUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ place: 2, timestamp: Date.now() }),\n signal: controller.signal\n })\n\n this.safeClearTimeout(timeoutId)\n\n if (!response.ok) throw new Error(`HTTP ${response.status}`)\n const data = await response.json()\n\n if (data.data?.canvasSrc && data.data?.blockSrc) {\n this.captchaData = data.data\n this.showCaptcha()\n await this.renderCaptcha()\n } else {\n throw new Error(\"验证码数据格式错误\")\n }\n } catch (error) {\n const message = error.name === 'AbortError' ? \"请求超时,请重试\" : `加载验证码失败: ${error.message}`\n this.showError(message)\n }\n }\n\n async renderCaptcha() {\n return new Promise((resolve, reject) => {\n let loadedCount = 0\n const onLoad = () => ++loadedCount === 2 && (this.hideLoading(), resolve())\n const onError = () => reject(new Error(\"图片加载失败\"))\n\n this.loadImage(this.elements.backgroundImg, this.captchaData.canvasSrc, {\n width: this.captchaData.canvasWidth,\n height: this.captchaData.canvasHeight\n }, onLoad, onError)\n\n this.loadImage(this.elements.sliderImg, this.captchaData.blockSrc, {\n width: this.captchaData.blockWidth,\n height: this.captchaData.blockHeight,\n top: this.captchaData.blockY\n }, onLoad, onError)\n })\n }\n\n loadImage(imgElement, src, styles, onLoad, onError) {\n // 检查缓存\n if (this.imageCache.has(src)) {\n const cachedImg = this.imageCache.get(src)\n imgElement.src = cachedImg.src\n this.applyStyles(imgElement, styles)\n onLoad()\n return\n }\n\n imgElement.onload = () => {\n this.imageCache.set(src, imgElement.cloneNode())\n onLoad()\n }\n imgElement.onerror = onError\n imgElement.src = src\n this.applyStyles(imgElement, styles)\n }\n\n // 优化:提取样式应用逻辑\n applyStyles(element, styles) {\n Object.entries(styles).forEach(([key, value]) => {\n element.style[key] = typeof value === \"number\" ? value + \"px\" : value\n })\n }\n\n // 优化:简化状态显示方法\n showLoading() {\n this.state.isLoading = true\n this.batchUpdateStyles({\n container: { display: \"block\" },\n loadingText: { display: \"flex\" },\n error: { display: \"none\" }\n })\n this.updateUIState(\"loading\")\n }\n\n hideLoading() {\n this.state.isLoading = false\n this.batchUpdateStyles({ loadingText: { display: \"none\" } })\n this.updateUIState(\"reset\")\n }\n\n showCaptcha() {\n this.batchUpdateStyles({\n container: { display: \"block\" },\n track: { display: \"block\" },\n error: { display: \"none\" }\n })\n }\n\n showError(message) {\n this.hideLoading()\n this.batchUpdateStyles({\n error: { display: \"block\", textContent: message }\n })\n }\n\n // 优化:批量样式更新\n batchUpdateStyles(updates) {\n requestAnimationFrame(() => {\n Object.entries(updates).forEach(([elementKey, styles]) => {\n const element = this.elements[elementKey]\n if (element) {\n Object.entries(styles).forEach(([prop, value]) => {\n if (prop === 'textContent') {\n element.textContent = value\n } else {\n element.style[prop] = value\n }\n })\n }\n })\n })\n }\n\n async verify() {\n if (!this.captchaData) {\n this.onVerifyFail(\"验证码数据丢失\")\n return\n }\n\n try {\n const controller = new AbortController()\n const timeoutId = this.safeSetTimeout(() => controller.abort(), this.options.timeout)\n\n const response = await fetch(this.options.verifyUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n loginVo: {\n nonceStr: this.captchaData.nonceStr,\n value: this.getPosition()\n },\n dragEventList: [...this.times]\n }),\n signal: controller.signal\n })\n\n this.safeClearTimeout(timeoutId)\n\n if (!response.ok) throw new Error(`HTTP ${response.status}`)\n const data = await response.json()\n\n if (data.code === \"0\" || data.success === true) {\n this.onVerifySuccess()\n } else {\n this.onVerifyFail(data.message || \"验证失败,请重试!\")\n }\n } catch (error) {\n const message = error.name === 'AbortError' ? \"验证超时,请重试\" : \"网络错误\"\n this.onVerifyFail(message)\n }\n }\n\n onVerifySuccess() {\n const duration = Date.now() - this.startTime\n const durationText = `验证成功!耗时:${(duration / 1000).toFixed(2)}s`\n\n this.updateUIState(\"success\")\n this.showFloatingTime(durationText, \"success\")\n\n this.safeSetTimeout(() => {\n this.options.onSuccess?.({\n captchaId: this.captchaData.captchaId,\n timestamp: Date.now(),\n duration\n })\n this.hide()\n }, 2000)\n }\n\n showFloatingTime(text, type = \"success\") {\n const { elements } = this\n elements.floatingTime.textContent = text\n elements.floatingTime.className = `slider-captcha-floating-time ${type}`\n\n this.safeSetTimeout(() => elements.floatingTime.classList.add(\"show\"), 100)\n this.safeSetTimeout(() => {\n elements.floatingTime.className = \"slider-captcha-floating-time\"\n }, 2500) // 优化:延长显示时间,避免被reset清除\n }\n\n onVerifyFail(message) {\n this.state.retryCount++\n this.updateUIState(\"fail\")\n this.showFloatingTime(message, \"fail\")\n\n this.safeSetTimeout(() => {\n if (this.state.retryCount >= this.options.maxRetries) {\n this.refresh()\n } else {\n this.reset()\n }\n }, 2500) // 优化:延长等待时间,确保浮动提示完整显示\n }\n\n reset() {\n this.clearAllTimers()\n\n // 重置状态\n Object.assign(this.state, {\n isDragging: false,\n currentX: 0,\n startX: 0,\n isLoading: false\n })\n\n this.times = []\n this.startTime = null\n this.cachedDimensions = null\n\n // 重置UI\n requestAnimationFrame(() => {\n this.setTransition(true)\n this.elements.btn.style.transform = \"translateX(0px)\"\n this.elements.sliderImg.style.transform = \"translateX(0px)\"\n this.updateUIState(\"reset\")\n this.elements.error.style.display = \"none\"\n })\n }\n\n refresh() {\n this.reset()\n this.state.retryCount = 0\n this.loadCaptcha()\n }\n\n // 安全的定时器管理\n safeSetTimeout(callback, delay) {\n const timerId = setTimeout(() => {\n this.timers.delete(timerId)\n callback()\n }, delay)\n this.timers.add(timerId)\n return timerId\n }\n\n safeClearTimeout(timerId) {\n if (timerId) {\n clearTimeout(timerId)\n this.timers.delete(timerId)\n }\n }\n\n clearAllTimers() {\n this.timers.forEach(timer => {\n clearTimeout(timer)\n clearInterval(timer)\n })\n this.timers.clear()\n\n if (this.rafId) {\n cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n }\n\n // 清理图片资源\n cleanupImages() {\n if (this.elements.backgroundImg) {\n this.elements.backgroundImg.src = ''\n this.elements.backgroundImg.onload = null\n this.elements.backgroundImg.onerror = null\n }\n if (this.elements.sliderImg) {\n this.elements.sliderImg.src = ''\n this.elements.sliderImg.onload = null\n this.elements.sliderImg.onerror = null\n }\n this.imageCache.clear()\n }\n\n // 工具函数:节流\n throttle(func, delay) {\n let lastCall = 0\n return function (...args) {\n const now = Date.now()\n if (now - lastCall >= delay) {\n lastCall = now\n return func.apply(this, args)\n }\n }\n }\n\n // 工具函数:防抖\n debounce(func, delay) {\n let timeoutId\n return function (...args) {\n clearTimeout(timeoutId)\n timeoutId = setTimeout(() => func.apply(this, args), delay)\n }\n }\n\n destroy() {\n // 恢复body样式\n document.body.style.userSelect = \"\"\n document.body.style.cursor = \"\"\n\n // 清理所有定时器\n this.clearAllTimers()\n\n // 移除所有事件监听器\n this.removeAllEventListeners()\n\n // 清理图片资源\n this.cleanupImages()\n\n // 移除DOM元素\n if (this.elements.overlay?.parentNode) {\n this.elements.overlay.parentNode.removeChild(this.elements.overlay)\n }\n\n // 清理样式表\n const styleElement = document.getElementById('slider-captcha-styles')\n if (styleElement) {\n styleElement.remove()\n }\n\n // 清空所有属性\n Object.keys(this).forEach(key => {\n if (key !== 'constructor') {\n this[key] = null\n }\n })\n }\n\n static create(options) {\n return new PopupSliderCaptcha(options)\n }\n\n static show(options) {\n const instance = new PopupSliderCaptcha(options)\n instance.show()\n return instance\n }\n}\n\n// 模块导出\nif (typeof module !== \"undefined\" && module.exports) {\n module.exports = PopupSliderCaptcha\n module.exports.default = PopupSliderCaptcha\n} else if (typeof define === \"function\" && define.amd) {\n define([], () => PopupSliderCaptcha)\n} else if (typeof window !== \"undefined\") {\n window.PopupSliderCaptcha = PopupSliderCaptcha\n window.SliderCaptcha = PopupSliderCaptcha\n}\n\n// Add ES6 export for modern module systems\nexport default PopupSliderCaptcha\n","import JSEncrypt from 'jsencrypt'\n\n/**\n * 密码校验工具类\n * 提供密码加密和校验功能\n */\nclass PasswordValidator {\n constructor(options = {}) {\n this.options = {\n // 获取公钥的接口地址\n publicKeyUrl: options.publicKeyUrl || '/microservice/strongPassword/getPublicKey',\n // 密码校验接口地址\n validateUrl: options.validateUrl || '/microservice/strongPassword/checkPassword',\n // 请求超时时间\n timeout: options.timeout || 10000,\n // 自定义请求头\n headers: options.headers || {},\n ...options\n }\n\n // 缓存公钥,避免重复请求\n this.publicKeyCache = null\n this.publicKeyExpiry = null\n }\n\n /**\n * 获取公钥\n * @returns {Promise<string>} 公钥字符串\n */\n async getPublicKey() {\n // 检查缓存是否有效(5分钟有效期)\n if (this.publicKeyCache && this.publicKeyExpiry && Date.now() < this.publicKeyExpiry) {\n return this.publicKeyCache\n }\n\n try {\n const response = await this.makeRequest(this.options.publicKeyUrl, {\n method: 'GET'\n })\n\n if (response.code !== '0' ) {\n throw new Error('获取公钥失败:' + (response.message || '未知错误'))\n }\n\n // 缓存公钥,设置5分钟过期时间\n this.publicKeyCache = response.data\n this.publicKeyExpiry = Date.now() + 5 * 60 * 1000\n\n return this.publicKeyCache\n } catch (error) {\n console.error('获取公钥失败:', error)\n throw new Error('获取公钥失败: ' + error.message)\n }\n }\n\n /**\n * 使用RSA公钥加密密码\n * @param {string} password 原始密码\n * @param {string} publicKey 公钥字符串\n * @returns {string} 加密后的密码\n */\n encryptPassword(password, publicKey) {\n try {\n // 使用导入的JSEncrypt进行RSA加密\n if (!JSEncrypt) {\n throw new Error('JSEncrypt库未正确加载')\n }\n\n const encrypt = new JSEncrypt()\n encrypt.setPublicKey(publicKey)\n const encrypted = encrypt.encrypt(password)\n\n if (!encrypted) {\n throw new Error('密码加密失败')\n }\n\n return encrypted\n } catch (error) {\n console.error('密码加密失败:', error)\n throw new Error('密码加密失败: ' + error.message)\n }\n }\n\n /**\n * 校验密码\n * @param {string} password 原始密码\n * @param {string} userName 用户\n * @param {Object} additionalData 额外的校验数据\n * @returns {Promise<Object>} 校验结果\n */\n async validatePassword(password, userName, additionalData = {}) {\n try {\n // 1. 获取公钥\n const publicKey = await this.getPublicKey()\n\n // 2. 加密密码\n const encryptedPassword = this.encryptPassword(password, publicKey)\n\n // 3. 调用校验接口\n const response = await this.makeRequest(this.options.validateUrl, {\n method: 'POST',\n body: JSON.stringify({\n userName: userName,\n password: encryptedPassword,\n timestamp: Date.now(),\n ...additionalData\n })\n })\n\n return {\n success: response.success,\n message: response.message,\n data: response.data,\n code: response.code\n }\n } catch (error) {\n console.error('密码校验失败:', error)\n return {\n success: false,\n message: error.message,\n code: 'VALIDATION_ERROR'\n }\n }\n }\n\n /**\n * 发送HTTP请求的通用方法\n * @param {string} url 请求地址\n * @param {Object} options 请求选项\n * @returns {Promise<Object>} 响应结果\n */\n async makeRequest(url, options = {}) {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.options.timeout)\n\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...this.options.headers,\n ...options.headers\n },\n signal: controller.signal\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new Error(`HTTP错误: ${response.status} ${response.statusText}`)\n }\n\n return await response.json()\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error.name === 'AbortError') {\n throw new Error('请求超时')\n }\n\n throw error\n }\n }\n\n /**\n * 清除公钥缓存\n */\n clearCache() {\n this.publicKeyCache = null\n this.publicKeyExpiry = null\n }\n\n /**\n * 更新配置\n * @param {Object} newOptions 新的配置选项\n */\n updateOptions(newOptions) {\n this.options = { ...this.options, ...newOptions }\n // 清除缓存,使用新配置重新获取\n this.clearCache()\n }\n}\n\n// 导出类和创建实例的工厂函数\nexport default PasswordValidator\n\n/**\n * 创建密码校验器实例的工厂函数\n * @param {Object} options 配置选项\n * @returns {PasswordValidator} 密码校验器实例\n */\nexport function createPasswordValidator(options) {\n return new PasswordValidator(options)\n}\n\n/**\n * 快速校验密码的便捷函数\n * @param {string} password 密码\n * @param {Object} options 配置选项\n * @param {Object} additionalData 额外数据\n * @returns {Promise<Object>} 校验结果\n */\nexport async function validatePassword(password, options = {}, additionalData = {}) {\n const validator = new PasswordValidator(options)\n // 修复:添加userName参数,可以从additionalData中提取或设为空字符串\n const userName = additionalData.userName || ''\n return await validator.validatePassword(password, userName, additionalData)\n}\n","// 导入滑块验证码组件(使用默认导入)\nimport PopupSliderCaptcha from './slider-captcha.js'\n\n// 导入密码校验器\nimport PasswordValidator, { createPasswordValidator, validatePassword } from './password-validator.js'\n\n// 导出所有模块\nexport { \n PopupSliderCaptcha,\n PasswordValidator,\n createPasswordValidator,\n validatePassword\n}\n\n// 默认导出(向后兼容)\nexport default {\n PopupSliderCaptcha,\n PasswordValidator,\n createPasswordValidator,\n validatePassword\n}\n\n// 全局注册(用于UMD构建)\nif (typeof window !== 'undefined') {\n window.SliderCaptcha = PopupSliderCaptcha\n window.PopupSliderCaptcha = PopupSliderCaptcha\n window.PasswordValidator = PasswordValidator\n window.createPasswordValidator = createPasswordValidator\n window.validatePassword = validatePassword\n}\n"],"names":[],"mappings":"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"}
package/dist/index.js DELETED
@@ -1 +0,0 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jsencrypt")):"function"==typeof define&&define.amd?define(["exports","jsencrypt"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).SliderCaptchaSDK={},t.JSEncrypt)}(this,function(t,e){"use strict";class PopupSliderCaptcha{static DEFAULTS={width:320,height:155,sliderSize:38,maxRetries:3,timeout:3e4,apiUrl:"/api/captcha",verifyUrl:"/api/captcha/verify",throttleDelay:16,clickMaskClose:!1};static CSS_CLASSES={overlay:"slider-captcha-overlay",modal:"slider-captcha-modal",header:"slider-captcha-header",container:"slider-captcha-container",track:"slider-captcha-track",btn:"slider-captcha-btn",hint:"slider-captcha-hint",loading:"slider-captcha-loading",error:"slider-captcha-error"};static getStyles(){return":root{--sc-primary:#409eff;--sc-success:#67c23a;--sc-danger:#f56c6c;--sc-border:#e4e7eb;--sc-bg:linear-gradient(90deg, #f7f9fa 0%, #e8f4fd 100%);--sc-text:#333;--sc-text-light:#999;--sc-shadow:0 4px 20px rgba(0,0,0,.3);--sc-radius:8px;--sc-transition:.3s ease}.slider-captcha-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);z-index:9999;display:none;justify-content:center;align-items:center;opacity:0;transition:opacity var(--sc-transition)}.slider-captcha-overlay.show{opacity:1}.slider-captcha-modal{background:#fff;border-radius:var(--sc-radius);padding:20px;box-shadow:var(--sc-shadow);position:relative;max-width:90vw;max-height:90vh;transform:scale(.8) translateY(-20px);opacity:0;transition:all var(--sc-transition)}.slider-captcha-modal.show{transform:scale(1) translateY(0);opacity:1}.slider-captcha-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px;padding-bottom:10px;border-bottom:1px solid var(--sc-border)}.slider-captcha-container{display:flex;align-items:center;position:relative;border-radius:4px;overflow:hidden;margin-bottom:15px;background:#837a7a;justify-content:center}.slider-captcha-track{width:100%;height:40px;line-height:40px;background:var(--sc-bg);border:1px solid var(--sc-border);border-radius:20px;position:relative;margin-bottom:15px;overflow:hidden}.slider-captcha-btn{width:38px;height:38px;background:#fff;border:1px solid #ccc;border-radius:50%;position:absolute;top:0;left:0;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 4px rgba(0,0,0,.1);transition:all var(--sc-transition);user-select:none;z-index:1}.slider-captcha-loading{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(255,255,255,.6);display:flex;align-items:center;justify-content:center;flex-direction:column;color:#666;font-size:14px;z-index:10;border-radius:4px}.slider-captcha-error{color:var(--sc-danger);font-size:12px;text-align:center;margin-top:10px;display:none}.slider-captcha-title{margin:0;font-size:16px;color:var(--sc-text)}.slider-captcha-close,.slider-captcha-refresh{background:none;border:none;cursor:pointer;color:var(--sc-text-light);padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:all var(--sc-transition);position:relative;font-size:0}.slider-captcha-close::before,.slider-captcha-close::after{content:'';position:absolute;width:16px;height:2px;background-color:var(--sc-text-light);border-radius:1px;transition:all var(--sc-transition)}.slider-captcha-close::before{transform:rotate(45deg)}.slider-captcha-close::after{transform:rotate(-45deg)}.slider-captcha-close:hover{background:#f5f5f5;transform:scale(1.1)}.slider-captcha-close:hover::before,.slider-captcha-close:hover::after{background-color:var(--sc-danger)}.slider-captcha-refresh{margin-left:10px}.slider-captcha-refresh svg{width:20px;height:20px;fill:var(--sc-text-light);transition:all var(--sc-transition)}.slider-captcha-refresh:hover{background:#f5f5f5;transform:scale(1.1)}.slider-captcha-refresh:hover svg{fill:var(--sc-primary);transform:rotate(180deg)}.slider-captcha-floating-time{position:absolute;bottom:-40px;left:50%;transform:translateX(-50%);color:#fff;font-size:12px;white-space:nowrap;opacity:0;pointer-events:none;z-index:10;transition:all var(--sc-transition);background:#fff;padding:2px 15px;border-radius:10px}.slider-captcha-floating-time.show{opacity:1;transform:translateX(-50%) translateY(-45px)}.slider-captcha-floating-time.success{color:var(--sc-success)}.slider-captcha-floating-time.fail{color:var(--sc-danger)}.slider-captcha-bg{width:100%;height:100%;object-fit:cover;display:block}.slider-captcha-piece{position:absolute;top:0;left:0;cursor:pointer;transition:none;z-index:2}.slider-captcha-finger{position:absolute;top:50%;left:10px;transform:translateY(-50%);font-size:20px;animation:fingerSlide 2s ease-in-out infinite;pointer-events:none;z-index:1;opacity:.6}.slider-captcha-hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--sc-text-light);font-size:14px;pointer-events:none;z-index:1;transition:all var(--sc-transition)}.slider-captcha-header-buttons{display:flex;align-items:center}@keyframes fingerSlide{0%{left:10px;opacity:.6}50%{opacity:1}100%{left:calc(50% - 10px);opacity:.6}}"}constructor(t={}){this.options={...PopupSliderCaptcha.DEFAULTS,...t},this.elements={},this.state=this.createInitialState(),this.captchaData=null,this.times=[],this.startTime=null,this.eventListeners=[],this.timers=new Set,this.rafId=null,this.cachedDimensions=null,this.imageCache=new Map,this.throttledHandleMove=this.throttle(t=>this.handleMove(t),this.options.throttleDelay),this.init()}createInitialState(){return{isVisible:!1,isDragging:!1,currentX:0,startX:0,retryCount:0,isLoading:!1}}init(){this.injectStyles(),this.createElements(),this.bindEvents()}injectStyles(){if(document.querySelector("#slider-captcha-styles"))return;const t=document.createElement("style");t.id="slider-captcha-styles",t.textContent=PopupSliderCaptcha.getStyles(),document.head.appendChild(t)}createElements(){const{elements:t,options:e}=this;[["overlay","div",PopupSliderCaptcha.CSS_CLASSES.overlay],["modal","div",PopupSliderCaptcha.CSS_CLASSES.modal],["header","div",PopupSliderCaptcha.CSS_CLASSES.header],["title","h3","slider-captcha-title","安全验证"],["closeBtn","button","slider-captcha-close"],["refreshBtn","button","slider-captcha-refresh"],["container","div",PopupSliderCaptcha.CSS_CLASSES.container],["backgroundImg","img","slider-captcha-bg"],["sliderImg","img","slider-captcha-piece"],["loadingText","div",PopupSliderCaptcha.CSS_CLASSES.loading,"加载中..."],["floatingTime","div","slider-captcha-floating-time"],["track","div",PopupSliderCaptcha.CSS_CLASSES.track],["fingerAnimation","div","slider-captcha-finger","👉"],["btn","div",PopupSliderCaptcha.CSS_CLASSES.btn],["icon","div","","→"],["hint","div",PopupSliderCaptcha.CSS_CLASSES.hint,"向右滑动完成验证"],["error","div",PopupSliderCaptcha.CSS_CLASSES.error]].forEach(([e,i,s,a])=>{t[e]=this.createElement(i,s,a)}),t.container.style.cssText=`width:${e.width}px;height:${e.height}px`,t.refreshBtn.innerHTML='<svg viewBox="0 0 24 24"><path d="M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z"/></svg>',this.assembleDOM(),this.setInitialState()}createElement(t,e="",i=""){const s=document.createElement(t);return e&&(s.className=e),i&&(s.textContent=i),s}assembleDOM(){const{elements:t}=this,e=this.createElement("div","slider-captcha-header-buttons");e.append(t.refreshBtn,t.closeBtn),t.header.append(t.title,e),t.container.append(t.backgroundImg,t.sliderImg,t.loadingText,t.floatingTime),t.btn.appendChild(t.icon),t.track.append(t.fingerAnimation,t.btn,t.hint),t.modal.append(t.header,t.container,t.track,t.error),t.overlay.appendChild(t.modal),document.body.appendChild(t.overlay)}setInitialState(){Object.assign(this.elements.container.style,{display:"none"}),Object.assign(this.elements.track.style,{display:"none"})}bindEvents(){const{elements:t}=this;this.addEventListener(t.closeBtn,"click",()=>this.hide()),this.addEventListener(t.refreshBtn,"click",()=>this.refresh()),this.addEventListener(t.overlay,"click",e=>{e.target===t.overlay&&this.options.clickMaskClose&&this.hide()}),this.addEventListener(document,"keydown",t=>{"Escape"===t.key&&this.state.isVisible&&this.hide()}),this.addEventListener(document,"visibilitychange",()=>this.handleVisibilityChange()),this.bindSliderEvents()}bindSliderEvents(){const{elements:t}=this,e={start:t=>this.handleStart(t),move:this.throttledHandleMove,end:()=>this.handleEnd()};this.addEventListener(t.btn,"mousedown",e.start),this.addEventListener(t.btn,"touchstart",e.start),this.addEventListener(t.sliderImg,"mousedown",e.start),this.addEventListener(t.sliderImg,"touchstart",e.start),this.addEventListener(document,"mousemove",e.move,{passive:!1}),this.addEventListener(document,"touchmove",e.move,{passive:!1}),this.addEventListener(document,"mouseup",e.end),this.addEventListener(document,"touchend",e.end)}addEventListener(t,e,i,s={}){t&&"function"==typeof i&&(t.addEventListener(e,i,s),this.eventListeners.push({element:t,event:e,handler:i,options:s}))}removeAllEventListeners(){this.eventListeners.forEach(({element:t,event:e,handler:i,options:s})=>{try{t?.removeEventListener?.(e,i,s)}catch(t){}}),this.eventListeners.length=0}getDimensions(){if(!this.cachedDimensions){const t=this.elements.track.offsetWidth,e=this.elements.btn.offsetWidth;this.cachedDimensions={trackWidth:t,btnWidth:e,maxX:t-e}}return this.cachedDimensions}getPosition(){const{maxX:t}=this.getDimensions(),e=this.state.currentX/t;return Math.round(e*(this.options.width-this.options.sliderSize))}handleStart(t){!this.captchaData||this.state.isDragging||this.state.isLoading||(t.preventDefault(),this.state.isDragging=!0,this.state.startX=this.getClientX(t)-this.state.currentX,this.startTime=this.startTime||Date.now(),this.times=[{time:Date.now(),position:this.getPosition()}],this.setTransition(!1),this.updateUIState("dragging"),this.cachedDimensions=null)}handleMove(t){if(!this.state.isDragging)return;t.preventDefault();const e=this.getClientX(t)-this.state.startX,{maxX:i}=this.getDimensions();this.state.currentX=Math.max(0,Math.min(e,i)),this.times.push({time:Date.now(),position:this.getPosition()}),this.rafId&&cancelAnimationFrame(this.rafId),this.rafId=requestAnimationFrame(()=>this.updateSliderPosition())}handleEnd(){this.state.isDragging&&(this.times.push({time:Date.now(),position:this.getPosition()}),this.state.isDragging=!1,this.rafId&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.verify())}handleVisibilityChange(){const t=document.hidden?"paused":"running";this.elements.fingerAnimation&&(this.elements.fingerAnimation.style.animationPlayState=t)}getClientX(t){return t.type.includes("touch")?t.touches[0].clientX:t.clientX}setTransition(t){const e=t?"all 0.3s ease":"none";requestAnimationFrame(()=>{this.elements.btn.style.transition=e,this.elements.sliderImg.style.transition=e})}updateUIState(t){const{elements:e}=this,i={dragging:()=>{e.hint.style.opacity="0",e.fingerAnimation.style.display="none"},success:()=>{Object.assign(e.btn.style,{background:"var(--sc-success)"}),Object.assign(e.icon.style,{innerHTML:"✓",color:"white"}),e.icon.innerHTML="✓"},fail:()=>{Object.assign(e.btn.style,{background:"var(--sc-danger)"}),Object.assign(e.icon.style,{innerHTML:"✗",color:"white"}),e.icon.innerHTML="✗"},reset:()=>{Object.assign(e.btn.style,{background:"white"}),Object.assign(e.icon.style,{color:"#666"}),e.icon.innerHTML="→",e.fingerAnimation.style.display="block",this.updateHintText("向右滑动完成验证","var(--sc-text-light)")},loading:()=>{e.hint.style.opacity="0",e.fingerAnimation.style.display="none",Object.assign(e.track.style,{pointerEvents:"none",opacity:"0.6"})}};i[t]&&requestAnimationFrame(()=>{i[t](),"loading"!==t&&Object.assign(e.track.style,{pointerEvents:"auto",opacity:"1"})})}updateHintText(t,e){requestAnimationFrame(()=>{Object.assign(this.elements.hint,{textContent:t}),Object.assign(this.elements.hint.style,{color:e,opacity:"1"})})}updateSliderPosition(){const{elements:t,options:e,state:i}=this,{maxX:s}=this.getDimensions(),a=i.currentX/s*(e.width-e.sliderSize),n=i.currentX/s;requestAnimationFrame(()=>{t.btn.style.transform=`translateX(${i.currentX}px)`,t.sliderImg.style.transform=`translateX(${a}px)`,t.fingerAnimation.style.opacity=n>=.8?"0":"0.6"})}show(){this.state.isVisible=!0,this.elements.overlay.style.display="flex",this.elements.overlay.offsetHeight,requestAnimationFrame(()=>{this.elements.overlay.classList.add("show"),this.elements.modal.classList.add("show")}),this.loadCaptcha()}hide(){this.state.isVisible=!1,this.elements.overlay.classList.remove("show"),this.elements.modal.classList.remove("show"),this.safeSetTimeout(()=>{this.elements.overlay.style.display="none",document.body.removeChild(this.elements.overlay),this.reset(),this.options.onClose?.(),this.elements.overlay=null},300)}async loadCaptcha(){try{this.showLoading(),this.startTime=Date.now();const t=new AbortController,e=this.safeSetTimeout(()=>t.abort(),this.options.timeout),i=await fetch(this.options.apiUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({place:2,timestamp:Date.now()}),signal:t.signal});if(this.safeClearTimeout(e),!i.ok)throw new Error(`HTTP ${i.status}`);const s=await i.json();if(!s.data?.canvasSrc||!s.data?.blockSrc)throw new Error("验证码数据格式错误");this.captchaData=s.data,this.showCaptcha(),await this.renderCaptcha()}catch(t){const e="AbortError"===t.name?"请求超时,请重试":`加载验证码失败: ${t.message}`;this.showError(e)}}async renderCaptcha(){return new Promise((t,e)=>{let i=0;const s=()=>2===++i&&(this.hideLoading(),t()),a=()=>e(new Error("图片加载失败"));this.loadImage(this.elements.backgroundImg,this.captchaData.canvasSrc,{width:this.captchaData.canvasWidth,height:this.captchaData.canvasHeight},s,a),this.loadImage(this.elements.sliderImg,this.captchaData.blockSrc,{width:this.captchaData.blockWidth,height:this.captchaData.blockHeight,top:this.captchaData.blockY},s,a)})}loadImage(t,e,i,s,a){if(this.imageCache.has(e)){const a=this.imageCache.get(e);return t.src=a.src,this.applyStyles(t,i),void s()}t.onload=()=>{this.imageCache.set(e,t.cloneNode()),s()},t.onerror=a,t.src=e,this.applyStyles(t,i)}applyStyles(t,e){Object.entries(e).forEach(([e,i])=>{t.style[e]="number"==typeof i?i+"px":i})}showLoading(){this.state.isLoading=!0,this.batchUpdateStyles({container:{display:"block"},loadingText:{display:"flex"},error:{display:"none"}}),this.updateUIState("loading")}hideLoading(){this.state.isLoading=!1,this.batchUpdateStyles({loadingText:{display:"none"}}),this.updateUIState("reset")}showCaptcha(){this.batchUpdateStyles({container:{display:"block"},track:{display:"block"},error:{display:"none"}})}showError(t){this.hideLoading(),this.batchUpdateStyles({error:{display:"block",textContent:t}})}batchUpdateStyles(t){requestAnimationFrame(()=>{Object.entries(t).forEach(([t,e])=>{const i=this.elements[t];i&&Object.entries(e).forEach(([t,e])=>{"textContent"===t?i.textContent=e:i.style[t]=e})})})}async verify(){if(this.captchaData)try{const t=new AbortController,e=this.safeSetTimeout(()=>t.abort(),this.options.timeout),i=await fetch(this.options.verifyUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({loginVo:{nonceStr:this.captchaData.nonceStr,value:this.getPosition()},dragEventList:[...this.times]}),signal:t.signal});if(this.safeClearTimeout(e),!i.ok)throw new Error(`HTTP ${i.status}`);const s=await i.json();"0"===s.code||!0===s.success?this.onVerifySuccess():this.onVerifyFail(s.message||"验证失败,请重试!")}catch(t){const e="AbortError"===t.name?"验证超时,请重试":"网络错误";this.onVerifyFail(e)}else this.onVerifyFail("验证码数据丢失")}onVerifySuccess(){const t=Date.now()-this.startTime,e=`验证成功!耗时:${(t/1e3).toFixed(2)}s`;this.updateUIState("success"),this.showFloatingTime(e,"success"),this.safeSetTimeout(()=>{this.options.onSuccess?.({captchaId:this.captchaData.captchaId,timestamp:Date.now(),duration:t}),this.hide()},2e3)}showFloatingTime(t,e="success"){const{elements:i}=this;i.floatingTime.textContent=t,i.floatingTime.className=`slider-captcha-floating-time ${e}`,this.safeSetTimeout(()=>i.floatingTime.classList.add("show"),100),this.safeSetTimeout(()=>{i.floatingTime.className="slider-captcha-floating-time"},2500)}onVerifyFail(t){this.state.retryCount++,this.updateUIState("fail"),this.showFloatingTime(t,"fail"),this.safeSetTimeout(()=>{this.state.retryCount>=this.options.maxRetries?this.refresh():this.reset()},2500)}reset(){this.clearAllTimers(),Object.assign(this.state,{isDragging:!1,currentX:0,startX:0,isLoading:!1}),this.times=[],this.startTime=null,this.cachedDimensions=null,requestAnimationFrame(()=>{this.setTransition(!0),this.elements.btn.style.transform="translateX(0px)",this.elements.sliderImg.style.transform="translateX(0px)",this.updateUIState("reset"),this.elements.error.style.display="none"})}refresh(){this.reset(),this.state.retryCount=0,this.loadCaptcha()}safeSetTimeout(t,e){const i=setTimeout(()=>{this.timers.delete(i),t()},e);return this.timers.add(i),i}safeClearTimeout(t){t&&(clearTimeout(t),this.timers.delete(t))}clearAllTimers(){this.timers.forEach(t=>{clearTimeout(t),clearInterval(t)}),this.timers.clear(),this.rafId&&(cancelAnimationFrame(this.rafId),this.rafId=null)}cleanupImages(){this.elements.backgroundImg&&(this.elements.backgroundImg.src="",this.elements.backgroundImg.onload=null,this.elements.backgroundImg.onerror=null),this.elements.sliderImg&&(this.elements.sliderImg.src="",this.elements.sliderImg.onload=null,this.elements.sliderImg.onerror=null),this.imageCache.clear()}throttle(t,e){let i=0;return function(...s){const a=Date.now();if(a-i>=e)return i=a,t.apply(this,s)}}debounce(t,e){let i;return function(...s){clearTimeout(i),i=setTimeout(()=>t.apply(this,s),e)}}destroy(){document.body.style.userSelect="",document.body.style.cursor="",this.clearAllTimers(),this.removeAllEventListeners(),this.cleanupImages(),this.elements.overlay?.parentNode&&this.elements.overlay.parentNode.removeChild(this.elements.overlay);const t=document.getElementById("slider-captcha-styles");t&&t.remove(),Object.keys(this).forEach(t=>{"constructor"!==t&&(this[t]=null)})}static create(t){return new PopupSliderCaptcha(t)}static show(t){const e=new PopupSliderCaptcha(t);return e.show(),e}}"undefined"!=typeof module&&module.exports?(module.exports=PopupSliderCaptcha,module.exports.default=PopupSliderCaptcha):"function"==typeof define&&define.amd?define([],()=>PopupSliderCaptcha):"undefined"!=typeof window&&(window.PopupSliderCaptcha=PopupSliderCaptcha,window.SliderCaptcha=PopupSliderCaptcha);class PasswordValidator{constructor(t={}){this.options={publicKeyUrl:t.publicKeyUrl||"/microservice/strongPassword/getPublicKey",validateUrl:t.validateUrl||"/microservice/strongPassword/checkPassword",timeout:t.timeout||1e4,headers:t.headers||{},...t},this.publicKeyCache=null,this.publicKeyExpiry=null}async getPublicKey(){if(this.publicKeyCache&&this.publicKeyExpiry&&Date.now()<this.publicKeyExpiry)return this.publicKeyCache;try{const t=await this.makeRequest(this.options.publicKeyUrl,{method:"GET"});if("0"!==t.code)throw new Error("获取公钥失败:"+(t.message||"未知错误"));return this.publicKeyCache=t.data,this.publicKeyExpiry=Date.now()+3e5,this.publicKeyCache}catch(t){throw new Error("获取公钥失败: "+t.message)}}encryptPassword(t,i){try{if(!e)throw new Error("JSEncrypt库未正确加载");const s=new e;s.setPublicKey(i);const a=s.encrypt(t);if(!a)throw new Error("密码加密失败");return a}catch(t){throw new Error("密码加密失败: "+t.message)}}async validatePassword(t,e,i={}){try{const s=await this.getPublicKey(),a=this.encryptPassword(t,s),n=await this.makeRequest(this.options.validateUrl,{method:"POST",body:JSON.stringify({userName:e,password:a,timestamp:Date.now(),...i})});return{success:n.success,message:n.message,data:n.data,code:n.code}}catch(t){return{success:!1,message:t.message,code:"VALIDATION_ERROR"}}}async makeRequest(t,e={}){const i=new AbortController,s=setTimeout(()=>i.abort(),this.options.timeout);try{const a=await fetch(t,{...e,headers:{"Content-Type":"application/json",...this.options.headers,...e.headers},signal:i.signal});if(clearTimeout(s),!a.ok)throw new Error(`HTTP错误: ${a.status} ${a.statusText}`);return await a.json()}catch(t){if(clearTimeout(s),"AbortError"===t.name)throw new Error("请求超时");throw t}}clearCache(){this.publicKeyCache=null,this.publicKeyExpiry=null}updateOptions(t){this.options={...this.options,...t},this.clearCache()}}function i(t){return new PasswordValidator(t)}async function s(t,e={},i={}){const s=new PasswordValidator(e),a=i.userName||"";return await s.validatePassword(t,a,i)}var a={PopupSliderCaptcha:PopupSliderCaptcha,PasswordValidator:PasswordValidator,createPasswordValidator:i,validatePassword:s};"undefined"!=typeof window&&(window.SliderCaptcha=PopupSliderCaptcha,window.PopupSliderCaptcha=PopupSliderCaptcha,window.PasswordValidator=PasswordValidator,window.createPasswordValidator=i,window.validatePassword=s),t.PasswordValidator=PasswordValidator,t.PopupSliderCaptcha=PopupSliderCaptcha,t.createPasswordValidator=i,t.default=a,t.validatePassword=s,Object.defineProperty(t,"__esModule",{value:!0})});
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../src/slider-captcha.js","../src/password-validator.js","../src/index.js"],"sourcesContent":["/**\n * 纯JavaScript弹窗滑块验证码组件\n */\nclass PopupSliderCaptcha {\n static DEFAULTS = {\n width: 320,\n height: 155,\n sliderSize: 38,\n maxRetries: 3,\n timeout: 30000,\n apiUrl: \"/api/captcha\",\n verifyUrl: \"/api/captcha/verify\",\n throttleDelay: 16,\n clickMaskClose: false\n }\n\n static CSS_CLASSES = {\n overlay: \"slider-captcha-overlay\",\n modal: \"slider-captcha-modal\",\n header: \"slider-captcha-header\",\n container: \"slider-captcha-container\",\n track: \"slider-captcha-track\",\n btn: \"slider-captcha-btn\",\n hint: \"slider-captcha-hint\",\n loading: \"slider-captcha-loading\",\n error: \"slider-captcha-error\"\n }\n\n // 优化:提取CSS样式为独立方法,减少主体代码长度\n static getStyles() {\n return `:root{--sc-primary:#409eff;--sc-success:#67c23a;--sc-danger:#f56c6c;--sc-border:#e4e7eb;--sc-bg:linear-gradient(90deg, #f7f9fa 0%, #e8f4fd 100%);--sc-text:#333;--sc-text-light:#999;--sc-shadow:0 4px 20px rgba(0,0,0,.3);--sc-radius:8px;--sc-transition:.3s ease}.slider-captcha-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);z-index:9999;display:none;justify-content:center;align-items:center;opacity:0;transition:opacity var(--sc-transition)}.slider-captcha-overlay.show{opacity:1}.slider-captcha-modal{background:#fff;border-radius:var(--sc-radius);padding:20px;box-shadow:var(--sc-shadow);position:relative;max-width:90vw;max-height:90vh;transform:scale(.8) translateY(-20px);opacity:0;transition:all var(--sc-transition)}.slider-captcha-modal.show{transform:scale(1) translateY(0);opacity:1}.slider-captcha-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px;padding-bottom:10px;border-bottom:1px solid var(--sc-border)}.slider-captcha-container{display:flex;align-items:center;position:relative;border-radius:4px;overflow:hidden;margin-bottom:15px;background:#837a7a;justify-content:center}.slider-captcha-track{width:100%;height:40px;line-height:40px;background:var(--sc-bg);border:1px solid var(--sc-border);border-radius:20px;position:relative;margin-bottom:15px;overflow:hidden}.slider-captcha-btn{width:38px;height:38px;background:#fff;border:1px solid #ccc;border-radius:50%;position:absolute;top:0;left:0;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 4px rgba(0,0,0,.1);transition:all var(--sc-transition);user-select:none;z-index:1}.slider-captcha-loading{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(255,255,255,.6);display:flex;align-items:center;justify-content:center;flex-direction:column;color:#666;font-size:14px;z-index:10;border-radius:4px}.slider-captcha-error{color:var(--sc-danger);font-size:12px;text-align:center;margin-top:10px;display:none}.slider-captcha-title{margin:0;font-size:16px;color:var(--sc-text)}.slider-captcha-close,.slider-captcha-refresh{background:none;border:none;cursor:pointer;color:var(--sc-text-light);padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:all var(--sc-transition);position:relative;font-size:0}.slider-captcha-close::before,.slider-captcha-close::after{content:'';position:absolute;width:16px;height:2px;background-color:var(--sc-text-light);border-radius:1px;transition:all var(--sc-transition)}.slider-captcha-close::before{transform:rotate(45deg)}.slider-captcha-close::after{transform:rotate(-45deg)}.slider-captcha-close:hover{background:#f5f5f5;transform:scale(1.1)}.slider-captcha-close:hover::before,.slider-captcha-close:hover::after{background-color:var(--sc-danger)}.slider-captcha-refresh{margin-left:10px}.slider-captcha-refresh svg{width:20px;height:20px;fill:var(--sc-text-light);transition:all var(--sc-transition)}.slider-captcha-refresh:hover{background:#f5f5f5;transform:scale(1.1)}.slider-captcha-refresh:hover svg{fill:var(--sc-primary);transform:rotate(180deg)}.slider-captcha-floating-time{position:absolute;bottom:-40px;left:50%;transform:translateX(-50%);color:#fff;font-size:12px;white-space:nowrap;opacity:0;pointer-events:none;z-index:10;transition:all var(--sc-transition);background:#fff;padding:2px 15px;border-radius:10px}.slider-captcha-floating-time.show{opacity:1;transform:translateX(-50%) translateY(-45px)}.slider-captcha-floating-time.success{color:var(--sc-success)}.slider-captcha-floating-time.fail{color:var(--sc-danger)}.slider-captcha-bg{width:100%;height:100%;object-fit:cover;display:block}.slider-captcha-piece{position:absolute;top:0;left:0;cursor:pointer;transition:none;z-index:2}.slider-captcha-finger{position:absolute;top:50%;left:10px;transform:translateY(-50%);font-size:20px;animation:fingerSlide 2s ease-in-out infinite;pointer-events:none;z-index:1;opacity:.6}.slider-captcha-hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--sc-text-light);font-size:14px;pointer-events:none;z-index:1;transition:all var(--sc-transition)}.slider-captcha-header-buttons{display:flex;align-items:center}@keyframes fingerSlide{0%{left:10px;opacity:.6}50%{opacity:1}100%{left:calc(50% - 10px);opacity:.6}}`\n }\n\n constructor(options = {}) {\n this.options = { ...PopupSliderCaptcha.DEFAULTS, ...options }\n this.elements = {}\n this.state = this.createInitialState()\n this.captchaData = null\n this.times = []\n this.startTime = null\n this.eventListeners = []\n this.timers = new Set()\n this.rafId = null\n this.cachedDimensions = null\n this.imageCache = new Map()\n\n // 优化:使用箭头函数绑定this,避免重复bind调用\n this.throttledHandleMove = this.throttle((e) => this.handleMove(e), this.options.throttleDelay)\n\n this.init()\n }\n\n // 优化:提取初始状态创建为独立方法\n createInitialState() {\n return {\n isVisible: false,\n isDragging: false,\n currentX: 0,\n startX: 0,\n retryCount: 0,\n isLoading: false\n }\n }\n\n init() {\n this.injectStyles()\n this.createElements()\n this.bindEvents()\n }\n\n injectStyles() {\n if (document.querySelector(\"#slider-captcha-styles\")) return\n\n const style = document.createElement(\"style\")\n style.id = \"slider-captcha-styles\"\n style.textContent = PopupSliderCaptcha.getStyles()\n document.head.appendChild(style)\n }\n\n // 优化:简化元素创建逻辑\n createElements() {\n const { elements, options } = this\n\n // 批量创建元素配置\n const elementConfigs = [\n ['overlay', 'div', PopupSliderCaptcha.CSS_CLASSES.overlay],\n ['modal', 'div', PopupSliderCaptcha.CSS_CLASSES.modal],\n ['header', 'div', PopupSliderCaptcha.CSS_CLASSES.header],\n ['title', 'h3', 'slider-captcha-title', '安全验证'],\n ['closeBtn', 'button', 'slider-captcha-close'],\n ['refreshBtn', 'button', 'slider-captcha-refresh'],\n ['container', 'div', PopupSliderCaptcha.CSS_CLASSES.container],\n ['backgroundImg', 'img', 'slider-captcha-bg'],\n ['sliderImg', 'img', 'slider-captcha-piece'],\n ['loadingText', 'div', PopupSliderCaptcha.CSS_CLASSES.loading, '加载中...'],\n ['floatingTime', 'div', 'slider-captcha-floating-time'],\n ['track', 'div', PopupSliderCaptcha.CSS_CLASSES.track],\n ['fingerAnimation', 'div', 'slider-captcha-finger', '👉'],\n ['btn', 'div', PopupSliderCaptcha.CSS_CLASSES.btn],\n ['icon', 'div', '', '→'],\n ['hint', 'div', PopupSliderCaptcha.CSS_CLASSES.hint, '向右滑动完成验证'],\n ['error', 'div', PopupSliderCaptcha.CSS_CLASSES.error]\n ]\n\n // 批量创建元素\n elementConfigs.forEach(([key, tag, className, textContent]) => {\n elements[key] = this.createElement(tag, className, textContent)\n })\n\n // 设置容器尺寸\n elements.container.style.cssText = `width:${options.width}px;height:${options.height}px`\n\n // 添加刷新按钮图标\n elements.refreshBtn.innerHTML = `<svg viewBox=\"0 0 24 24\"><path d=\"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z\"/></svg>`\n\n this.assembleDOM()\n this.setInitialState()\n }\n\n createElement(tag, className = \"\", textContent = \"\") {\n const element = document.createElement(tag)\n if (className) element.className = className\n if (textContent) element.textContent = textContent\n return element\n }\n\n // 优化:简化DOM组装逻辑\n assembleDOM() {\n const { elements } = this\n\n // 组装头部\n const headerButtons = this.createElement(\"div\", \"slider-captcha-header-buttons\")\n headerButtons.append(elements.refreshBtn, elements.closeBtn)\n elements.header.append(elements.title, headerButtons)\n\n // 组装验证码容器\n elements.container.append(\n elements.backgroundImg,\n elements.sliderImg,\n elements.loadingText,\n elements.floatingTime\n )\n\n // 组装滑块轨道\n elements.btn.appendChild(elements.icon)\n elements.track.append(\n elements.fingerAnimation,\n elements.btn,\n elements.hint\n )\n\n // 组装模态框\n elements.modal.append(\n elements.header,\n elements.container,\n elements.track,\n elements.error\n )\n\n // 组装到覆盖层\n elements.overlay.appendChild(elements.modal)\n document.body.appendChild(elements.overlay)\n }\n\n setInitialState() {\n // 批量设置初始状态\n Object.assign(this.elements.container.style, { display: \"none\" })\n Object.assign(this.elements.track.style, { display: \"none\" })\n }\n\n // 优化:简化事件绑定\n bindEvents() {\n const { elements } = this\n\n // 基础事件\n this.addEventListener(elements.closeBtn, \"click\", () => this.hide())\n this.addEventListener(elements.refreshBtn, \"click\", () => this.refresh())\n this.addEventListener(elements.overlay, \"click\", (e) => {\n if (e.target === elements.overlay && this.options.clickMaskClose) this.hide()\n })\n this.addEventListener(document, \"keydown\", (e) => {\n if (e.key === \"Escape\" && this.state.isVisible) this.hide()\n })\n this.addEventListener(document, \"visibilitychange\", () => this.handleVisibilityChange())\n\n this.bindSliderEvents()\n }\n\n bindSliderEvents() {\n const { elements } = this\n const handlers = {\n start: (e) => this.handleStart(e),\n move: this.throttledHandleMove,\n end: () => this.handleEnd()\n }\n\n // 滑块事件\n this.addEventListener(elements.btn, \"mousedown\", handlers.start)\n this.addEventListener(elements.btn, \"touchstart\", handlers.start)\n this.addEventListener(elements.sliderImg, \"mousedown\", handlers.start)\n this.addEventListener(elements.sliderImg, \"touchstart\", handlers.start)\n this.addEventListener(document, \"mousemove\", handlers.move, { passive: false })\n this.addEventListener(document, \"touchmove\", handlers.move, { passive: false })\n this.addEventListener(document, \"mouseup\", handlers.end)\n this.addEventListener(document, \"touchend\", handlers.end)\n }\n\n // 优化:改进事件管理\n addEventListener(element, event, handler, options = {}) {\n if (!element || typeof handler !== 'function') return\n\n element.addEventListener(event, handler, options)\n this.eventListeners.push({ element, event, handler, options })\n }\n\n removeAllEventListeners() {\n this.eventListeners.forEach(({ element, event, handler, options }) => {\n try {\n element?.removeEventListener?.(event, handler, options)\n } catch (error) {\n console.warn('Failed to remove event listener:', error)\n }\n })\n this.eventListeners.length = 0\n }\n\n // 优化:缓存尺寸计算\n getDimensions() {\n if (!this.cachedDimensions) {\n const trackWidth = this.elements.track.offsetWidth\n const btnWidth = this.elements.btn.offsetWidth\n this.cachedDimensions = {\n trackWidth,\n btnWidth,\n maxX: trackWidth - btnWidth\n }\n }\n return this.cachedDimensions\n }\n\n getPosition() {\n const { maxX } = this.getDimensions()\n const percentage = this.state.currentX / maxX\n return Math.round(percentage * (this.options.width - this.options.sliderSize))\n }\n\n // 优化:简化拖拽处理\n handleStart(e) {\n if (!this.captchaData || this.state.isDragging || this.state.isLoading) return\n\n e.preventDefault()\n this.state.isDragging = true\n this.state.startX = this.getClientX(e) - this.state.currentX\n this.startTime = this.startTime || Date.now()\n this.times = [{ time: Date.now(), position: this.getPosition() }]\n\n this.setTransition(false)\n this.updateUIState(\"dragging\")\n this.cachedDimensions = null // 清除缓存\n }\n\n handleMove(e) {\n if (!this.state.isDragging) return\n e.preventDefault()\n\n const clientX = this.getClientX(e)\n const deltaX = clientX - this.state.startX\n const { maxX } = this.getDimensions()\n\n this.state.currentX = Math.max(0, Math.min(deltaX, maxX))\n this.times.push({ time: Date.now(), position: this.getPosition() })\n\n // 优化:使用RAF批量更新\n this.rafId && cancelAnimationFrame(this.rafId)\n this.rafId = requestAnimationFrame(() => this.updateSliderPosition())\n }\n\n handleEnd() {\n if (!this.state.isDragging) return\n\n this.times.push({ time: Date.now(), position: this.getPosition() })\n this.state.isDragging = false\n\n if (this.rafId) {\n cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n\n this.verify()\n }\n\n handleVisibilityChange() {\n const animationState = document.hidden ? 'paused' : 'running'\n if (this.elements.fingerAnimation) {\n this.elements.fingerAnimation.style.animationPlayState = animationState\n }\n }\n\n getClientX(e) {\n return e.type.includes(\"touch\") ? e.touches[0].clientX : e.clientX\n }\n\n setTransition(enabled) {\n const transition = enabled ? \"all 0.3s ease\" : \"none\"\n requestAnimationFrame(() => {\n this.elements.btn.style.transition = transition\n this.elements.sliderImg.style.transition = transition\n })\n }\n\n // 优化:简化UI状态更新\n updateUIState(state) {\n const { elements } = this\n const updates = {\n dragging: () => {\n elements.hint.style.opacity = \"0\"\n elements.fingerAnimation.style.display = \"none\"\n },\n success: () => {\n Object.assign(elements.btn.style, { background: \"var(--sc-success)\" })\n Object.assign(elements.icon.style, { innerHTML: \"✓\", color: \"white\" })\n elements.icon.innerHTML = \"✓\"\n },\n fail: () => {\n Object.assign(elements.btn.style, { background: \"var(--sc-danger)\" })\n Object.assign(elements.icon.style, { innerHTML: \"✗\", color: \"white\" })\n elements.icon.innerHTML = \"✗\"\n },\n reset: () => {\n Object.assign(elements.btn.style, { background: \"white\" })\n Object.assign(elements.icon.style, { color: \"#666\" })\n elements.icon.innerHTML = \"→\"\n elements.fingerAnimation.style.display = \"block\"\n this.updateHintText(\"向右滑动完成验证\", \"var(--sc-text-light)\")\n },\n loading: () => {\n elements.hint.style.opacity = \"0\"\n elements.fingerAnimation.style.display = \"none\"\n Object.assign(elements.track.style, { pointerEvents: \"none\", opacity: \"0.6\" })\n }\n }\n\n if (updates[state]) {\n requestAnimationFrame(() => {\n updates[state]()\n if (state !== \"loading\") {\n Object.assign(elements.track.style, { pointerEvents: \"auto\", opacity: \"1\" })\n }\n })\n }\n }\n\n updateHintText(text, color) {\n requestAnimationFrame(() => {\n Object.assign(this.elements.hint, { textContent: text })\n Object.assign(this.elements.hint.style, { color, opacity: \"1\" })\n })\n }\n\n updateSliderPosition() {\n const { elements, options, state } = this\n const { maxX } = this.getDimensions()\n const pieceX = (state.currentX / maxX) * (options.width - options.sliderSize)\n const progress = state.currentX / maxX\n\n requestAnimationFrame(() => {\n elements.btn.style.transform = `translateX(${state.currentX}px)`\n elements.sliderImg.style.transform = `translateX(${pieceX}px)`\n elements.fingerAnimation.style.opacity = progress >= 0.8 ? \"0\" : \"0.6\"\n })\n }\n\n // 优化:简化显示/隐藏逻辑\n show() {\n this.state.isVisible = true\n this.elements.overlay.style.display = \"flex\"\n this.elements.overlay.offsetHeight // 强制重绘\n\n requestAnimationFrame(() => {\n this.elements.overlay.classList.add(\"show\")\n this.elements.modal.classList.add(\"show\")\n })\n\n this.loadCaptcha()\n }\n\n hide() {\n this.state.isVisible = false\n this.elements.overlay.classList.remove(\"show\")\n this.elements.modal.classList.remove(\"show\")\n\n this.safeSetTimeout(() => {\n this.elements.overlay.style.display = \"none\"\n document.body.removeChild(this.elements.overlay)\n this.reset()\n this.options.onClose?.()\n this.elements.overlay = null\n }, 300)\n }\n\n // 优化:简化加载逻辑\n async loadCaptcha() {\n try {\n this.showLoading()\n this.startTime = Date.now()\n\n const controller = new AbortController()\n const timeoutId = this.safeSetTimeout(() => controller.abort(), this.options.timeout)\n\n const response = await fetch(this.options.apiUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ place: 2, timestamp: Date.now() }),\n signal: controller.signal\n })\n\n this.safeClearTimeout(timeoutId)\n\n if (!response.ok) throw new Error(`HTTP ${response.status}`)\n const data = await response.json()\n\n if (data.data?.canvasSrc && data.data?.blockSrc) {\n this.captchaData = data.data\n this.showCaptcha()\n await this.renderCaptcha()\n } else {\n throw new Error(\"验证码数据格式错误\")\n }\n } catch (error) {\n const message = error.name === 'AbortError' ? \"请求超时,请重试\" : `加载验证码失败: ${error.message}`\n this.showError(message)\n }\n }\n\n async renderCaptcha() {\n return new Promise((resolve, reject) => {\n let loadedCount = 0\n const onLoad = () => ++loadedCount === 2 && (this.hideLoading(), resolve())\n const onError = () => reject(new Error(\"图片加载失败\"))\n\n this.loadImage(this.elements.backgroundImg, this.captchaData.canvasSrc, {\n width: this.captchaData.canvasWidth,\n height: this.captchaData.canvasHeight\n }, onLoad, onError)\n\n this.loadImage(this.elements.sliderImg, this.captchaData.blockSrc, {\n width: this.captchaData.blockWidth,\n height: this.captchaData.blockHeight,\n top: this.captchaData.blockY\n }, onLoad, onError)\n })\n }\n\n loadImage(imgElement, src, styles, onLoad, onError) {\n // 检查缓存\n if (this.imageCache.has(src)) {\n const cachedImg = this.imageCache.get(src)\n imgElement.src = cachedImg.src\n this.applyStyles(imgElement, styles)\n onLoad()\n return\n }\n\n imgElement.onload = () => {\n this.imageCache.set(src, imgElement.cloneNode())\n onLoad()\n }\n imgElement.onerror = onError\n imgElement.src = src\n this.applyStyles(imgElement, styles)\n }\n\n // 优化:提取样式应用逻辑\n applyStyles(element, styles) {\n Object.entries(styles).forEach(([key, value]) => {\n element.style[key] = typeof value === \"number\" ? value + \"px\" : value\n })\n }\n\n // 优化:简化状态显示方法\n showLoading() {\n this.state.isLoading = true\n this.batchUpdateStyles({\n container: { display: \"block\" },\n loadingText: { display: \"flex\" },\n error: { display: \"none\" }\n })\n this.updateUIState(\"loading\")\n }\n\n hideLoading() {\n this.state.isLoading = false\n this.batchUpdateStyles({ loadingText: { display: \"none\" } })\n this.updateUIState(\"reset\")\n }\n\n showCaptcha() {\n this.batchUpdateStyles({\n container: { display: \"block\" },\n track: { display: \"block\" },\n error: { display: \"none\" }\n })\n }\n\n showError(message) {\n this.hideLoading()\n this.batchUpdateStyles({\n error: { display: \"block\", textContent: message }\n })\n }\n\n // 优化:批量样式更新\n batchUpdateStyles(updates) {\n requestAnimationFrame(() => {\n Object.entries(updates).forEach(([elementKey, styles]) => {\n const element = this.elements[elementKey]\n if (element) {\n Object.entries(styles).forEach(([prop, value]) => {\n if (prop === 'textContent') {\n element.textContent = value\n } else {\n element.style[prop] = value\n }\n })\n }\n })\n })\n }\n\n async verify() {\n if (!this.captchaData) {\n this.onVerifyFail(\"验证码数据丢失\")\n return\n }\n\n try {\n const controller = new AbortController()\n const timeoutId = this.safeSetTimeout(() => controller.abort(), this.options.timeout)\n\n const response = await fetch(this.options.verifyUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n loginVo: {\n nonceStr: this.captchaData.nonceStr,\n value: this.getPosition()\n },\n dragEventList: [...this.times]\n }),\n signal: controller.signal\n })\n\n this.safeClearTimeout(timeoutId)\n\n if (!response.ok) throw new Error(`HTTP ${response.status}`)\n const data = await response.json()\n\n if (data.code === \"0\" || data.success === true) {\n this.onVerifySuccess()\n } else {\n this.onVerifyFail(data.message || \"验证失败,请重试!\")\n }\n } catch (error) {\n const message = error.name === 'AbortError' ? \"验证超时,请重试\" : \"网络错误\"\n this.onVerifyFail(message)\n }\n }\n\n onVerifySuccess() {\n const duration = Date.now() - this.startTime\n const durationText = `验证成功!耗时:${(duration / 1000).toFixed(2)}s`\n\n this.updateUIState(\"success\")\n this.showFloatingTime(durationText, \"success\")\n\n this.safeSetTimeout(() => {\n this.options.onSuccess?.({\n captchaId: this.captchaData.captchaId,\n timestamp: Date.now(),\n duration\n })\n this.hide()\n }, 2000)\n }\n\n showFloatingTime(text, type = \"success\") {\n const { elements } = this\n elements.floatingTime.textContent = text\n elements.floatingTime.className = `slider-captcha-floating-time ${type}`\n\n this.safeSetTimeout(() => elements.floatingTime.classList.add(\"show\"), 100)\n this.safeSetTimeout(() => {\n elements.floatingTime.className = \"slider-captcha-floating-time\"\n }, 2500) // 优化:延长显示时间,避免被reset清除\n }\n\n onVerifyFail(message) {\n this.state.retryCount++\n this.updateUIState(\"fail\")\n this.showFloatingTime(message, \"fail\")\n\n this.safeSetTimeout(() => {\n if (this.state.retryCount >= this.options.maxRetries) {\n this.refresh()\n } else {\n this.reset()\n }\n }, 2500) // 优化:延长等待时间,确保浮动提示完整显示\n }\n\n reset() {\n this.clearAllTimers()\n\n // 重置状态\n Object.assign(this.state, {\n isDragging: false,\n currentX: 0,\n startX: 0,\n isLoading: false\n })\n\n this.times = []\n this.startTime = null\n this.cachedDimensions = null\n\n // 重置UI\n requestAnimationFrame(() => {\n this.setTransition(true)\n this.elements.btn.style.transform = \"translateX(0px)\"\n this.elements.sliderImg.style.transform = \"translateX(0px)\"\n this.updateUIState(\"reset\")\n this.elements.error.style.display = \"none\"\n })\n }\n\n refresh() {\n this.reset()\n this.state.retryCount = 0\n this.loadCaptcha()\n }\n\n // 安全的定时器管理\n safeSetTimeout(callback, delay) {\n const timerId = setTimeout(() => {\n this.timers.delete(timerId)\n callback()\n }, delay)\n this.timers.add(timerId)\n return timerId\n }\n\n safeClearTimeout(timerId) {\n if (timerId) {\n clearTimeout(timerId)\n this.timers.delete(timerId)\n }\n }\n\n clearAllTimers() {\n this.timers.forEach(timer => {\n clearTimeout(timer)\n clearInterval(timer)\n })\n this.timers.clear()\n\n if (this.rafId) {\n cancelAnimationFrame(this.rafId)\n this.rafId = null\n }\n }\n\n // 清理图片资源\n cleanupImages() {\n if (this.elements.backgroundImg) {\n this.elements.backgroundImg.src = ''\n this.elements.backgroundImg.onload = null\n this.elements.backgroundImg.onerror = null\n }\n if (this.elements.sliderImg) {\n this.elements.sliderImg.src = ''\n this.elements.sliderImg.onload = null\n this.elements.sliderImg.onerror = null\n }\n this.imageCache.clear()\n }\n\n // 工具函数:节流\n throttle(func, delay) {\n let lastCall = 0\n return function (...args) {\n const now = Date.now()\n if (now - lastCall >= delay) {\n lastCall = now\n return func.apply(this, args)\n }\n }\n }\n\n // 工具函数:防抖\n debounce(func, delay) {\n let timeoutId\n return function (...args) {\n clearTimeout(timeoutId)\n timeoutId = setTimeout(() => func.apply(this, args), delay)\n }\n }\n\n destroy() {\n // 恢复body样式\n document.body.style.userSelect = \"\"\n document.body.style.cursor = \"\"\n\n // 清理所有定时器\n this.clearAllTimers()\n\n // 移除所有事件监听器\n this.removeAllEventListeners()\n\n // 清理图片资源\n this.cleanupImages()\n\n // 移除DOM元素\n if (this.elements.overlay?.parentNode) {\n this.elements.overlay.parentNode.removeChild(this.elements.overlay)\n }\n\n // 清理样式表\n const styleElement = document.getElementById('slider-captcha-styles')\n if (styleElement) {\n styleElement.remove()\n }\n\n // 清空所有属性\n Object.keys(this).forEach(key => {\n if (key !== 'constructor') {\n this[key] = null\n }\n })\n }\n\n static create(options) {\n return new PopupSliderCaptcha(options)\n }\n\n static show(options) {\n const instance = new PopupSliderCaptcha(options)\n instance.show()\n return instance\n }\n}\n\n// 模块导出\nif (typeof module !== \"undefined\" && module.exports) {\n module.exports = PopupSliderCaptcha\n module.exports.default = PopupSliderCaptcha\n} else if (typeof define === \"function\" && define.amd) {\n define([], () => PopupSliderCaptcha)\n} else if (typeof window !== \"undefined\") {\n window.PopupSliderCaptcha = PopupSliderCaptcha\n window.SliderCaptcha = PopupSliderCaptcha\n}\n\n// Add ES6 export for modern module systems\nexport default PopupSliderCaptcha\n","import JSEncrypt from 'jsencrypt'\n\n/**\n * 密码校验工具类\n * 提供密码加密和校验功能\n */\nclass PasswordValidator {\n constructor(options = {}) {\n this.options = {\n // 获取公钥的接口地址\n publicKeyUrl: options.publicKeyUrl || '/microservice/strongPassword/getPublicKey',\n // 密码校验接口地址\n validateUrl: options.validateUrl || '/microservice/strongPassword/checkPassword',\n // 请求超时时间\n timeout: options.timeout || 10000,\n // 自定义请求头\n headers: options.headers || {},\n ...options\n }\n\n // 缓存公钥,避免重复请求\n this.publicKeyCache = null\n this.publicKeyExpiry = null\n }\n\n /**\n * 获取公钥\n * @returns {Promise<string>} 公钥字符串\n */\n async getPublicKey() {\n // 检查缓存是否有效(5分钟有效期)\n if (this.publicKeyCache && this.publicKeyExpiry && Date.now() < this.publicKeyExpiry) {\n return this.publicKeyCache\n }\n\n try {\n const response = await this.makeRequest(this.options.publicKeyUrl, {\n method: 'GET'\n })\n\n if (response.code !== '0' ) {\n throw new Error('获取公钥失败:' + (response.message || '未知错误'))\n }\n\n // 缓存公钥,设置5分钟过期时间\n this.publicKeyCache = response.data\n this.publicKeyExpiry = Date.now() + 5 * 60 * 1000\n\n return this.publicKeyCache\n } catch (error) {\n console.error('获取公钥失败:', error)\n throw new Error('获取公钥失败: ' + error.message)\n }\n }\n\n /**\n * 使用RSA公钥加密密码\n * @param {string} password 原始密码\n * @param {string} publicKey 公钥字符串\n * @returns {string} 加密后的密码\n */\n encryptPassword(password, publicKey) {\n try {\n // 使用导入的JSEncrypt进行RSA加密\n if (!JSEncrypt) {\n throw new Error('JSEncrypt库未正确加载')\n }\n\n const encrypt = new JSEncrypt()\n encrypt.setPublicKey(publicKey)\n const encrypted = encrypt.encrypt(password)\n\n if (!encrypted) {\n throw new Error('密码加密失败')\n }\n\n return encrypted\n } catch (error) {\n console.error('密码加密失败:', error)\n throw new Error('密码加密失败: ' + error.message)\n }\n }\n\n /**\n * 校验密码\n * @param {string} password 原始密码\n * @param {string} userName 用户\n * @param {Object} additionalData 额外的校验数据\n * @returns {Promise<Object>} 校验结果\n */\n async validatePassword(password, userName, additionalData = {}) {\n try {\n // 1. 获取公钥\n const publicKey = await this.getPublicKey()\n\n // 2. 加密密码\n const encryptedPassword = this.encryptPassword(password, publicKey)\n\n // 3. 调用校验接口\n const response = await this.makeRequest(this.options.validateUrl, {\n method: 'POST',\n body: JSON.stringify({\n userName: userName,\n password: encryptedPassword,\n timestamp: Date.now(),\n ...additionalData\n })\n })\n\n return {\n success: response.success,\n message: response.message,\n data: response.data,\n code: response.code\n }\n } catch (error) {\n console.error('密码校验失败:', error)\n return {\n success: false,\n message: error.message,\n code: 'VALIDATION_ERROR'\n }\n }\n }\n\n /**\n * 发送HTTP请求的通用方法\n * @param {string} url 请求地址\n * @param {Object} options 请求选项\n * @returns {Promise<Object>} 响应结果\n */\n async makeRequest(url, options = {}) {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.options.timeout)\n\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...this.options.headers,\n ...options.headers\n },\n signal: controller.signal\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new Error(`HTTP错误: ${response.status} ${response.statusText}`)\n }\n\n return await response.json()\n } catch (error) {\n clearTimeout(timeoutId)\n\n if (error.name === 'AbortError') {\n throw new Error('请求超时')\n }\n\n throw error\n }\n }\n\n /**\n * 清除公钥缓存\n */\n clearCache() {\n this.publicKeyCache = null\n this.publicKeyExpiry = null\n }\n\n /**\n * 更新配置\n * @param {Object} newOptions 新的配置选项\n */\n updateOptions(newOptions) {\n this.options = { ...this.options, ...newOptions }\n // 清除缓存,使用新配置重新获取\n this.clearCache()\n }\n}\n\n// 导出类和创建实例的工厂函数\nexport default PasswordValidator\n\n/**\n * 创建密码校验器实例的工厂函数\n * @param {Object} options 配置选项\n * @returns {PasswordValidator} 密码校验器实例\n */\nexport function createPasswordValidator(options) {\n return new PasswordValidator(options)\n}\n\n/**\n * 快速校验密码的便捷函数\n * @param {string} password 密码\n * @param {Object} options 配置选项\n * @param {Object} additionalData 额外数据\n * @returns {Promise<Object>} 校验结果\n */\nexport async function validatePassword(password, options = {}, additionalData = {}) {\n const validator = new PasswordValidator(options)\n // 修复:添加userName参数,可以从additionalData中提取或设为空字符串\n const userName = additionalData.userName || ''\n return await validator.validatePassword(password, userName, additionalData)\n}\n","// 导入滑块验证码组件(使用默认导入)\nimport PopupSliderCaptcha from './slider-captcha.js'\n\n// 导入密码校验器\nimport PasswordValidator, { createPasswordValidator, validatePassword } from './password-validator.js'\n\n// 导出所有模块\nexport { \n PopupSliderCaptcha,\n PasswordValidator,\n createPasswordValidator,\n validatePassword\n}\n\n// 默认导出(向后兼容)\nexport default {\n PopupSliderCaptcha,\n PasswordValidator,\n createPasswordValidator,\n validatePassword\n}\n\n// 全局注册(用于UMD构建)\nif (typeof window !== 'undefined') {\n window.SliderCaptcha = PopupSliderCaptcha\n window.PopupSliderCaptcha = PopupSliderCaptcha\n window.PasswordValidator = PasswordValidator\n window.createPasswordValidator = createPasswordValidator\n window.validatePassword = validatePassword\n}\n"],"names":[],"mappings":"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"}