training_data/packages/client/src/event/index.ts

134 lines
4.2 KiB
TypeScript
Raw Normal View History

2024-12-30 08:26:40 +08:00
/**
* 线
* 使 `mitt`
*/
import mitt from 'mitt';
2025-01-06 08:45:23 +08:00
import { DepartmentDto, ObjectType, RoleMapDto, StaffDto, TermDto, } from '@nice/common';
2024-12-30 08:26:40 +08:00
/**
* CRUD操作
*/
export enum CrudOperation {
CREATED, // 创建操作
UPDATED, // 更新操作
DELETED // 删除操作
}
/**
* 线
*/
type Events = {
dataChanged: { type: ObjectType, operation: CrudOperation, data: any } // 数据变更事件
};
/**
* 线
*/
export const EventBus = mitt<Events>();
/**
*
* @template T -
*/
type EmitChangeFunction<T> = (data: Partial<T>, operation: CrudOperation) => void;
/**
*
*/
interface EmitChangeHandlers {
[ObjectType.STAFF]: EmitChangeFunction<StaffDto>; // 员工数据变更处理器
[ObjectType.ROLE_MAP]: EmitChangeFunction<RoleMapDto>; // 角色映射数据变更处理器
[ObjectType.DEPARTMENT]: EmitChangeFunction<DepartmentDto>; // 部门数据变更处理器
[ObjectType.TERM]: EmitChangeFunction<TermDto> // 术语数据变更处理器
}
/**
*
*/
const emitChangeHandlers: EmitChangeHandlers = {
[ObjectType.STAFF]: (data, operation) => {
// 转换员工数据,包含额外字段
const rowData = {
...data,
officer_id: data.officerId,
phone_number: data.phoneNumber,
dept_name: data.department?.name,
domain_name: data.domain?.name
};
2024-12-30 09:23:13 +08:00
2024-12-30 08:26:40 +08:00
// 发出员工数据变更事件
EventBus.emit("dataChanged", {
type: ObjectType.STAFF,
operation,
data: [rowData]
});
},
[ObjectType.ROLE_MAP]: (data, operation) => {
// 转换角色映射数据,包含额外字段
const rowData = {
staff_username: data.staff?.username,
staff_showname: data.staff?.showname,
staff_officer_id: data.staff?.officerId,
department_name: data.staff?.department?.name,
...data,
};
// 发出角色映射数据变更事件
EventBus.emit("dataChanged", {
type: ObjectType.ROLE_MAP,
operation,
data: [rowData]
});
},
[ObjectType.DEPARTMENT]: (data, operation) => {
// 转换部门数据,包含额外字段
const rowData = {
is_domain: data.isDomain,
parent_id: data.parentId,
has_children: data.hasChildren,
...data,
};
// 发出部门数据变更事件
EventBus.emit("dataChanged", {
type: ObjectType.DEPARTMENT,
operation,
data: [rowData]
});
},
[ObjectType.TERM]: (data, operation) => {
// 转换术语数据,包含额外字段
const rowData = {
taxonomy_id: data.taxonomyId,
parent_id: data.parentId,
has_children: data.hasChildren,
...data,
};
// 发出术语数据变更事件
EventBus.emit("dataChanged", {
type: ObjectType.TERM,
operation,
data: [rowData]
});
}
};
/**
*
* @param type -
* @param data -
* @param operation - CRUD操作
*/
export function emitDataChange(type: ObjectType, data: any, operation: CrudOperation) {
// 获取指定对象类型的事件处理器
const handler = emitChangeHandlers[type];
if (handler) {
// 调用处理器发出数据变更事件
handler(data, operation);
} else {
// 如果未找到指定对象类型的事件处理器,打印警告
console.warn(`No emit handler for type: ${type}`);
}
}