refactor: 重构项目结构 - enums/config/types/plugins
- 重构 enums: 按业务域合并为 5 个文件 - 创建 config: storage.ts, vxe-table.ts - 删除 plugins,功能迁移到 main.ts - 创建完整 types 结构 - 新增 utils: validators, websocket, register-components - 创建 router/guards/permission.ts - 更新配置文件
This commit is contained in:
18
src/utils/register-components.ts
Normal file
18
src/utils/register-components.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* 全局组件注册工具
|
||||
*
|
||||
* @description
|
||||
* 批量注册 Element Plus 图标等全局组件
|
||||
*/
|
||||
|
||||
import type { App } from "vue";
|
||||
import * as ElementPlusIconsVue from "@element-plus/icons-vue";
|
||||
|
||||
/**
|
||||
* 注册 Element Plus 所有图标为全局组件
|
||||
*/
|
||||
export function registerElementIcons(app: App) {
|
||||
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
|
||||
app.component(key, component);
|
||||
}
|
||||
}
|
||||
69
src/utils/validators.ts
Normal file
69
src/utils/validators.ts
Normal file
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
* 表单验证规则工具
|
||||
*
|
||||
* @description
|
||||
* 提供常用的表单验证规则
|
||||
*/
|
||||
|
||||
import type { FormItemRule } from "element-plus";
|
||||
|
||||
/**
|
||||
* 验证规则生成器
|
||||
*/
|
||||
export const VALIDATORS = {
|
||||
/**
|
||||
* 必填项验证
|
||||
*/
|
||||
required(message: string): FormItemRule {
|
||||
return {
|
||||
required: true,
|
||||
message,
|
||||
trigger: "blur",
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* 邮箱验证
|
||||
*/
|
||||
email: {
|
||||
type: "email",
|
||||
message: "请输入正确的邮箱地址",
|
||||
trigger: "blur",
|
||||
} as FormItemRule,
|
||||
|
||||
/**
|
||||
* 手机号验证
|
||||
*/
|
||||
mobile: {
|
||||
pattern: /^1[3-9]\d{9}$/,
|
||||
message: "请输入正确的手机号码",
|
||||
trigger: "blur",
|
||||
} as FormItemRule,
|
||||
|
||||
/**
|
||||
* URL 验证
|
||||
*/
|
||||
url: {
|
||||
type: "url",
|
||||
message: "请输入正确的URL地址",
|
||||
trigger: "blur",
|
||||
} as FormItemRule,
|
||||
|
||||
/**
|
||||
* 数字验证
|
||||
*/
|
||||
number: {
|
||||
type: "number",
|
||||
message: "请输入数字",
|
||||
trigger: "blur",
|
||||
} as FormItemRule,
|
||||
|
||||
/**
|
||||
* 整数验证
|
||||
*/
|
||||
integer: {
|
||||
type: "integer",
|
||||
message: "请输入整数",
|
||||
trigger: "blur",
|
||||
} as FormItemRule,
|
||||
};
|
||||
114
src/utils/websocket.ts
Normal file
114
src/utils/websocket.ts
Normal file
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
* WebSocket 服务管理
|
||||
*
|
||||
* @description
|
||||
* 统一管理应用中的所有 WebSocket 连接
|
||||
* - 字典同步 WebSocket
|
||||
* - 在线用户计数 WebSocket
|
||||
* - 其他业务 WebSocket
|
||||
*
|
||||
* @author 有来技术团队
|
||||
*/
|
||||
|
||||
import { useDictSync } from "@/composables";
|
||||
import { AuthStorage } from "@/utils/auth";
|
||||
|
||||
/**
|
||||
* WebSocket 服务实例约定接口
|
||||
*/
|
||||
type WebSocketService = {
|
||||
disconnect?: () => void;
|
||||
closeWebSocket?: () => void;
|
||||
cleanup?: () => void;
|
||||
[key: string]: any;
|
||||
};
|
||||
|
||||
/**
|
||||
* 全局 WebSocket 实例管理
|
||||
*/
|
||||
const websocketInstances = new Map<string, WebSocketService>();
|
||||
|
||||
/**
|
||||
* 防止重复初始化的状态标记
|
||||
*/
|
||||
let isInitialized = false;
|
||||
let dictWebSocketInstance: ReturnType<typeof useDictSync> | null = null;
|
||||
|
||||
/**
|
||||
* 注册 WebSocket 实例
|
||||
*/
|
||||
export function registerWebSocketInstance(key: string, instance: WebSocketService) {
|
||||
websocketInstances.set(key, instance);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 WebSocket 实例
|
||||
*/
|
||||
export function getWebSocketInstance(key: string) {
|
||||
return websocketInstances.get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化 WebSocket 服务
|
||||
*/
|
||||
export function setupWebSocket() {
|
||||
if (isInitialized) {
|
||||
console.warn("[WebSocket] 已初始化,跳过重复初始化");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!AuthStorage.getAccessToken()) {
|
||||
console.warn("[WebSocket] 未登录,跳过 WebSocket 初始化");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
dictWebSocketInstance = useDictSync();
|
||||
registerWebSocketInstance("dict-sync", dictWebSocketInstance);
|
||||
isInitialized = true;
|
||||
console.log("[WebSocket] 初始化成功");
|
||||
} catch (error) {
|
||||
console.error("[WebSocket] 初始化失败:", error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理所有 WebSocket 连接
|
||||
*/
|
||||
export function cleanupWebSocket() {
|
||||
console.log("[WebSocket] 开始清理连接...");
|
||||
|
||||
websocketInstances.forEach((instance, key) => {
|
||||
try {
|
||||
if (instance.disconnect) {
|
||||
instance.disconnect();
|
||||
} else if (instance.closeWebSocket) {
|
||||
instance.closeWebSocket();
|
||||
} else if (instance.cleanup) {
|
||||
instance.cleanup();
|
||||
}
|
||||
console.log(`[WebSocket] ${key} 已断开`);
|
||||
} catch (error) {
|
||||
console.error(`[WebSocket] ${key} 清理失败:`, error);
|
||||
}
|
||||
});
|
||||
|
||||
websocketInstances.clear();
|
||||
dictWebSocketInstance = null;
|
||||
isInitialized = false;
|
||||
console.log("[WebSocket] 清理完成");
|
||||
}
|
||||
|
||||
/**
|
||||
* 重新初始化 WebSocket
|
||||
*/
|
||||
export function reinitializeWebSocket() {
|
||||
cleanupWebSocket();
|
||||
setupWebSocket();
|
||||
}
|
||||
|
||||
if (typeof window !== "undefined") {
|
||||
window.addEventListener("beforeunload", () => {
|
||||
cleanupWebSocket();
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user