import _ from 'lodash'
let Base64 = require('js-base64').Base64
const submitMixins = {
    data() {
        return {
            paramData: {}
        }
    },
    mounted: function() {},
    methods: {
        //保存监听的回调方法触发
        saveClick(data) {
            let other = {}
            this.paramData = {}
            if (this.biModel == 'pivot') { // 透视表
                this.paramData.displayMode = 2
                other = this.$refs.pivotMainLayout.$refs.pivot.getOtherDatas()
            } else {
                other = { natureArr: this.natureArr || this.bigScreenNature, biCustom: this.biCustom, isBigScreen: this.isBigScreen || false, isHeightFit: true };
                this.paramData.displayMode = this.natureArr ? 0 : 1
            }
            console.log('other:', other)
            this.paramData.other = JSON.stringify(other);
            this.type = data.type
            switch (data.type) {
                case 'add':
                    // this.getScreenData();
                    // this.getControlData();
                    this.paramData = Object.assign(this.paramData, data.formData)
                    this.submitApi(this.paramData, 'add')
                    break
                case 'edit':
                    this.submitEditData();
                    break
            }
        },
        // 整体设置高度比
        changeHPosition() {
            if (this.isFromEventBusHP) { // 来自于eventBus的状态修改，不变更组件
                this.isFromEventBusHP = false
                return
            }
            this.setHPosition(this.natureArr)
            this.$store.commit('setNatureArr', [...this.natureArr])
            this.$forceUpdate()
        },
        // 递归设置
        setHPosition(layout) {
            for (let item of layout) {
                if (item.type == 'tab') {
                    for (let t of item.tabs) {
                        this.setHPosition(t.natureArr)
                    }
                } else if (item.type == 'panel') {
                    this.setHPosition(item.natureArr)
                } else {
                    item.HPosition = this.allHPosition
                }
            }
        },
        // 渲染筛选框数据
        getScreenData(screenData) {
            this.paramData.dimensions = [];
            this.biCustom.expandNode = {}
            if (this.biCustom) {
                for (let item of this.biCustom.weidu) {
                    this.paramData.dimensions.push({ dimension: item.dimensionName, dimensionName: item._name });
                }
            }

            // if (screenData && screenData.length > 0) {
            //   this.paramData.conditions = [];
            //   for (let item of screenData) {
            //     var screen = { controlId: item.id, size: { width: item.controlWidth || 100, height: item.controlHeight || 100 }, type: item.state };
            //     if (item.clickEvent) {
            //       screen.clickEvent = item.clickEvent;
            //     }
            //     if (item.isAutoNewLine) {
            //       screen.isAutoNewLine = item.isAutoNewLine;
            //     }
            //     if (item.controlName) {
            //       screen.controlName = item.controlName;
            //     }
            //     if (item.dimensionLevel) {
            //       screen.dimensionLevel = item.dimensionLevelId;
            //     }
            //     if (item.endDateId || item.startDateId) {
            //       // screen.fieldValues = [item.startDateId, item.endDateId]
            //       screen.fieldValues = ['2018-01-01', '2020-07-02'];
            //     }
            //     if (item.state != 7) { //非按钮
            //       // eslint-disable-next-line no-unused-expressions
            //       screen.andOr = item.andOr || 'and';
            //       screen.isDimension = item.isDimension || '1';
            //       screen.fieldNames = item.fieldNamesId ? item.fieldNamesId.split(',') : ['DIM_DATE_DAY'];
            //     }
            //     this.paramData.conditions.push(screen)
            //   }
            // }
        },
        // //渲染 table tab chart
        // getControlData() {
        //   for (let item of [...this.natureArr]) {
        //     var itemParam = JSON.parse(JSON.stringify(this.paramData));
        //     itemParam = this.getControlParamItem(item, itemParam, false);
        //     this.paramData = Object.assign(this.paramData, itemParam)
        //   }
        // },
        // // 渲染组件参数
        // getControlParamItem(item, itemParam, isTab) {
        //   switch (item.type) {
        //     case 'chart':
        //       if (!itemParam.charts) {
        //         itemParam.charts = [];
        //       }
        //       if (isTab) { //tab中的图表
        //         itemParam.charts.push({ chartType: item.chartType, controlId: item.id, fieldsX: item.fieldsX ? item.fieldsX.split(',') : [], linkType: item.linkTypeId, openPattern: item.openPatternId, reportName: item.reportName, size: { width: item.controlWidth || 100, height: item.controlWidth || 100 }, targetIds: item.targetIds ? item.targetIds.split(',') : [], measureName: item.measureName ? item.measureName.split(',') : [], state: item.state, targetName: item.targetName ? item.targetName.split(',') : [], title: item.controlTitle || '', type: '21' });
        //       } else {
        //         itemParam.charts.push({ chartType: item.chartType, controlId: item.id, fieldsX: item.fieldsX ? item.fieldsX.split(',') : [], linkType: item.linkTypeId, openPattern: item.openPatternId, reportName: item.reportName, size: { width: item.controlWidth || 100, height: item.controlWidth || 100 }, targetIds: item.targetIds ? item.targetIds.split(',') : [], measureName: item.measureName ? item.measureName.split(',') : [], state: item.state, targetName: item.targetName ? item.targetName.split(',') : [], title: item.controlTitle || '', type: '21' });
        //       }
        //       break;
        //     case 'table':
        //       if (!itemParam.tables) {
        //         itemParam.tables = [];
        //       }
        //       var tableItem = { cols: [], controlId: item.id, isCount: item.isCount ? '1' : '0', isPage: !item.offPage ? '1' : '0', size: { width: item.controlWidth || 100, height: item.controlHeight || 100 }, type: '20' };
        //       if (item.cols) {
        //         tableItem.cells = [];
        //         for (let i = 0; i < item.cols.length; i++) {
        //           let ce = item.cols[i]
        //           if (ce.targetId && ce.title) { //非无效单元格
        //             var newCe = { align: ce.align || 'center', isFreeze: ce.isFreeze ? '1' : '0', isSort: ce.isSort ? '1' : '0', name: ce.cellId, relationTargetIds: [], title: ce.title, targetId: ce.targetId, width: ce.width || 80 };
        //             if (ce.linkType) {
        //               newCe.linkType = ce.linkTypeId;
        //             }
        //             if (ce.openPattern) {
        //               newCe.openPattern = ce.openPatternId;
        //             }
        //             if (ce.reportName) {
        //               newCe.reportName = ce.reportName;
        //             }
        //             if (ce.relationTarget) {
        //               for (let rel of ce.relationTarget) {
        //                 newCe.relationTargetIds.push(rel.id);
        //               }
        //             }
        //             tableItem.cells.push(newCe);
        //           }
        //         }
        //       }
        //       itemParam.tables.push(tableItem);
        //       break;
        //     case 'tab':
        //       if (!itemParam.tabs) {
        //         itemParam.tabs = [];
        //       }
        //       // var tabItem = { controlId: item.id, selectedTabPageId: '0' + item.id, size: { width: item.controlWidth || 100, height: item.controlWidth || 100 }, type: '22', tabPages: [] };
        //       for (let t of item.tabs) {
        //         // var tab = { tabPageId: t.id, title: t.title };
        //         if (t.natureArr) {
        //           for (let natu of t.natureArr) {
        //             // tabItem.tabPages.push(this.getControlParamItem(natu, tab, true));
        //             this.getControlParamItem(natu, itemParam, true)
        //           }
        //         }
        //       }
        //       // itemParam.tabs.push(tabItem);
        //       console.log('itemParam333', itemParam);
        //       break;
        //   }
        //   return itemParam;
        // },
        //提交编辑数据
        submitEditData() {
            let data = [];
            // this.getScreenData();
            // this.getControlData();
            var commItem = { designName: this.oldData[0].designName, themeClassifyName: this.oldData[0].themeClassifyName, themeClassifyValue: this.oldData[0].themeClassifyValue, dimensions: JSON.stringify(this.paramData.dimensions), queryContent: JSON.stringify(this.paramData.conditions) }
            var mainItem = JSON.parse(JSON.stringify(commItem));
            mainItem.other = this.paramData.other;
            mainItem.id = this.oldData[0].id;
            mainItem.pid = this.oldData[0].pid;
            data.push(mainItem);
            // this.setViewContent(this.natureArr, commItem, data)
            this.submitApi(data, 'edit')
        },
        // setViewContent(natureArr, commItem, data) {
        //   for (let natu of natureArr) {
        //     let newItem = JSON.parse(JSON.stringify(commItem));
        //     for (var i = 0; i < this.oldData.length; i++) {
        //       if (this.oldData[i].viewContent != null && JSON.parse(this.oldData[i].viewContent).controlId == natu.id) {
        //         newItem.id = this.oldData[i].id;
        //         newItem.pid = this.oldData[i].pid;
        //         break;
        //       }
        //     }
        //     switch (natu.type) {
        //       case 'chart':
        //         this.getEditControlItem(natu.id, this.paramData.charts, newItem);
        //         data.push(newItem);
        //         break;
        //       case 'table':
        //         this.getEditControlItem(natu.id, this.paramData.tables, newItem);
        //         data.push(newItem);
        //         break;
        //     }
        //     if (natu.type == 'tab') {
        //       for (let t of natu.tabs) {
        //         this.setViewContent(t.natureArr, commItem, data)
        //       }
        //     }
        //   }
        // },
        // //获取编辑控件的项数据
        // getEditControlItem(nId, arry, newItem) {
        //   for (var i = 0; i < arry.length; i++) {
        //     if (nId == arry[i].controlId) {
        //       newItem.viewType = arry[i].type;
        //       newItem.viewContent = JSON.stringify(arry[i]);
        //       break;
        //     }
        //   }
        //   return newItem;
        // },
        // 新增或编辑的保存触发
        submitApi(paramData, type) {
            const _this = this
            let url = ''
                // console.log(JSON.parse(paramData[0].other))
            if (type == 'add') {
                paramData.saveType = this.isPublish ? '2' : '1'
                url = '/ts-bi/api/BiReportDesign/save'
            } else if (type == 'edit') {
                paramData = { saveType: this.isPublish ? '2' : '1', datas: paramData }
                url = '/ts-bi/api/BiReportDesign/update'
            }
            if (this.isPublish) {
                paramData.versionNote = paramData.versionNoteInfo || this.versionNoteInfo
            }
            this.$api({
                url: url,
                method: 'post',
                data: { base64: Base64.encode(JSON.stringify(paramData)) },
                // data: JSON.stringify(paramData),
                headers: {
                    'Content-Type': 'application/json; charset=utf-8'
                }
            }).then(function(response) {
                // 请求成功
                if (response.success) {
                    if ((_this.biModel == 'pivot' && _this.isAdd) || _this.$store.state.bi.isBIAdd['d' + (_this.$store.state.bi.dialogEditors.length - 1)]) { // 保存
                        _this.oldData = []
                        _this.biModel == 'pivot' ? _this.isAdd = false : ''
                        paramData.id = response.object //response.Object
                        _this.oldData.push(paramData)
                        _this.paramData = {}
                        _this.biModel == 'custom' ? _this.$store.commit('setBIAdd', false) : ''
                        _this.$refs.biSaveDialog.close()
                    }
                    if (_this.biModel == 'custom' && (!_this.oldData[0].appType || _this.oldData[0].appType == 3)) { // 刷新业务组件列表
                        _this.$emit('refreshBusinessCom')
                    }
                    _this.oldData[0].versionCode = '草稿'
                    if (_this.isBack || _this.isPublish) { // 返回或发布
                        _this.$emit('refreshDefinedFormTable', { isSaved: true, biModel: _this.biModel })
                    } else { // 留在本页
                        _this.$emit('refreshVCodeDatas')
                    }
                    _this.$utils.msg(_this, '操作成功！', 'success')
                } else {
                    _this.$utils.msg(_this, response.message || '保存失败，请检查页面', 'error')
                }
                // 需关闭
            }).catch(function(error) {
                console.warn(error)
                    // 请求失败
                _this.$utils.msg(_this, error.message, 'error')
            })
        },
        validateAllItem() {
            // if (this.biCustom.weidu.length == 0) {
            //   return '【维度列表】不能为空！';
            // }
            // if (this.biCustom.norm.length == 0) {
            //   return '【指标列表】不能为空！';
            // }
            // if (this.screenData.length == 0) {
            //   return '页面必须包含【参数控件】！';
            // }
            if (this.natureArr.length == 0) {
                return '页面必须包含【控件】！';
            }
            // return ''
            // return this.validateNatureItem(this.natureArr) || '';
            this.validateTableCols(this.natureArr);
            return ''
        },
        // 去除多余的cols表格
        validateTableCols(natureArr) {
            for (let item of natureArr) {
                if (item.type == 'table') {
                    for (let i = 0; i < item.cols.length; i++) { // 提交时，删除多余无效列，缩小字段体积
                        let ce = item.cols[i]
                        if ((!ce.targetId || !ce.title) && ce.pid) { // 无效列
                            item.cols.splice(i, 1) // 删除无效列
                            i--
                        }
                    }
                } else if (item.type == 'tab') {
                    for (let tab of item.tabs) {
                        this.validateTableCols(tab.natureArr);
                    }
                } else if (item.type == 'panel') {
                    this.validateTableCols(item.natureArr);
                }
            }
        },
        // //初始化自然控件
        // validateNatureItem(natureArr) {
        //     for (let item of natureArr) {
        //         if (item.type == 'tab') { // 循环tab页签
        //             for (let tab of item.tabs) {
        //                 if (!tab.natureArr && tab.natureArr.length === 0) {
        //                     return '所有【标签页】内必须包含“图表或表格控件”';
        //                 } else {
        //                     let msg = this.validateNatureItem(tab.natureArr);
        //                     if (msg) {
        //                         return msg;
        //                     }
        //                 }
        //             }
        //         }
        //         if (item.type == 'chart' && (!item.fieldsX || !item.targetIds) && (!item.fieldsX || !item.targetIds)) {
        //             return '【图表】存在必填项为空的属性，请检查';
        //         }
        //         // 表格控件
        //         if (item.type == 'table') {
        //             for (let i in item.cols) {
        //                 var ce = item.cols[i];
        //                 if (ce.pid && ((!ce.targetId && ce.title) || (!ce.title && ce.targetId))) {
        //                     return '【单元格' + (ce.title ? '-' + ce.title : '') + '】存在必填项为空的属性，请检查';
        //                 }
        //                 if (ce.linkTypeId && (!ce.reportName || !ce.openPatternId)) {
        //                     return '【单元格】内的“' + ce.title + '”的"超链接"信息必须完整';
        //                 }
        //                 if (ce.isCommon) {
        //                     var realRel = []; //真实关联数据
        //                     for (let rel of ce.relationTarget) {
        //                         if (rel.id != '') {
        //                             realRel.push(rel);
        //                         }
        //                     }
        //                     if (ce.targetId == '1' || ce.targetId == '4' || ce.targetId == '7') {
        //                         if (realRel.length < 2) {
        //                             return '【单元格】内的“' + ce.title + '”存在必填项为空的属性';
        //                         }
        //                     } else if (realRel.length == 0) {
        //                         return '【单元格】内的“' + ce.title + '”存在必填项为空的属性';
        //                     }
        //                 }
        //             }
        //         }
        //         if (item && item.linkTypeId && (!item.reportName || !item.openPatternId)) {
        //             return '【超链接】信息必须完整';
        //         }
        //     }
        //     return '';
        // }
    }
}
export default submitMixins