代码如下:
import { message } from 'antd';
import { CloseOutlined } from '@ant-design/icons'
// type: open,success,error,info,warning,loading
// text: 提示文案
// key 用于关闭提示
// time 延迟关闭时间
export const setMessage = (type: string, text: any, time?: number) => {
let timeoutName: any;
if (time) {
let timeRemaining: any = time - 1;
const countDown: any = () => {
message[type]({
content: <span className="message-box">
{text}<span className="time-text">({timeRemaining})s</span>
<CloseOutlined className="close-icon" onClick={destroyMessage} />
</span>,
key,
duration: 0,
});
timeoutName = setTimeout(() => {
timeRemaining = timeRemaining - 1;
message[type]({
content: <span className="message-box">
{text}<span className="time-text">({timeRemaining})s</span>
<CloseOutlined className="close-icon" onClick={destroyMessage} />
</span>,
key,
duration: 0,
});
if (timeRemaining <= 0) {
message.destory(key);
}
if (timeRemaining > 0) {
countDown();
}
}, 1000);
};
countDown();
const destroyMessage = () => {
timeRemaining = 1;
message.destory(key);
clearTimeout(timeoutName);
};
} else {
const countDown: any = () => {
message[type]({
content: <span className="message-box">
{text}<span className="time-text">({timeRemaining})s</span>
<CloseOutlined className="close-icon" onClick={destroyMessage} />
</span>,
key,
duration: 0,
});
};
countDown();
const destroyMessage = () => {
message.destory(key);
clearTimeout(timeoutName);
};
}
}
// 使用时
// setMessage('error', res.data.msg || '处理失败', Math.random(), 3)
// setMessage('success', '处理成功', Math.random(), 3)