import { IFormDetailAbility, IFormDetailController, IFormDetailControllerParams, IParam, } from '@/core/interface'; /** * 表单成员控制器基类 * * @export * @class FormDetailController * @implements {IFormDetailController} * @template A */ export class FormDetailController implements IFormDetailController { /** * 控制器名称 * * @protected * @type {string} * @memberof FormDetailController */ protected name!: string; /** * 成员类型 * * @protected * @type {string} * @memberof FormDetailController */ protected detailType!: string; /** * 成员标题 * * @protected * @type {string} * @memberof FormDetailController */ protected caption!: string; /** * 成员模型数据 * * @protected * @type {IParam} * @memberof FormDetailController */ protected readonly model: IParam = {}; /** * 成员能力块 * * @protected * @type {IFormDetailAbility} * @memberof FormDetailController */ protected ability!: IFormDetailAbility; /** * 成员是否显示 * * @protected * @type {boolean} * @memberof FormDetailController */ visible = true; /** * 成员是否必填 * * @type {boolean} * @memberof FormDetailController */ isRequired = false; /** * 成员是否禁用 * * @protected * @type {boolean} * @memberof FormDetailController */ disabled = false; /** * 容器显示的更多项 * * @type {string[]} * @memberof FormDetailController */ showMoreItems: string[] = []; /** * 启用模式 (不启用 | 新建 | 更新 | 启用) * * @type {(0 | 1 | 2 | 3)} * @memberof FormDetailController */ enableCond: 0 | 1 | 2 | 3 = 3; /** * 显示更多模式 (无 | 受控内容 | 管理容器 ) * * @protected * @type {(0 | 1 | 2)} * @memberof FormDetailController */ readonly showMoreMode: 0 | 1 | 2 = 0; /** * 忽略值输入 * * @type {(0 | 1| 2| 3 | 4)} * @memberof FormDetailController */ ignoreInput: 0 | 1 | 2 | 3 | 4 = 0; /** * 表单按钮行为 * * @type {IParam} * @memberof FormDetailController */ uIAction?: IParam; /** * 表单分组行为组 * * @type {IParam} * @memberof FormDetailController */ uIActionGroup?: IParam; /** * 新建默认值项 * * @type {IParam[]} * @memberof FormDetailController */ createDefaultItems: IParam[]; /** * 更新默认值项 * * @type {IParam[]} * @memberof FormDetailController */ updateDefaultItems: IParam[]; /** * 值规则 * * @type {IParam[]} * @memberof FormDetailController */ valueRule: IParam[]; /** * Creates an instance of FormDetailController. * @param {IFormDetailControllerParams} params * @memberof FormDetailController */ constructor(params: IFormDetailControllerParams) { this.model = params.model; this.name = params.model.name; this.detailType = params.model.detailType; this.showMoreMode = params.model.showMoreMode; this.showMoreItems = params.model.showMoreItems || []; this.uIAction = params.model.uIAction; this.uIActionGroup = params.model.uIActionGroup; this.enableCond = params.model.enableCond; this.createDefaultItems = params.model.createDefaultItems || []; this.updateDefaultItems = params.model.updateDefaultItems || []; this.valueRule = params.valueRule || []; this.detailInit(); } /** * 成员初始化 * * @memberof FormDetailController */ detailInit() { this.visible = this.model.visible || true; this.isRequired = this.model.required || false; this.disabled = this.model.disabled || false; if (this.model.groupLogics) { const panelVisible = this.model.groupLogics.find( (logic: IParam) => logic.logicCat === 'PANELVISIBLE' ); const itemBlank = this.model.groupLogics.find( (logic: IParam) => logic.logicCat === 'ITEMBLANK' ); const itemEnable = this.model.groupLogics.find( (logic: IParam) => logic.logicCat === 'ITEMENABLE' ); if (panelVisible) { this.visible = false; } if (itemBlank) { this.isRequired = false; } if (itemEnable) { this.disabled = true; } } } /** * get 必填 * * @type {boolean} * @memberof FormDetailController */ get required(): boolean { return this.isRequired; } /** * set 必填 * * @memberof FormDetailController */ set required(value: boolean) { this.isRequired = value; if (this.valueRule && this.valueRule.length > 0) { this.valueRule.forEach((rule: IParam) => { if (rule.hasOwnProperty('required')) { rule.required = this.isRequired; } }) } } /** * 获取能力 * * @template A * @return {*} {A} * @memberof FormDetailController */ getAbility(): A { return this.ability as A; } /** * 设置能力 * * @param {IFormDetailAbility} ability * @memberof FormDetailController */ setAbility(ability: IFormDetailAbility): void { this.ability = ability; } /** * 获取模型 * * @template T * @return {*} {T} * @memberof FormDetailController */ getModel(): T { return this.model as T; } }