ReportDesigner.js

/// <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"];
}

  

posted @ 2017-02-15 11:15  麦籽  阅读(211)  评论(0)    收藏  举报