@gx-web/core
v1.0.0
Published
冠宣核心库 - 装饰器和类
Readme
@gx-web/core
冠宣核心基础能力包,提供框架无关的装饰器和类模型相关功能。
功能
BaseModel 类
基础模型类,提供装饰器相关的核心静态方法。
继承方式(传统)
import { BaseModel, FieldName, Default } from '@gx-web/core'
class User extends BaseModel {
@FieldName('用户名')
@Default('默认值')
name!: string
}函数方式(新增)
import { fromJson, getModelClassName, getModelFieldName } from '@gx-web/core'
class User {
@FieldName('用户名')
@Default('默认值')
name!: string
}
// 使用函数方式
const user = fromJson(User, { name: '张三' })
const className = getModelClassName(User)
const userName = getModelFieldName(User, 'name')API
BaseModel 类方法
| 方法 | 描述 |
|------|------|
| fromJson<T>(constructor, json?) | 实例化类并设置默认值 |
| getClassName<T>(constructor) | 获取类可读名称 |
| getFieldName<T>(constructor, fieldKey) | 获取属性可读名称 |
独立函数(model-utils)
新增的独立函数,支持不继承 BaseModel 的使用方式:
| 函数 | 描述 |
|------|------|
| fromJson<T>(constructor, json?) | 从任意构造器实例化并设置默认值 |
| getModelClassName<T>(constructor) | 从任意构造器获取类可读名称 |
| getModelFieldName<T>(constructor, fieldKey) | 从任意构造器获取属性可读名称 |
装饰器
框架无关的装饰器:
| 装饰器 | 描述 |
|--------|------|
| @ClassName(name) | 标记类的可读名称 |
| @FieldName(name) | 标记属性的可读名称 |
| @Default(value) | 标记属性的默认值 |
| @Dict(dictType, dictKey?) | 标记属性为字典类型 |
架构说明
职责划分
- @gx-web/core:提供框架无关的装饰器和模型工具函数
- @gx-web/ep-comp:提供 Element-Plus 组件相关的装饰器和工具函数
Element-Plus 相关功能
Element-Plus 相关的装饰器和工具函数已移动到 @gx-web/ep-comp 包:
| 原位置 | 新位置 |
|---------|--------|
| @EPTableItemConfig | @gx-web/ep-comp 中的 @EPTableColumnConfig |
| @EPFormItemConfig | @gx-web/ep-comp 中的 @EPFormItemConfig |
| @EPDescriptionsConfig | @gx-web/ep-comp 中的 @EPDescriptionsConfig |
| @EPDescriptionsItemConfig | @gx-web/ep-comp 中的 @EPDescriptionsItemConfig |
使用场景
场景 1:使用继承 BaseModel(保持原有代码不变)
import { BaseModel, FieldName, Default } from '@gx-web/core'
class UserModel extends BaseModel {
@FieldName('用户名')
@Default('未命名')
name!: string
}
// 使用
const user = UserModel.fromJson({ name: '张三' })
console.log(user.name) // '张三'
console.log(UserModel.getClassName()) // '用户名'场景 2:使用独立函数(支持非继承类)
import {
fromJson,
getModelClassName,
getModelFieldName
} from '@gx-web/core'
class User {
@FieldName('用户名')
@Default('未命名')
name!: string
}
// 直接使用函数,无需继承
const user = fromJson(User, { name: '李四' })
const className = getModelClassName(User)
const userName = getModelFieldName(User, 'name')场景 3:使用 Element-Plus 功能
import {
fromJson,
getEPTableColumns,
getEPFormItems
} from '@gx-web/ep-comp'
import { FieldName } from '@gx-web/core'
class User {
@FieldName('用户名')
name!: string
@EPTableColumnConfig({ label: '用户 ID', sort: 1 })
userId!: number
}
const columns = getEPTableColumns(User)
const items = getEPFormItems(User)迁移指南
如果从旧版本迁移,请参考以下步骤:
- core 功能 - 从
@gx-web/core导入BaseModel、核心装饰器和独立函数 - Element-Plus 功能 - 从
@gx-web/ep-comp导入 Element-Plus 相关装饰器和函数 - tool 包兼容 - 从
@gx-web/tool包仍然可以正常导入所有功能(包括 core 和 ep-comp)
