mall-uniapp/sheep/hooks/useModal.js

142 lines
3.2 KiB
JavaScript
Raw Normal View History

2022-11-22 07:45:36 +00:00
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/member/auth';
2022-11-22 07:45:36 +00:00
// 打开授权弹框
2023-12-17 11:29:18 +00:00
export function showAuthModal(type = 'smsLogin') {
2022-11-22 07:45:36 +00:00
const modal = $store('modal');
if (modal.auth !== '') {
// 注意:延迟修改,保证下面的 closeAuthModal 先执行掉
2022-11-22 07:45:36 +00:00
setTimeout(() => {
modal.$patch((state) => {
state.auth = type;
});
}, 500);
closeAuthModal();
2022-11-22 07:45:36 +00:00
} else {
modal.$patch((state) => {
state.auth = type;
});
}
}
// 关闭授权弹框
export function closeAuthModal() {
$store('modal').$patch((state) => {
state.auth = '';
});
}
// 打开分享弹框
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秒
2023-12-17 10:57:08 +00:00
export function getSmsCode(event, mobile) {
2022-11-22 07:45:36 +00:00
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;
}
2023-12-17 10:57:08 +00:00
// 只有 mobile 非空时才校验。因为部分场景(修改密码),不需要输入手机
if (mobile && !test.mobile(mobile)) {
2022-11-22 07:45:36 +00:00
$helper.toast('手机号码格式不正确');
return;
}
// 发送验证码 + 更新上次发送验证码时间
2023-12-17 09:06:11 +00:00
let scene = -1;
switch (event) {
case 'resetPassword':
scene = 4;
2023-12-17 10:57:08 +00:00
break;
case 'changePassword':
scene = 3;
break;
2023-12-24 05:16:45 +00:00
case 'changeMobile':
scene = 2;
break;
2023-12-17 11:29:18 +00:00
case 'smsLogin':
scene = 1;
break;
2023-12-17 09:06:11 +00:00
}
AuthUtil.sendSmsCode(mobile, scene).then((res) => {
2023-12-17 09:06:11 +00:00
if (res.code === 0) {
2022-11-22 07:45:36 +00:00
modalStore.$patch((state) => {
state.lastTimer[event] = dayjs().unix();
});
}
});
}
// 获取短信验证码倒计时 -- 60秒
export function getSmsTimer(event, mobile = '') {
const modalStore = $store('modal');
const lastSendTimer = modalStore.lastTimer[event];
if (typeof lastSendTimer === 'undefined') {
$helper.toast('短信发送事件错误');
return;
}
const duration = ref(dayjs().unix() - lastSendTimer - 60);
const canSend = duration.value >= 0;
if (canSend) {
return '获取验证码';
}
if (!canSend) {
setTimeout(() => {
duration.value++;
}, 1000);
return -duration.value.toString() + ' 秒';
}
}
// 记录广告弹框历史
export function saveAdvHistory(adv) {
const modal = $store('modal');
modal.$patch((state) => {
if (!state.advHistory.includes(adv.imgUrl)) {
state.advHistory.push(adv.imgUrl);
2022-11-22 07:45:36 +00:00
}
});
}