feat(projects): 添加常用组件、composables函数

This commit is contained in:
Soybean
2021-12-12 17:28:39 +08:00
parent e755caabf2
commit 230a50a4cf
87 changed files with 5424 additions and 2071 deletions

View File

@ -1,4 +1,5 @@
import { EnumStorageKey } from '@/enum';
import type { UserInfo } from '@/interface';
import { setLocal, getLocal, removeLocal } from '../storage';
/** 设置token */
@ -31,10 +32,28 @@ export function removeRefreshToken() {
removeLocal(EnumStorageKey['refresh-koken']);
}
export function getUserInfo() {}
/** 设置用户信息 */
export function getUserInfo() {
const emptyInfo: UserInfo = {
userId: '',
userName: '',
userPhone: ''
};
const userInfo: UserInfo = getLocal<UserInfo>(EnumStorageKey['user-info']) || emptyInfo;
return userInfo;
}
/** 获取用户信息 */
export function setUserInfo(userInfo: UserInfo) {
setLocal(EnumStorageKey['user-info'], userInfo);
}
/** 去除用户信息 */
export function removeUserInfo() {
removeLocal(EnumStorageKey['user-info']);
}
/** 去除用户相关缓存 */
export function resetAuthStorage() {
export function clearAuthStorage() {
removeToken();
removeRefreshToken();
removeUserInfo();
}

View File

@ -0,0 +1,46 @@
interface BrowserInfo {
type: string;
version: string;
}
/** 获取浏览器版本信息 */
export function getBrowserInfo() {
const explorer = window.navigator.userAgent.toLowerCase();
const info: BrowserInfo = {
type: '',
version: ''
};
function setInfo(data: BrowserInfo) {
Object.assign(info, data);
}
// ie
if (explorer.indexOf('msie') >= 0) {
const [version] = explorer.match(/msie ([\d.]+)/) || [''];
setInfo({ type: 'IE', version });
}
// firefox
if (explorer.indexOf('firefox') >= 0) {
const [version] = explorer.match(/firefox\/([\d.]+)/) || [''];
setInfo({ type: 'Firefox', version });
}
// Chrome
if (explorer.indexOf('chrome') >= 0) {
const [version] = explorer.match(/chrome\/([\d.]+)/) || [''];
setInfo({ type: 'Chrome', version });
if (explorer.indexOf('qqbrowser') >= 0) {
const [version] = explorer.match(/qqbrowser\/([\d.]+)/) || [''];
setInfo({ type: 'QQ浏览器', version });
}
}
// Opera
if (explorer.indexOf('opera') >= 0) {
const [version] = explorer.match(/opera.([\d.]+)/) || [''];
setInfo({ type: 'Opera', version });
}
// Safari
if (explorer.indexOf('Safari') >= 0) {
const [version] = explorer.match(/version\/([\d.]+)/) || [''];
setInfo({ type: 'Safari', version });
}
return info;
}

View File

@ -1,3 +1,6 @@
export * from './typeof';
export * from './color';
export * from './icon';
export * from './browser';
export * from './log';
export * from './number';

5
src/utils/common/log.ts Normal file
View File

@ -0,0 +1,5 @@
/** 打印log */
export function log(data: any) {
// eslint-disable-next-line no-console
console.log(data);
}

View File

@ -0,0 +1,10 @@
/**
* 获取指定整数范围内的随机整数
* @param start - 开始范围
* @param end - 结束范围
*/
export function getRandomInterger(end: number, start: number = 0) {
const range = end - start;
const random = Math.floor(Math.random() * range + start);
return random;
}

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, 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, message: '验证码格式错误', trigger: 'input' }
],
email: [{ pattern: REGEXP_EMAIL, message: '邮箱格式错误', trigger: 'blur' }]
};
/** 是否为空字符串 */
function isBlankString(str: string) {
return str.trim() === '';
}
/** 获取确认密码的表单规则 */
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;
}

View File

@ -2,5 +2,6 @@ export * from './common';
export * from './storage';
export * from './router';
export * from './service';
export * from './form';
export * from './package';
export * from './auth';

View File

@ -19,12 +19,11 @@ function hasErrorMsg(error: RequestServiceError) {
* @param error
*/
export function showErrorMsg(error: RequestServiceError) {
if (!error.msg) return;
if (!NO_ERROR_MSG_CODE.includes(error.code)) {
if (!hasErrorMsg(error)) {
addErrorMsg(error);
if (error.msg) {
window.$message?.error(error.msg, { duration: ERROR_MSG_DURATION });
}
window.$message?.error(error.msg, { duration: ERROR_MSG_DURATION });
setTimeout(() => {
removeErrorMsg(error);
}, ERROR_MSG_DURATION);