Files
mayfly-go/frontend/src/components/sysmsg/db/db-sql-exec-progress.ts

57 lines
1.7 KiB
TypeScript
Raw Normal View History

import ProgressNotify from './DbSqlExecProgress.vue';
2024-12-08 13:04:23 +08:00
import { ElNotification } from 'element-plus';
import { h, reactive } from 'vue';
import syssocket from '@/common/syssocket';
2024-12-08 13:04:23 +08:00
const sqlExecNotifyMap: Map<string, any> = new Map();
// 构建 props私有函数不导出
const buildProgressProps = (): any => {
return {
progress: {
title: {
type: String,
},
executedStatements: {
type: Number,
},
},
};
};
export async function registerDbSqlExecProgress() {
await syssocket.registerMsgHandler('sqlScriptRunProgress', function (message: any) {
const content = message.params;
2024-12-08 13:04:23 +08:00
const id = content.id;
let progress = sqlExecNotifyMap.get(id);
if (content.terminated) {
if (progress != undefined) {
progress.notification?.close();
sqlExecNotifyMap.delete(id);
progress = undefined;
}
return;
}
if (progress == undefined) {
progress = {
props: reactive(buildProgressProps()),
notification: undefined,
};
}
progress.props.progress.title = content.title;
progress.props.progress.executedStatements = content.executedStatements;
if (!sqlExecNotifyMap.has(id)) {
progress.notification = ElNotification({
duration: 0,
title: message.title,
message: h(ProgressNotify, progress.props),
type: 'info',
2024-12-08 13:04:23 +08:00
showClose: false,
});
sqlExecNotifyMap.set(id, progress);
}
});
}