attrLinkageHelper.js 6.9 KB
define(['mUtil','Component'], function (mUtil,Component) {

    var vm = {};
    var setAttrTrigger = function(mecId,viewAttr){
        var instance = mUtil.getInstance(mecId);
        var fieldVM = instance.viewModel;
        var $that = instance.$el;

        var beforeView = 1;
        if ($(".wev-field", $that).children("div:last-child").children().eq(0).css("visibility") == "hidden") {
            beforeView = 4;
        } else if ($that.css("display") == "none") {
            beforeView = 5;
        } else if (fieldVM.readonly) {
            beforeView = 3;
        } else if (fieldVM.required) {
            beforeView = 2;
        } else {
            beforeView = 1;
        }

        viewAttr = Number(viewAttr);
        switch (viewAttr) {
            case 1: // 编辑
                switch (beforeView) {
                    case 2:
                        setRequired(instance, false);
                        break;
                    case 3:
                        fieldVM.readonly = false;
                        fieldVM.required = false;
                        mountField(instance, fieldVM);
                        break;
                    case 4:
                        setRequired(instance, false);
                        setDisplay($that, true, true);
                        break;
                    case 5:
                        setRequired(instance, false);
                        setDisplay($that, true);
                        break;
                }
                break;
            case 2: // 必填
                switch (beforeView) {
                    case 1:
                        setRequired(instance, true);
                        break;
                    case 3:
                        fieldVM.readonly = false;
                        fieldVM.required = true;
                        mountField(instance, fieldVM);
                        break;
                    case 4:
                        setRequired(instance, true);
                        setDisplay($that, true, true);
                        break;
                    case 5:
                        setRequired(instance, true);
                        setDisplay($that, true);
                        break;
                }
                break;
            case 3: // 只读
                switch (beforeView) {
                    case 1:
                    case 2:
                    case 4:
                        setDisplay($that, true, true);
                    case 5:
                        fieldVM.readonly = true;
                        fieldVM.required = false;
                        mountField(instance, fieldVM);
                        setDisplay($that, true);
                        break;
                }
                break;
            case 4: // 隐藏内容
                switch (beforeView) {
                    case 1:
                    case 2:
                        setRequired(instance, false);
                        setDisplay($that, false, true);
                        break;
                    case 3:
                        fieldVM.readonly = false;
                        fieldVM.required = false;
                        mountField(instance, fieldVM);
                        setDisplay($that, false, true);
                        break;
                    case 5:
                        setDisplay($that, false, true);
                        setDisplay($that, true);
                        break;
                }
                break;
            case 5: // 隐藏行
                switch (beforeView) {
                    case 1:
                    case 2:
                        setRequired(instance, false);
                        setDisplay($that, false);
                        break;
                    case 3:
                        setDisplay($that, false);
                        fieldVM.readonly = false;
                        fieldVM.required = false;
                        mountField(instance, fieldVM);
                        break;
                    case 4:
                        setDisplay($that, false);
                        setDisplay($that, true, true);
                        break;
                }
                break;
        }
    };
    var setRequired = function (instance, required) {
        mUtil.isFunction(instance.setRequired) && instance.setRequired(required);
    };
    var setDisplay = function ($el, show, visibility) {
        var cssAttr = visibility ? "visibility" : "display";
        var css = show ? "" : (visibility ? "hidden" : "none");
        visibility && $(".wev-field", $el).children("div:last-child").children().css(cssAttr, css) || $el.css(cssAttr, css);
    };
    var mountField = function (instance, fieldVM) {
        if (instance.type == "FLbs4amap") { // lbs处理
            instance.setReadonly(fieldVM.readonly);
            instance.setRequired(fieldVM.required);
        } else {
            if (fieldVM.field && fieldVM.field.name) {
                var fieldValue = !vm.detailtable.isA ? $f(fieldVM.field.name).val() : $f(vm.detailtable.name + "." + fieldVM.field.name).val();
                if (fieldValue) {
                    fieldVM.field.defaultValue = fieldValue;
                    fieldVM.field.value = fieldValue;
                }
            }
            instance.beforeMount();
            Component.render(instance.$el, fieldVM);
            instance.mounted();
            // 批注和明细单行文本处理
            if (instance.type == "FHandwriting" || (fieldVM.readonly && instance.type == "FInputText" && vm.detailtable.isA)) {
                instance.setValue(fieldValue);
            }
        }
    };


    return {
        /**
         * 属性联动
         * @param linkages 所有属性联动配置信息
         * @param mecid 触发联动的插件id
         * @constructor
         */
        trigger : function(linkages, mecid){
            var fieldMecInstance = mUtil.getInstance(mecid);
            vm = fieldMecInstance.viewModel;
            var instance = mUtil.getInstance(fieldMecInstance.viewModel.form);
            if (instance && fieldMecInstance.linkagecahe) {//清空之前的联动配置
                var fieldsAttr = instance.getFormFieldsAttr();//取得插件本来默认的属性
                fieldMecInstance.linkagecahe.forEach(function (attr) {
                    attr.changeFields.forEach(function (mecId) {
                        mecId !== -1 && setAttrTrigger(mecId, fieldsAttr[mecId]);
                    });
                });
            }
            var fieldvalue = fieldMecInstance.getValue();
            var linkage = fieldMecInstance.linkagecahe = linkages[fieldvalue];
            if (linkage) {
                linkage.forEach(function (attr) {
                    attr.changeFields.forEach(function (mecId, index, arr) {
                        mecId !== -1 && setAttrTrigger(mecId, attr.viewAttr);
                    });
                });
            }
        }
    };
});