app-form-model.ts 4.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
import { IPSDEEditForm, IPSDEFormItem } from '@ibiz/dynamic-model-api';
import { DataTypes, ModelTool } from "ibiz-core";

/**
 * AppFormModel 部件模型
 *
 * @export
 * @class AppFormModel
 */
export class AppFormModel {

    /**
    * 表单实例对象
    *
    * @memberof AppFormModel
    */
    public FormInstance !: IPSDEEditForm;

    /**
     * Creates an instance of AppFormModel.
     * 
     * @param {*} [opts={}]
     * @memberof AppFormModel
     */
    constructor(opts: any) {
        this.FormInstance = opts;
    }

    /**
    * 获取数据项集合
    *
    * @returns {any[]}
    * @memberof AppFormModel
    */
    public getDataItems(): any[] {
        let modelArray:any[] = [
            {
                name: 'srfwfmemo',
                prop: 'srfwfmemo',
                dataType: 'TEXT',
            },
            {
                name: 'srfnextform',
                prop: 'srfnextform',
                dataType: 'TEXT',
            },
            {
                name: 'srfactionparam',
                prop: 'srfactionparam',
                dataType: 'TEXT',
            },
            {
                name: 'srffrontuf',
                prop: 'srffrontuf',
                dataType: 'TEXT',
            }
        ]
        const allFormDetails = ModelTool.getAllFormDetails(this.FormInstance)
        const formItems:any = this.FormInstance.getPSDEFormItems();
        const appDataEntity = this.FormInstance?.getPSAppDataEntity();
        // 表单部件
        allFormDetails.forEach(( detail: any ) => {
            if(detail.detailType && detail?.formPartType == 'DYNASYS'){
                modelArray.push({
                    name: detail.name,
                    dataType: 'FORMPART'
                })
            }
69 70 71 72 73 74 75 76 77
            //  重复器
            if (detail.detailType === 'MDCTRL' && detail.contentType === 'REPEATER') {
                const prop = detail.getPSAppDEField && detail.getPSAppDEField() ? detail.getPSAppDEField().codeName : detail.fieldName ? detail.fieldName : detail.codeName;
                modelArray.push({
                    name: detail.name.toLowerCase(),
                    prop: prop.toLowerCase(),
                    dataType: 'REPEATER'
                });
            }
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
        });
        // 表单项
        formItems?.forEach(( item: IPSDEFormItem)=>{
            let temp: any = { name: item.id};
            if(item?.getPSAppDEField()){
                temp.prop = item.getPSAppDEField()?.codeName?.toLowerCase();
                temp.dataType = DataTypes.toString(item.getPSAppDEField()?.stdDataType || -1)?.toLowerCase();
            }else if(item.getPSEditor()?.editorType !== 'HIDDEN'){
                //表单项无属性且界面显示类型(供开始流程、提交流程使用)
                if(!item.hidden){
                    temp.prop = item.id;
                }
                temp.dataType = 'FORMITEM';
            }
            modelArray.push(temp);
        });
        // todo 关联主实体的主键

        // 界面主键标识
        modelArray.push({
            name: appDataEntity?.codeName.toLowerCase(),
            prop: ModelTool.getAppEntityKeyField(appDataEntity)?.codeName.toLowerCase(),
            dataType: 'FRONTKEY',
        })
        
        return modelArray;
    }

106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
    /**
    *  获取重复器模型集合
    *
    * @returns {any[]}
    * @memberof AppFormModel
    */
  public getRepeaterModel(){
    let modelArray:any[] = []
    const allFormDetails = ModelTool.getAllFormDetails(this.FormInstance)
    allFormDetails.forEach(( detail: any ) => {
        //  重复器
        if (detail.detailType === 'MDCTRL' && detail.contentType === 'REPEATER') {
            if(detail.getPSDEFormDetails?.()){
                detail.getPSDEFormDetails().forEach((item:any)=>{
                    modelArray.push(
                        {
                            codeName:item.codeName,
                            parentName:detail.codeName,
                            valueItem:item._data.fieldName,
                            dataType: 'REPEATER',
                          },
                    )
                })
            }
        }
    });
    return modelArray;
  }

135
}