|
|
|
@ -13,23 +13,93 @@ import { _HighlightBehavior } from "./core/behavior/behavior.highlight";
|
|
|
|
|
import { _RedMarkBehavior } from "./core/behavior/behavior.redmark"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type Constructor<T extends {}> = T & { |
|
|
|
|
type ClassConstructor<T extends {}> = T & { |
|
|
|
|
new(config: any): T; |
|
|
|
|
(config: any): T; |
|
|
|
|
readonly prototype: T; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
export interface _BI extends _func, _i18n, _base { |
|
|
|
|
OB: Constructor<_OB>; |
|
|
|
|
Widget: Constructor<_Widget> & _WidgetStatic; |
|
|
|
|
Single: Constructor<_Single>; |
|
|
|
|
BasicButton: Constructor<_BasicButton>; |
|
|
|
|
Trigger: Constructor<_Trigger>; |
|
|
|
|
Action: Constructor<_Action>; |
|
|
|
|
ActionFactory: Constructor<_ActionFactory>; |
|
|
|
|
ShowAction: Constructor<_ShowAction>; |
|
|
|
|
Behavior: Constructor<_Behavior>; |
|
|
|
|
BehaviorFactory: Constructor<_BehaviorFactory>; |
|
|
|
|
HighlightBehavior: Constructor<_HighlightBehavior>; |
|
|
|
|
RedMarkBehavior: Constructor<_RedMarkBehavior>; |
|
|
|
|
OB: ClassConstructor<_OB>; |
|
|
|
|
Widget: ClassConstructor<_Widget> & _WidgetStatic; |
|
|
|
|
Single: ClassConstructor<_Single>; |
|
|
|
|
BasicButton: ClassConstructor<_BasicButton>; |
|
|
|
|
Trigger: ClassConstructor<_Trigger>; |
|
|
|
|
Action: ClassConstructor<_Action>; |
|
|
|
|
ActionFactory: ClassConstructor<_ActionFactory>; |
|
|
|
|
ShowAction: ClassConstructor<_ShowAction>; |
|
|
|
|
Behavior: ClassConstructor<_Behavior>; |
|
|
|
|
BehaviorFactory: ClassConstructor<_BehaviorFactory>; |
|
|
|
|
HighlightBehavior: ClassConstructor<_HighlightBehavior>; |
|
|
|
|
RedMarkBehavior: ClassConstructor<_RedMarkBehavior>; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
interface Obj { |
|
|
|
|
[key: string]: any; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
declare let BI: Obj & _BI; |
|
|
|
|
|
|
|
|
|
declare const Fix: Obj; |
|
|
|
|
|
|
|
|
|
export type Constructor<T> = new(...args: any[]) => T; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 注册widget |
|
|
|
|
*/ |
|
|
|
|
export function shortcut () { |
|
|
|
|
return function decorator<U> (Target: Constructor<U> & {xtype: string}): void { |
|
|
|
|
BI.shortcut(Target.xtype, Target); |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 注册model |
|
|
|
|
*/ |
|
|
|
|
export function model () { |
|
|
|
|
return function decorator<U extends {new (...args:any[]):{}} & {xtype: string, context?: ReadonlyArray<string>}>(Target: U): void { |
|
|
|
|
BI.model(Target.xtype, class extends Target { |
|
|
|
|
context = Target.context; |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 类注册_store属性 |
|
|
|
|
* @param Model model类 |
|
|
|
|
* @param opts 额外条件 |
|
|
|
|
*/ |
|
|
|
|
export function store<T> (Model?: Constructor<T> & {xtype: string}, opts: { props?(this: unknown): { [key: string]: unknown } } = {}) { |
|
|
|
|
return function classDecorator<U extends {new (...args:any[]):{}}>(constructor:U) { |
|
|
|
|
return class extends constructor { |
|
|
|
|
_store () { |
|
|
|
|
const props = opts.props ? opts.props.apply(this) : undefined; |
|
|
|
|
|
|
|
|
|
return BI.Models.getModel(Model.xtype, props); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Model基类 |
|
|
|
|
*/ |
|
|
|
|
export class Model<U extends {types?: {[key: string]: any}, context?: ReadonlyArray<string>} = {}> extends Fix.Model { |
|
|
|
|
model: Pick<{[key in keyof U["types"]]: U["types"][key]}, U["context"][number]> & {[key in keyof ReturnType<this["state"]>]: ReturnType<this["state"]>[key]} & {[key in keyof this["computed"]]: ReturnType<this["computed"][key]>} & {[key: string]: unknown}; |
|
|
|
|
|
|
|
|
|
store: this["actions"]; |
|
|
|
|
|
|
|
|
|
state (): {[key: string]: any} { |
|
|
|
|
return {}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
context: U["context"]; |
|
|
|
|
|
|
|
|
|
actions:{[key: string]: (...args: any[]) => any}; |
|
|
|
|
|
|
|
|
|
childContext: ReadonlyArray<keyof (this["computed"] & ReturnType<this["state"]>)>; |
|
|
|
|
|
|
|
|
|
TYPE: Pick<{[key in keyof this["computed"]]: ReturnType<this["computed"][key]>} & {[key in keyof ReturnType<this["state"]>]: ReturnType<this["state"]>[key]}, this["childContext"][number]>; |
|
|
|
|
|
|
|
|
|
computed: {[key: string]: () => any}; |
|
|
|
|
} |
|
|
|
|