front/src/utils/message.ts
zzh b9702cd0bc
All checks were successful
Build and Deploy Front / deploy (push) Successful in 5m47s
fix: 订单详情编辑体验、接口参数与价格表批量填价
优化运单详情抽屉操作栏与申报表编辑观感,限制我的订单入库后不可编辑;完善接口参数全量替换/脏检查与全局 Message;修复价格表批量填价选中被清与弹窗被遮挡。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-10 16:27:22 +08:00

95 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Message } from '@arco-design/web-vue';
export type BaseMessageType = 'success' | 'error' | 'warning' | 'info';
export type BaseMessageOptions = {
/** 显示时长 ms */
duration?: number;
/** 是否显示关闭按钮 */
closable?: boolean;
/** 悬停时重置倒计时 */
resetOnHover?: boolean;
};
type MessageConfigLike = {
content: any;
duration?: number;
closable?: boolean;
resetOnHover?: boolean;
[key: string]: any;
};
/** 全局默认:可手动关闭;错误/警告多停留约 5s(合计 8s) */
const GLOBAL_MESSAGE_DEFAULTS: Record<
'info' | 'success' | 'warning' | 'error' | 'normal',
{ duration: number; closable: boolean; resetOnHover: boolean }
> = {
info: { duration: 3000, closable: true, resetOnHover: true },
success: { duration: 3000, closable: true, resetOnHover: true },
warning: { duration: 8000, closable: true, resetOnHover: true },
error: { duration: 8000, closable: true, resetOnHover: true },
normal: { duration: 3000, closable: true, resetOnHover: true },
};
type PatchableType = keyof typeof GLOBAL_MESSAGE_DEFAULTS;
let messageDefaultsInstalled = false;
function mergeMessageConfig(
type: PatchableType,
config: string | MessageConfigLike,
): MessageConfigLike {
const defaults = GLOBAL_MESSAGE_DEFAULTS[type];
if (typeof config === 'string') {
return {
content: config,
...defaults,
};
}
return {
...defaults,
...config,
duration: config.duration ?? defaults.duration,
closable: config.closable ?? defaults.closable,
resetOnHover: config.resetOnHover ?? defaults.resetOnHover,
};
}
/** 安装全局 Message 默认行为(幂等)。覆盖 Message.* 与 $baseMessage。 */
export function installGlobalMessageDefaults() {
if (messageDefaultsInstalled) return;
messageDefaultsInstalled = true;
(Object.keys(GLOBAL_MESSAGE_DEFAULTS) as PatchableType[]).forEach((type) => {
const original = (Message[type] as any).bind(Message);
(Message as any)[type] = (config: string | MessageConfigLike, appContext?: any) => {
return original(mergeMessageConfig(type, config), appContext);
};
});
}
// 被任何路径 import 时即安装,保证 request 拦截器等直接 Message.error 也生效
installGlobalMessageDefaults();
/**
* 全局消息提示
* @param message 消息内容
* @param type 消息类型
* @param options 可覆盖全局默认(duration / closable / resetOnHover)
*/
export const baseMessage = (
message: string,
type: BaseMessageType = 'info',
options?: BaseMessageOptions,
) => {
Message[type]({
content: message,
...options,
});
};
export const $baseMessage = baseMessage;
export default baseMessage;