<template>
    <div :id="id" class="go-form-body" :style="mainStyle">
        <slot></slot>
    </div>
</template>

<script>
    import {GoingUtils} from "goingutils";


    export default {
        name: "go-form-body",
        props: {
            width: {
                type: [String, Number],
                default: "100%"
            },
            id: {
                type: String,
                default: GoingUtils.getUUid(12)
            }
        },
        computed: {
            mainStyle() {
                return {
                    textAlign: "left",
                    overflow: "auto",
                    width: this.width
                };
            }
        },
        mounted() {
        },
        methods:{
            //如果是隐藏元素
            isHiddenEl(itemEl) {
                if ($(itemEl).css("display") === "none") {
                    return true;
                }
                if ($(itemEl).closest(".go-form-row").css("display") === "none") {
                    return true;
                }
                return false;
            },
            //如果存在错误提醒
            hasWarningEl() {
                let errorFlag=false;
                $("#"+this.id).find(".ivu-icon-md-warning").each((index, item)=> {
                    //如果不是隐藏元素
                    if (!this.isHiddenEl(item) && errorFlag === false) {
                        errorFlag = true;
                    }
                });
                return errorFlag;
            },
            validateSonEl(parentEl,flagJson){
                //只有存在子元素 才需要执行
                parentEl.$children&&parentEl.$children.length>0&&parentEl.$children.forEach(sonItem => {
                    //如果存在校验函数 则执行校验 返回的为错误标志
                    let errorFlag= sonItem&&sonItem.validateFun&&sonItem.validateFun();
                    //错误标志为true 表示存在错误
                    if(errorFlag===true){
                        flagJson.validateFlag=false;
                    }
                    //循环递归
                    this.validateSonEl(sonItem,flagJson);
                });
            },
            //初始化数据
            _initData(parentEl){
                //只有存在子元素 才需要执行
                parentEl.$children&&parentEl.$children.length>0&&parentEl.$children.forEach(sonItem => {
                    //如果存在校验函数 则执行校验 返回的为错误标志
                    sonItem&&sonItem.initDataFun&&sonItem.initDataFun();
                    //循环递归
                    this._initData(sonItem);
                });
            },
            //初始化输入对象
            initData(){
                this._initData(this);
            },
            //清空错误标示
            _clearValidate(parentEl){
                //只有存在子元素 才需要执行
                parentEl.$children&&parentEl.$children.length>0&&parentEl.$children.forEach(sonItem => {
                    sonItem.clearErrorState&&sonItem.clearErrorState();
                    this._clearValidate(sonItem);
                });
            },
            //清空错误校验信息
            clearValidate(){
                //调用子节点的校验
                this._clearValidate(this);
            },
            //校验数据
            validate(){
                let flagJson={validateFlag:true};
                //调用子节点的校验
                this.validateSonEl(this,flagJson);
                return flagJson.validateFlag;
            }
        },
        components: {}
    };
</script>
