From 089bf5d2378b3c4a61d795b2a92bede2c193b771 Mon Sep 17 00:00:00 2001
From: admin <344137771@qq.com>
Date: Tue, 06 Jan 2026 11:22:58 +0800
Subject: [PATCH] 1
---
src/plugins/sms-lock.js | 76 ++++++++++++++++++++++++++++++++++++++
1 files changed, 76 insertions(+), 0 deletions(-)
diff --git a/src/plugins/sms-lock.js b/src/plugins/sms-lock.js
new file mode 100644
index 0000000..13febcf
--- /dev/null
+++ b/src/plugins/sms-lock.js
@@ -0,0 +1,76 @@
+/**
+ * 短信倒计时锁
+ */
+class SmsLock {
+ // 发送倒计时默认60秒
+ time = null
+
+ // 计时器
+ timer = null
+
+ // 倒计时默认60秒
+ lockTime = 60
+
+ // 锁标记名称
+ lockName = ''
+
+ /**
+ * 实例化构造方法
+ *
+ * @param {String} purpose 唯一标识
+ * @param {Number} time
+ */
+ constructor(purpose, lockTime = 60) {
+ this.lockTime = lockTime
+ this.lockName = `SMSLOCK_${purpose}`
+
+ this.init()
+ }
+
+ // 开始计时
+ start(time = null) {
+ this.time = time == null || time >= this.lockTime ? this.lockTime : time
+
+ this.clearInterval()
+
+ this.timer = setInterval(() => {
+ if (this.time == 0) {
+ this.clearInterval()
+ this.time = null
+ localStorage.removeItem(this.lockName)
+ return
+ }
+
+ this.time--
+
+ // 设置本地缓存
+ localStorage.setItem(this.lockName, this.getTime() + this.time)
+ }, 1000)
+ }
+
+ // 页面刷新初始化
+ init() {
+ let result = localStorage.getItem(this.lockName)
+
+ if (result == null) return
+
+ let time = result - this.getTime()
+ if (time > 0) {
+ this.start(time)
+ } else {
+ localStorage.removeItem(this.lockName)
+ }
+ }
+
+ // 获取当前时间
+ getTime() {
+ return Math.floor(new Date().getTime() / 1000)
+ }
+
+ // 清除计时器
+ clearInterval() {
+ clearInterval(this.timer)
+ }
+}
+
+export default SmsLock
--
Gitblit v1.9.3