others_lilishop_ui/im/src/plugins/sms-lock.js

77 lines
1.4 KiB
JavaScript

/**
* 短信倒计时锁
*/
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