(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 += '';
$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);