feat(projects): 迁移登录完成

This commit is contained in:
Soybean
2022-01-05 01:35:32 +08:00
parent f5a36a05cb
commit b93b80cb4b
54 changed files with 1679 additions and 260 deletions

View File

@ -36,7 +36,8 @@ export function getUserInfo() {
const emptyInfo: Auth.UserInfo = {
userId: '',
userName: '',
userPhone: ''
userPhone: '',
userRole: 'visitor'
};
const userInfo: Auth.UserInfo = getLocal<Auth.UserInfo>(EnumStorageKey['user-info']) || emptyInfo;
return userInfo;

View File

@ -1,4 +1,5 @@
export * from './typeof';
export * from './console';
export * from './color';
export * from './number';
export * from './design-pattern';

View File

@ -0,0 +1,23 @@
/**
* 根据数字获取对应的汉字
* @param num - 数字(0-10)
*/
export function getHanByNumber(num: number) {
const HAN_STR = '零一二三四五六七八九十';
return HAN_STR.charAt(num);
}
/**
* 将总秒数转换成 分:秒
* @param seconds - 秒
*/
export function transformToTimeCountDown(seconds: number) {
const SECONDS_A_MINUTE = 60;
function fillZero(num: number) {
return num.toString().padStart(2, '0');
}
const minuteNum = Math.floor(seconds / SECONDS_A_MINUTE);
const minute = fillZero(minuteNum);
const second = fillZero(seconds - minuteNum * SECONDS_A_MINUTE);
return `${minute}: ${second}`;
}

1
src/utils/form/index.ts Normal file
View File

@ -0,0 +1 @@
export * from './rule';

73
src/utils/form/rule.ts Normal file
View File

@ -0,0 +1,73 @@
import { Ref } from 'vue';
import type { FormItemRule } from 'naive-ui';
import { REGEXP_PHONE, REGEXP_PWD, REGEXP_CODE_SIX, REGEXP_EMAIL } from '@/config';
/** 表单规则 */
interface CustomFormRules {
/** 手机号码 */
phone: FormItemRule[];
/** 密码 */
pwd: FormItemRule[];
/** 验证码 */
code: FormItemRule[];
/** 邮箱 */
email: FormItemRule[];
}
/** 表单规则 */
export const formRules: CustomFormRules = {
phone: [
{ required: true, message: '请输入手机号码' },
{ pattern: REGEXP_PHONE, message: '手机号码格式错误', trigger: 'input' }
],
pwd: [
{ required: true, message: '请输入密码' },
{ pattern: REGEXP_PWD, message: '密码为8-18位数字/字符/符号至少2种组合', trigger: 'input' }
],
code: [
{ required: true, message: '请输入验证码' },
{ pattern: REGEXP_CODE_SIX, message: '验证码格式错误', trigger: 'input' }
],
email: [{ pattern: REGEXP_EMAIL, message: '邮箱格式错误', trigger: 'blur' }]
};
/** 获取确认密码的表单规则 */
export function getConfirmPwdRule(pwd: Ref<string>) {
const confirmPwdRule: FormItemRule[] = [
{ required: true, message: '请输入确认密码' },
{
validator: (rule, value) => {
if (!isBlankString(value) && value !== pwd.value) {
return Promise.reject(rule.message);
}
return Promise.resolve();
},
message: '输入的值与密码不一致',
trigger: 'input'
}
];
return confirmPwdRule;
}
/** 获取图片验证码的表单规则 */
export function getImgCodeRule(imgCode: Ref<string>) {
const imgCodeRule: FormItemRule[] = [
{ required: true, message: '请输入验证码' },
{
validator: (rule, value) => {
if (!isBlankString(value) && value !== imgCode.value) {
return Promise.reject(rule.message);
}
return Promise.resolve();
},
message: '验证码不正确',
trigger: 'blur'
}
];
return imgCodeRule;
}
/** 是否为空字符串 */
function isBlankString(str: string) {
return str.trim() === '';
}

View File

@ -3,3 +3,4 @@ export * from './storage';
export * from './service';
export * from './auth';
export * from './router';
export * from './form';

View File

@ -40,12 +40,18 @@ export function transformAuthRouteToVueRoute(item: AuthRoute.Route) {
consoleError('路由组件解析失败: ', item);
}
}
if (hasProps(item) && !isSingleRoute(item)) {
(itemRoute as any).props = item.props;
}
if (isSingleRoute(item)) {
itemRoute.children = [
{
path: '',
name: item.name,
component: getViewComponent(item.name)
component: getViewComponent(item.name),
props: hasProps(item) ? item.props : undefined
}
];
} else if (hasChildren(item)) {
@ -67,6 +73,10 @@ function hasChildren(item: AuthRoute.Route) {
return Boolean(item.children && item.children.length);
}
function hasProps(item: AuthRoute.Route) {
return Boolean(item.props);
}
function isSingleRoute(item: AuthRoute.Route) {
return Boolean(item.meta.single);
}