初始化移动端提交
This commit is contained in:
166
sheep/hooks/useModal.js
Normal file
166
sheep/hooks/useModal.js
Normal file
@@ -0,0 +1,166 @@
|
||||
import $store from '@/sheep/store';
|
||||
import $helper from '@/sheep/helper';
|
||||
import dayjs from 'dayjs';
|
||||
import { ref } from 'vue';
|
||||
import test from '@/sheep/helper/test.js';
|
||||
import AuthUtil from '@/sheep/api/system/auth';
|
||||
import sheep from '@/sheep';
|
||||
|
||||
// 打开授权弹框
|
||||
export function showAuthModal(type = 'accountLogin') {
|
||||
sheep.$router.go('/pages/login/index', { authType: type });
|
||||
}
|
||||
|
||||
// 关闭授权弹框
|
||||
export function closeAuthModal() {
|
||||
sheep.$router.back();
|
||||
}
|
||||
|
||||
// 打开分享弹框
|
||||
export function showShareModal() {
|
||||
$store('modal').$patch((state) => {
|
||||
state.share = true;
|
||||
});
|
||||
}
|
||||
|
||||
// 关闭分享弹框
|
||||
export function closeShareModal() {
|
||||
$store('modal').$patch((state) => {
|
||||
state.share = false;
|
||||
});
|
||||
}
|
||||
|
||||
// 打开快捷菜单
|
||||
export function showMenuTools() {
|
||||
$store('modal').$patch((state) => {
|
||||
state.menu = true;
|
||||
});
|
||||
}
|
||||
|
||||
// 关闭快捷菜单
|
||||
export function closeMenuTools() {
|
||||
$store('modal').$patch((state) => {
|
||||
state.menu = false;
|
||||
});
|
||||
}
|
||||
|
||||
// 发送短信验证码 60秒
|
||||
export function getSmsCode(event, mobile) {
|
||||
const modalStore = $store('modal');
|
||||
const lastSendTimer = modalStore.lastTimer[event];
|
||||
if (typeof lastSendTimer === 'undefined') {
|
||||
$helper.toast('短信发送事件错误');
|
||||
return;
|
||||
}
|
||||
|
||||
const duration = dayjs().unix() - lastSendTimer;
|
||||
const canSend = duration >= 60;
|
||||
if (!canSend) {
|
||||
$helper.toast('请稍后再试');
|
||||
return;
|
||||
}
|
||||
// 只有 mobile 非空时才校验。因为部分场景(修改密码),不需要输入手机
|
||||
if (mobile && !test.mobile(mobile)) {
|
||||
$helper.toast('手机号码格式不正确');
|
||||
return;
|
||||
}
|
||||
|
||||
// 发送验证码 + 更新上次发送验证码时间
|
||||
let scene = -1;
|
||||
switch (event) {
|
||||
case 'resetPassword':
|
||||
scene = 4;
|
||||
break;
|
||||
case 'changePassword':
|
||||
scene = 3;
|
||||
break;
|
||||
case 'changeMobile':
|
||||
scene = 2;
|
||||
break;
|
||||
case 'smsLogin':
|
||||
scene = 1;
|
||||
break;
|
||||
}
|
||||
AuthUtil.sendSmsCode(mobile, scene).then((res) => {
|
||||
if (res.code === 0) {
|
||||
modalStore.$patch((state) => {
|
||||
state.lastTimer[event] = dayjs().unix();
|
||||
});
|
||||
} else {
|
||||
$helper.toast(res.msg || '验证码发送失败,请稍后重试');
|
||||
}
|
||||
}).catch((error) => {
|
||||
$helper.toast('验证码发送失败,请稍后重试');
|
||||
});
|
||||
}
|
||||
|
||||
// 获取短信验证码倒计时 -- 60秒
|
||||
export function getSmsTimer(event, mobile = '') {
|
||||
const modalStore = $store('modal');
|
||||
const lastSendTimer = modalStore.lastTimer[event];
|
||||
|
||||
if (typeof lastSendTimer === 'undefined') {
|
||||
return '获取验证码';
|
||||
}
|
||||
|
||||
const currentTime = dayjs().unix();
|
||||
const duration = currentTime - lastSendTimer;
|
||||
const canSend = duration >= 60;
|
||||
|
||||
if (canSend) {
|
||||
return '获取验证码';
|
||||
}
|
||||
|
||||
const remainingTime = 60 - duration;
|
||||
return `${remainingTime} 秒`;
|
||||
}
|
||||
|
||||
// 创建响应式的短信验证码计时器
|
||||
export function useSmsTimer(event) {
|
||||
const modalStore = $store('modal');
|
||||
const timer = ref('获取验证码');
|
||||
|
||||
const updateTimer = () => {
|
||||
const lastSendTimer = modalStore.lastTimer[event];
|
||||
|
||||
if (typeof lastSendTimer === 'undefined') {
|
||||
timer.value = '获取验证码';
|
||||
return;
|
||||
}
|
||||
|
||||
const currentTime = dayjs().unix();
|
||||
const duration = currentTime - lastSendTimer;
|
||||
const canSend = duration >= 60;
|
||||
|
||||
if (canSend) {
|
||||
timer.value = '获取验证码';
|
||||
} else {
|
||||
const remainingTime = 60 - duration;
|
||||
timer.value = `${remainingTime} 秒`;
|
||||
}
|
||||
};
|
||||
|
||||
// 初始化
|
||||
updateTimer();
|
||||
|
||||
// 每秒更新一次
|
||||
const intervalId = setInterval(updateTimer, 1000);
|
||||
|
||||
// 清理定时器的函数
|
||||
const cleanup = () => {
|
||||
clearInterval(intervalId);
|
||||
};
|
||||
|
||||
return { timer, cleanup };
|
||||
}
|
||||
|
||||
// 记录广告弹框历史
|
||||
export function saveAdvHistory(adv) {
|
||||
const modal = $store('modal');
|
||||
|
||||
modal.$patch((state) => {
|
||||
if (!state.advHistory.includes(adv.imgUrl)) {
|
||||
state.advHistory.push(adv.imgUrl);
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user