(function ($, zou) { "use strict"; $.lrCustmerFormDesigner = { init: function ($self, op) { var dfop = { data: [{// 选项卡数据 id: zou.newGuid(), title: '主表信息', columns: [] }] } $.extend(dfop, op || {}); dfop.id = $self.attr('id'); $self[0].zCustmerFormDesigner = { dfop: dfop }; $self.addClass('z-custmerform-designer-layout'); var _html = ''; _html += '
'; _html += '
'; _html += '
'; _html += '
'; _html += ''; _html += '
'; _html += '
'; _html += '
'; _html += ''; _html += '
'; _html += '
'; _html += '
'; $self.html(_html); $.lrCustmerFormDesigner.bind($self); $.lrCustmerFormDesigner.compontinit($self); $.lrCustmerFormDesigner.compontbind($self); $.lrCustmerFormDesigner.renderTabs($self); $.lrCustmerFormDesigner.renderComponts($self); }, // 绑定表单设计器的全局事件 bind: function ($self) { var dfop = $self[0].zCustmerFormDesigner.dfop; // 优化滚动条 $('#lr_custmerform_compont_list_' + dfop.id).mCustomScrollbar({ theme: "minimal-dark" }); $('#lr_custmerform_designer_tabs_' + dfop.id).mCustomScrollbar({ axis: "x", theme: "minimal-dark" }); $('#lr_custmerform_designer_layout_area_' + dfop.id).mCustomScrollbar({ theme: "minimal-dark" }); $('#lr_custmerform_compont_property_' + dfop.id).mCustomScrollbar({ theme: "minimal-dark" }); $('#lr_custmerform_designer_layout_area_' + dfop.id + ' .mCSB_container')[0].dfop = dfop; // 预览表单 $self.find('#lr_custmerform_preview_btn_' + dfop.id).on('click', function () { $.lrCustmerFormDesigner.saveComponts($self); var url = "/FormDesigner/PreviewForm?key=" + window.keyValue; layer.open({ type: 2, title: '预览表单', shadeClose: true, shade: 0.4, area: ['80%', '80%'], content: url }); }); }, // 组件初始化 compontinit: function ($self) {// 组件初始化 var dfop = $self[0].zCustmerFormDesigner.dfop; var $compontList = $self.find('#lr_custmerform_compont_list_' + dfop.id + ' .mCSB_container'); $.each($.formComponents, function (i, component) { var $component = component.init(); $compontList.append($component); }); $compontList.find('.z-custmerform-component').draggable({ connectToSortable: '#lr_custmerform_designer_layout_area_' + dfop.id + ' .mCSB_container', helper: "clone", revert: "invalid" }); $('#lr_custmerform_designer_layout_area_' + dfop.id + ' .mCSB_container').sortable({ opacity: 0.4, delay: 300, cursor: 'move', placeholder: "ui-state-highlight", stop: function (event, ui) { var $compont = $(ui.item[0]); var componttype = $compont.attr('data-type'); if (!!componttype) {//如果是第一次移入,需要对单元项进行初始化处理 $compont.addClass('z-compont-item').css({ 'width': '100%' }); $compont.removeClass('z-custmerform-component'); $compont.removeAttr('data-type'); $.formComponents[componttype].render($compont); $compont[0].dfop.id = zou.newGuid(); $compont.trigger("click"); } else { $compont.trigger("click"); } }, start: function (event, ui) { $self.find(".z-custmerform-designer-layout-center-bg").hide(); var $highlight = $self.find(".ui-state-highlight"); $highlight.html('拖放控件到这里'); var $compont = $(ui.item[0]); var componttype = $compont.attr('data-type'); if (!componttype) { $highlight.css({ width: ((100 / $compont[0].dfop.proportion) + "%") }); } }, out: function (event, ui) { if (ui.helper != null) { var $componts = $('.z-custmerform-designer-layout-area .mCSB_container .z-compont-item'); if ($componts.length <= 1) { if ($componts.length === 1) { if ($componts.find('.z-compont-value').length === 0) { $(".z-custmerform-designer-layout-center-bg").show(); } } else { $(".z-custmerform-designer-layout-center-bg").show(); } } } } }); }, // 组件事件注册 compontbind: function ($self) { $self.delegate('.z-compont-item', 'click', function () { var $this = $(this); if (!$this.hasClass('active')) { $('.z-custmerform-designer-layout-area .mCSB_container .z-compont-item').removeClass('active'); $this.addClass('active'); if ($('.z-custmerform-designer-layout').css('padding-right') === '0px') { $('.z-custmerform-designer-layout').animate({ 'padding-right': '240px', speed: 2000 }); $('.z-custmerform-designer-layout-right').animate({ right: 0, speed: 2000 }); } setTimeout(function () { $.formComponents[$this[0].dfop.type].property($this); }, 150); } }); $self.delegate('.z-compont-remove i', 'click', function () { var $compont = $(this).parents('.z-compont-item'); $compont.remove(); if ($('.z-custmerform-designer-layout-area .mCSB_container .z-compont-item').length === 0) { $('.z-custmerform-designer-layout-right').animate({ right: '-240px', speed: 2000 }); $('.z-custmerform-designer-layout').animate({ 'padding-right': '0px', speed: 2000 }); $(".z-custmerform-designer-layout-center-bg").show(); } else { $('.z-custmerform-designer-layout-area .mCSB_container .z-compont-item').eq(0).trigger('click'); } }); }, // 渲染选项卡 renderTabs: function ($self) {// 渲染选项卡 var dfop = $self[0].zCustmerFormDesigner.dfop; var $tabs = $('#lr_custmerform_designer_tabs_' + dfop.id + ' ul'); var tabsLength = dfop.data.length; var index = 0; $tabs.html(""); for (var i = 0; i < tabsLength; i++) { var tabItem = dfop.data[i]; $tabs.append('
  • ' + tabItem.text + '
  • '); if (dfop._currentTabId === tabItem.id) { index = i; } } // 获取当前选项卡的组件数据并渲染 if (dfop._currentTabId !== dfop.data[index].id) { dfop._currentTabId = dfop.data[index].id; dfop._currentComponts = dfop.data[index].columns; dfop._isRenderComponts = true; $.lrCustmerFormDesigner.renderComponts($self); } if (tabsLength <= 1) { $self.find('.z-custmerform-designer-layout-center').removeClass('hasTab'); } else { $self.find('.z-custmerform-designer-layout-center').addClass('hasTab'); $tabs.find('li').eq(index).addClass('active'); } }, // 渲染数据 renderData: function ($self) { var dfop = $self[0].zCustmerFormDesigner.dfop; var $tabs = $('#lr_custmerform_designer_tabs_' + dfop.id + ' ul'); var tabsLength = 1; $tabs.html(""); for (var i = 0; i < tabsLength; i++) { var tabItem = dfop.data[i]; $tabs.append('
  • ' + tabItem.text + '
  • '); if (i === 0) { dfop._currentTabId = tabItem.id; dfop._currentComponts = dfop.data[0].columns; dfop._isRenderComponts = true; $.lrCustmerFormDesigner.renderComponts($self); } } if (tabsLength <= 1) { $self.find('.z-custmerform-designer-layout-center').removeClass('hasTab'); } else { $self.find('.z-custmerform-designer-layout-center').addClass('hasTab'); $tabs.find('li').eq(0).addClass('active'); } }, // 保存当前选项卡的组件数据 saveComponts: function ($self) { var dfop = $self[0].zCustmerFormDesigner.dfop; var columns = []; var compontsLayout = $('#lr_custmerform_designer_layout_area_' + dfop.id + ' .mCSB_container'); compontsLayout.find('.z-compont-item').each(function () { var column = $(this)[0].dfop; columns.push(column); }); for (var i = 0, l = dfop.data.length; i < l; i++) { if (dfop.data[i].id === dfop._currentTabId) { dfop.data[i].columns = columns; break; } } }, // 渲染组件 renderComponts: function ($self) { var dfop = $self[0].zCustmerFormDesigner.dfop; if (dfop._isRenderComponts) { var compontsLayout = $('#lr_custmerform_designer_layout_area_' + dfop.id + ' .mCSB_container'); compontsLayout.html(''); //console.log(JSON.stringify(dfop._currentComponts)); if (dfop._currentComponts.length > 0) { $self.find(".z-custmerform-designer-layout-center-bg").hide(); for (var i = 0, l = dfop._currentComponts.length; i < l; i++) { var compontItem = dfop._currentComponts[i]; var $column = $('
    '); $column[0].dfop = compontItem; $column.css({ 'width': 100 / parseInt(compontItem.proportion) + '%' }); $.formComponents[compontItem.type].render($column); compontsLayout.append($column); if (i === 0) { $column.trigger("click"); } } } else { $('.z-custmerform-designer-layout-right').animate({ right: '-240px', speed: 2000 }); $('.z-custmerform-designer-layout').animate({ 'padding-right': '0px', speed: 2000 }); $(".z-custmerform-designer-layout-center-bg").show(); } dfop._isRenderComponts = false; } }, // 判定所有组件数据是否输入完整(主要是数据库绑定信息) validData: function ($self) { var dfop = $self[0].zCustmerFormDesigner.dfop; var _data = {}; var res = true; for (var i = 0, l = dfop.data.length; i < l; i++) { for (var j = 0, jl = dfop.data[i].columns.length; j < jl; j++) { if (dfop.data[i].columns[j].type !== 'label') { var table = dfop.data[i].columns[j].table; var field = dfop.data[i].columns[j].field; var title = dfop.data[i].columns[j].title; if (table !== '' && field !== '' && (table !== undefined && field !== undefined)) { //console.log(JSON.stringify(_data)); if (!!_data[table + '_' + field]) { layer.alert('【' + title + '】绑定数据表字段与【' + _data[table + '_' + field] + '】重复!'); res = false; } else { _data[table + '_' + field] = title; } } else { if (dfop.data[i].columns[j].type === 'girdtable') { if (table === '' || table === undefined) { layer.alert('【' + title + '】请绑定数据表!'); res = false; } } else { if (table === '' || table === undefined) { layer.alert('【' + title + '】请绑定数据表!'); res = false; } else if (field === '' || field === undefined) { layer.alert('【' + title + '】请绑定数据字段!'); res = false; } } } } } } return res; } }; //对外暴露接口 $.fn.lrCustmerFormDesigner = function (type, op) { var $this = $(this); if (!$this.attr('id')) { return false; } var dfop; switch (type) { // 初始化设计器 case "init": $.lrCustmerFormDesigner.init($this, op); break; // 判定所有组件数据是否输入完整(主要是数据库绑定信息) case 'valid': $.lrCustmerFormDesigner.saveComponts($this); return $.lrCustmerFormDesigner.validData($this); case "get": $.lrCustmerFormDesigner.saveComponts($this); dfop = $this[0].zCustmerFormDesigner.dfop; var $json = dfop.data[0].columns; $.each($json, function (i, item) { if (item != null && item != undefined && item.type === "girdtable") {//指标 dfop.data[0].columns.splice(i, 1); json.children = item; } }); json.maindata = dfop.data; return json; case "set": dfop = $this[0].zCustmerFormDesigner.dfop; dfop.data = op.data; $.lrCustmerFormDesigner.renderData($this); break; } }; })(jQuery, top.zou);