mirror of
https://github.com/m-xlsea/ruoyi-plus-soybean.git
synced 2025-09-24 07:49:47 +08:00
feat(projects): 添加常用组件、composables函数
This commit is contained in:
@ -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();
|
||||
}
|
||||
|
46
src/utils/common/browser.ts
Normal file
46
src/utils/common/browser.ts
Normal 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;
|
||||
}
|
@ -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
5
src/utils/common/log.ts
Normal file
@ -0,0 +1,5 @@
|
||||
/** 打印log */
|
||||
export function log(data: any) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(data);
|
||||
}
|
10
src/utils/common/number.ts
Normal file
10
src/utils/common/number.ts
Normal 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
1
src/utils/form/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export * from './rule';
|
73
src/utils/form/rule.ts
Normal file
73
src/utils/form/rule.ts
Normal 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;
|
||||
}
|
@ -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';
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user