/// <reference path="../../../JS/jquery-1.10.2.js" />
/// <reference path="../../../JS/EMW/const.js" />
/// <reference path="../../../JS/EMW/ui.js" />
var ToolBar, InfoTree, Page, dsTree;
function OnPageLoad(page, pars) {
Page = page;
var items = [{ icon: "floppy-disk", text: "保存设置", OnClick: ReportDesigner.Save }];
pars.ReportID = pars.ReportID || Z.ToInt(EMW.Const.Util.GetQueryString("rptid"));
if (pars.ReportID) {
items.push({ icon: "tasks", text: "设置数据源", OnClick: ReportDesigner.OpenDataSourceWind });
items.push({ icon: "remove", text: "移除数据源", OnClick: ReportDesigner.RemoveTable });
}
ToolBar = $(".tool-bar").ToolBar({
display: "tool-vertical",
items: items
});
items = [{ icon: "align-justify", text: "基本设置", isSelected: true, panel: "Info" }];
if (pars.ReportID) {
items.push({ icon: "list-alt", text: "设计器", panel: "Designer" });
}
InfoTree = $("#nav_tree").Tree({
data: items
}).OnSelected(NavChanged);
dsTree = $("#ds_tree").Tree();
//dsTree.OnDblClick(AddField);
page.ActionPanel = $("#action_div");
ReportDesigner.Init(pars);
}
function NavChanged(item) {
$(".edit-panel").hide();
$("#panel_" + item.panel).show();
ToolBar.FindItem("id", 1, { text: item.text });
}
var ReportDesigner = {
ID: 0,
Init: function (pars) {
if (pars.ReportID) {//修改列表
ReportDesigner.ID = pars.ReportID;
EMW.API.UserFileAPI.LoadUserFile(ReportDesigner.ID, ReportDesigner.LoadReport);
}
else if (pars.Table) {//新建列表时候会传主表过来
$("#txt_name").val(pars.Table.Name);
$("#txt_memo").val(pars.Table.Memo);
this.TemplateID = pars.TemplateID || 0;
this.Table = pars.Table;
this.TableID = pars.Table.ID;
this.BindDataSource([pars.Table]);
}
},
DesignerLoaded: function (report) {
this.Designer = report;
},
LoadReport: function (x) {
if (x) {
ReportDesigner.ID = x.ID;
ReportDesigner.TemplateID = x.TemplateID;
ReportDesigner.TableID = x.TableID;
$("#txt_name").val(x.Name);
$("#txt_memo").val(x.Memo);
$("#txt_creator").val(x.CreateUserName);
$("#txt_createtimr").val(x.CreateTime);
ReportDesigner.ReadXml(x);
}
},
OpenDataSourceWind: function () {
var dia = EMW.UI.Dialog({
url: "/pages/table/tableselector.html",
title: "选择数据表",
OnOK: function (list) {
ReportDesigner.AppendTables(list);
}
});
return;
var wind = EMW.UI.Window({
url: "/pages/table/datasource.html",
title: "设置数据源",
width: 1200,
height: 800
});
wind.Table = this.DataSource;
},
RemoveTable: function () {
if (ReportDesigner.ID > 0) {
var item = dsTree.GetSelected();
if (item && item.Table) {
dsTree.Data.Remove(item);
ReportDesigner.Save(function (r) {
if (!r) {
Z.Show("删除数据源失败");
}
else {
ReportDesigner.Reload(false);
}
});
}
}
},
ReadXml: function (x) {
if (x.Content) {
var root = EMW.Const.Str2XML(x.Content).children();
for (var i = 0; i < root.length; i++) {
var name = root[i].nodeName;
var node = $(root[i]);
switch (name) {
case 'Dictionary':
this.ReadDataSources(node);
break;
default:
break;
}
}
}
},
ReadDataSources: function (root, ary) {
var elems = root.children();//TableDataSource s
var arr = [];
for (var i = 0; i < elems.length; i++) {
var elem = $(elems[i]); //TableDataSource
var table = {
Name: elem.attr("Name"),
ID: elem.attr("TableID"),
TableName: elem.attr("ReferenceName"),
Fields: []
};
table.AliasName = table.TableName;
var cols = elem.children();
for (var j = 0; j < cols.length; j++) {
var col = $(cols[j]);
var field = {
Name: col.attr("Alias") || col.attr("Name"),
ID: col.attr("FieldID"),
FieldName: col.attr("Name"),
};
field.AliasName = field.FieldName;
table.Fields.push(field);
}
arr.push(table);
ReportDesigner.BindDataSource(arr);
}
},
BindDataSource: function (tables) {
if (tables) {
ReportDesigner.TablesToTreeNodes(tables, function (ds) {
dsTree.LoadData(ds);
});
}
},
TablesToTreeNodes: function (tables, cb) {
var ids = tables.Select(function (t) {
return t.ID;
});
EMW.API.Table.GetTables(ids, true, function (results) {
var ds = [];
results = results || [];
for (var i = 0; i < tables.length; i++) {
var table = tables[i];
var tb = results.First(function (t) {
return t.ID == table.ID;
});
tb = $.extend({}, table, tb);
var node = {
id: "tb_" + tb.ID,
text: tb.Name,
Table: tb,
children: []
}
var fields = tb.Fields;
tb.Fields = [];
for (var k = 0; k < fields.length; k++) {
var field = $.extend({}, fields[k]);
var child = {
id: field.ID,
text: field.Name,
field: field,
icon: "list"
};
tb.Fields.push(field);
node.children.push(child);
}
ds.push(node);
}
cb(ds);
});
},
GetDataSourceXml: function () {
var xml = [];
if (dsTree.Data) {
var data = dsTree.Data;
for (var i = 0; i < data.length; i++) {
var node = data[i];
var table = node.Table;
xml.push("<TableDataSource");
this.AddProp(xml, "Name", table.Name);
this.AddProp(xml, "TableID", table.ID);
this.AddProp(xml, "ReferenceName", table.TableName);
this.AddProp(xml, "Enabled", "true");
xml.push(">");
if (table.Fields) {
for (var k = 0; k < table.Fields.length; k++) {
var field = table.Fields[k];
xml.push("<Column");
this.AddProp(xml, "Name", field.FieldName);
this.AddProp(xml, "Alias", field.Name);
this.AddProp(xml, "FieldID", field.ID);
this.AddProp(xml, "DataType", this.GetDataType(field));
xml.push(">");
xml.push("</Column>");
}
}
xml.push("</TableDataSource>");
}
}
return xml.join("");
},
GetDataType: function (field) {
switch (field.DBType) {
case EMW.IEntity.DBType.Boolean:
return "System.Boolean";
case EMW.IEntity.DBType.Date:
return "System.DateTime";
case EMW.IEntity.DBType.Int:
return "System.Int32";
case EMW.IEntity.DBType.Double:
case EMW.IEntity.DBType.Money:
return "System.Decimal";
default:
return "System.String";
}
},
AddProp: function (xml, name, val) {
if (val) {
xml.push(" " + name + "=\"" + val + "\"");
}
return this;
},
Save: function (cb) {
var report = {};
report.ID = ReportDesigner.ID;
report.Name = $("#txt_name").val();
report.Memo = $("#txt_memo").val();
report.UserFileType = EMW.IEntity.UserFileTypes.Report,
report.TableID = ReportDesigner.TableID;
report.TemplateID = ReportDesigner.TemplateID;
var xml = ["<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"];
var xmlNode = ReportDesigner.Designer.toXML();
var dsNode = xmlNode.getElementsByTagName("Dictionary")[0];
dsNode.innerHTML = ReportDesigner.GetDataSourceXml();
report.Content = xmlNode.outerHTML;
report.Content = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" + report.Content;
EMW.API.UserFileAPI.SaveUserFile(report, function (x) {
if (x > 0) {
var isNew = false;
if (ReportDesigner.ID == 0) {
ReportDesigner.ID = x;
isNew = true;
}
if (!cb) {
Z.Show("保存成功。", function () {
ReportDesigner.Reload(isNew);
});
}
else {
cb(true);
}
}
else {
if (!cb) {
Z.Show("保存失败。");
}
else {
cb(false);
}
}
});
},
Reload: function (isNew) {
if (isNew) {
var url = location.href + "&rptid=" + ReportDesigner.ID;
window.location = url;
}
else {
location.reload();
}
},
AppendTables: function (tables) {
if (this.ID > 0 && tables) {
var tids = tables.Select(function (t) {
return t.ID;
});
ReportDesigner.TablesToTreeNodes(tables, function (ds) {
var data = dsTree.Data || [];
data = data.concat(ds);
dsTree.Data = data;
ReportDesigner.Save(function (r) {
if (!r) {
Z.Show("添加数据源失败");
}
else {
ReportDesigner.Reload(false);
}
});
});
}
}
};
function GetControlEvent() {
return [{ Text: "数据加载前", Name: "BeforeLoad" }];
}
function OpenClientScript(obj, item) {
var dia = EMW.UI.Dialog({
title: "设置脚本",
url: "/pages/public/function.html",
OnOK: function (e) {
PropPanel.Update(item, e);
}
});
dia.Script = obj[item.name];
}
function Tool() {
this.Name = "新建工具";
}
Tool.prototype.Save = function (xml) {
xml.push("<Tool ID=\"" + this.ID + "\" Type=\"" + this.Type + "\" >");
this.AddProp(xml, "Name", this.Name);
this.AddProp(xml, "Memo", this.Memo, null, true);
this.AddProp(xml, "Field", this.Field);
this.AddProp(xml, "Icon", this.Icon);
this.AddProp(xml, "Select", this.Select, 0);
this.AddProp(xml, "Key", this.Key, 0);
if (this.Form) {
xml.push("<Form ID=\"" + this.Form.ID + "\" Name=\"" + this.Form.Name + "\"/>");
}
xml.push("</Tool>");
}
Tool.prototype.ReadXml = function (root) {
var props = root.children();
for (var j = 0; j < props.length; j++) {
var name = props[j].nodeName;
switch (name) {
case "Form":
this.Form = {};
this.Form.ID = $(props[j]).attr("ID");
this.Form.Name = $(props[j]).attr("Name");
break;
default:
this[name] = $(props[j]).text();
break;
}
}
}
Tool.prototype.Property = [
{ name: "ID", text: "ID", readOnly: true },
{ name: "Name", text: "名称" },
{ name: "Memo", text: "描述", editor: "textarea" }, { name: "Content", text: "内容" },
{ name: "Icon", text: "图标", editor: SelectImage, formatter: FormatImage },
{
name: "Select", text: "选择方式", editor: "select", option: [
{ text: "无", value: "None" }, { text: "单选", value: "Single" }, { text: "多选", value: "Multi" }
], textField: "text", valueField: "value", defaultValue: 0
},
{
name: "Key", text: "快捷键 ", editor: "select", option: [
{ text: "无", value: 0 }, { text: "鼠标双击", value: 1 }, { text: "CTRL+N", value: 2 }, { text: "CTRL+DEL", value: 3 }
], textField: "text", valueField: "value"
},
{
name: "Type", text: "操作", editor: "select", option: [
{ text: "创建数据", value: "Create" }, { text: "修改/查看", value: "Edit" }, { text: "导入", value: "Import" }, { text: "导出", value: "Export" },
{ text: "删除", value: "Delete" }, { text: "合并", value: "Combine" }, { text: "分派", value: "Assign" },
{ text: "自定义", value: "Custom" }
], textField: "text", valueField: "value"
}, { name: "Form", text: "表单 ", editor: OpenSelectPage, textField: "Name" }];
function OpenSelectPage(data, item) {
var dia = EMW.UI.Dialog({
url: "/pages/Public/SelectPage.html",
title: "选择页面",
width: 400,
height: 600,
OnOK: function (r) {
PropPanel.Update(item, r);
}
});
dia.TemplateID = ReportDesigner.TemplateID;
}
function SelectImage(obj, item) {
EMW.UI.ImageSelector.Show(PropPanel.GetRow(item), function (x) {
obj.Icon = x;
PropPanel.Update("Icon", x);
});
}
function FormatImage(obj, item) {
return "<span title='选择图标' class='glyphicon glyphicon-" + (obj.Icon || "ok") + "'></span>";
}
function OpenConditionPage(data, item) {
var wind = EMW.UI.Dialog({
url: "/pages/public/conditionbuilder.html",
title: "条件设置",
width: 800,
height: 600,
OnOK: function (r) {
PropPanel.Update(item, r);
}
});
wind.Table = ReportDesigner.Table.ID;
wind.Conditions = data["Condition"];
}