feat(plugin): 集成 WASM 插件系统到主服务并修复链路问题
- 新增 erp-plugin crate:插件管理、WASM 运行时、动态表、数据 CRUD - 新增前端插件管理页面(PluginAdmin/PluginCRUDPage)和 API 层 - 新增插件数据迁移(plugins/plugin_entities/plugin_event_subscriptions) - 新增权限补充迁移(为已有租户补充 plugin.admin/plugin.list 权限) - 修复 PluginAdmin 页面 InstallOutlined 图标不存在的崩溃问题 - 修复 settings 唯一索引迁移顺序错误(先去重再建索引) - 更新 wiki 和 CLAUDE.md 反映插件系统集成状态 - 新增 dev.ps1 一键启动脚本
This commit is contained in:
51
crates/erp-plugin/src/error.rs
Normal file
51
crates/erp-plugin/src/error.rs
Normal file
@@ -0,0 +1,51 @@
|
||||
use erp_core::error::AppError;
|
||||
|
||||
/// 插件模块错误类型
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
pub enum PluginError {
|
||||
#[error("插件未找到: {0}")]
|
||||
NotFound(String),
|
||||
|
||||
#[error("插件已存在: {0}")]
|
||||
AlreadyExists(String),
|
||||
|
||||
#[error("无效的插件清单: {0}")]
|
||||
InvalidManifest(String),
|
||||
|
||||
#[error("无效的插件状态: 期望 {expected}, 实际 {actual}")]
|
||||
InvalidState { expected: String, actual: String },
|
||||
|
||||
#[error("插件执行错误: {0}")]
|
||||
ExecutionError(String),
|
||||
|
||||
#[error("插件实例化错误: {0}")]
|
||||
InstantiationError(String),
|
||||
|
||||
#[error("插件 Fuel 耗尽: {0}")]
|
||||
FuelExhausted(String),
|
||||
|
||||
#[error("依赖未满足: {0}")]
|
||||
DependencyNotSatisfied(String),
|
||||
|
||||
#[error("数据库错误: {0}")]
|
||||
DatabaseError(String),
|
||||
|
||||
#[error("权限不足: {0}")]
|
||||
PermissionDenied(String),
|
||||
}
|
||||
|
||||
impl From<PluginError> for AppError {
|
||||
fn from(err: PluginError) -> Self {
|
||||
match &err {
|
||||
PluginError::NotFound(_) => AppError::NotFound(err.to_string()),
|
||||
PluginError::AlreadyExists(_) => AppError::Conflict(err.to_string()),
|
||||
PluginError::InvalidManifest(_)
|
||||
| PluginError::InvalidState { .. }
|
||||
| PluginError::DependencyNotSatisfied(_) => AppError::Validation(err.to_string()),
|
||||
PluginError::PermissionDenied(_) => AppError::Forbidden(err.to_string()),
|
||||
_ => AppError::Internal(err.to_string()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub type PluginResult<T> = Result<T, PluginError>;
|
||||
Reference in New Issue
Block a user