From f33c58ada0e4d4294b12c7dd56ec1c3817e9db49 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 19 Jul 2019 17:53:36 +0800 Subject: [PATCH] Dashboard & Widget System Image path and Chinese translation. --- docs/en/AspNetCore/Dashboard-Widget-System.md | 4 +- .../AspNetCore/Dashboard-Widget-System.md | 559 ++++++++++++++++++ docs/zh-Hans/docs-nav.json | 4 + .../images/MonthlyProfitWidgetFiles.png | Bin 0 -> 6449 bytes docs/zh-Hans/images/dashboard1.png | Bin 0 -> 43797 bytes 5 files changed, 565 insertions(+), 2 deletions(-) create mode 100644 docs/zh-Hans/AspNetCore/Dashboard-Widget-System.md create mode 100644 docs/zh-Hans/images/MonthlyProfitWidgetFiles.png create mode 100644 docs/zh-Hans/images/dashboard1.png diff --git a/docs/en/AspNetCore/Dashboard-Widget-System.md b/docs/en/AspNetCore/Dashboard-Widget-System.md index 70a95b746b..cbbab68c7f 100644 --- a/docs/en/AspNetCore/Dashboard-Widget-System.md +++ b/docs/en/AspNetCore/Dashboard-Widget-System.md @@ -2,7 +2,7 @@ Dashboard & Widget System allows you to create reusable widgets and dashboards. -![Image of a sample, create with this system](D:\github\abp\docs\en\images\dashboard1.png) +![Image of a sample, create with this system](..\images\dashboard1.png) You can see a sample dashboard, build with that system, in the screenshot above. Top section, where the filters and refresh button is placed is global filter section and each card below is a widget. Both widgets and global filters are reusable components. Also dashboard layout is reusable too. @@ -213,7 +213,7 @@ We will use **FilterDto** in **Global Filters** section. Now we can start to work on our widget. -![widget file tree](D:\github\abp\docs\en\images\MonthlyProfitWidgetFiles.png) +![widget file tree](..\images\MonthlyProfitWidgetFiles.png) You can see the files that we will create our widget. (If your widget won't need css or javascript, you don't need to create them and contributors as well.) diff --git a/docs/zh-Hans/AspNetCore/Dashboard-Widget-System.md b/docs/zh-Hans/AspNetCore/Dashboard-Widget-System.md new file mode 100644 index 0000000000..a804f9aedd --- /dev/null +++ b/docs/zh-Hans/AspNetCore/Dashboard-Widget-System.md @@ -0,0 +1,559 @@ +# 仪表板和小部件(Widget)系统 + +仪表板和小部件(Widget)系统允许你创建可重用的小部件和仪表板。 + +![Image of a sample, create with this system](../images/dashboard1.png) + +你可以在上面的屏幕截图中看到使用该系统构建的示例仪表板. 放置过滤器和刷新按钮的顶部是全局过滤器部分,下面的每个卡片都是一个小部件. 小部件和全局过滤器都是可重用的组件.仪表板布局也可以重复使用. + +现在我们将看到如何在应用程序中使用它们. + +## 仪表板组件 + +首先,我们将在应用程序中定义仪表板,你可以从[abp.io/get-started](https://abp.io/get-started)下载新的应用程序模板. 为简单起见,请不要使用分层选项. + +在 *.Web项目中, 我们创建**DashboardNames.cs**和**DashboardDefinitionProvider.cs**类: + +```c# + public static class DashboardNames + { + public const string MyDashboard = "MyDashboard"; + + public static string[] GetAll() + { + return ReflectionHelper.GetPublicConstantsRecursively(typeof(DashboardNames)); + } + } +``` + +```c# + public static class DashboardDefinitionProvider + { + public static List GetDefinitions() + { + var myDashboard = new DashboardDefinition( + DashboardNames.MyDashboard, + LocalizableString.Create("MyDashboard") + ); + + return new List + { + myDashboard + }; + } + } +``` + +我们需要将该定义添加到**WebModule.cs**文件中**ConfigureServices**方法的**DashboardOptions**: + +```c# +using Volo.Abp.AspNetCore.Mvc.UI.Dashboards; +//... + public class DashboardDemoWebModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + //other codes.. + Configure(options => + { + options.Dashboards.AddRange(DashboardDefinitionProvider.GetDefinitions()); + }) + //other codes.. + } + //other codes.. + } +``` + +然后我们可以创建我们定义的仪表板它将被渲染 **Pages/MyDashboard.cshtml**: + +```html +@page +@using DashboardDemo.Dashboards +@using Microsoft.Extensions.Localization +@using Volo.Abp.AspNetCore.Mvc.UI.Dashboards +@using Volo.Abp.AspNetCore.Mvc.UI.Widgets +@inject IWidgetRenderer WidgetRenderer +@inject IDashboardRenderer DashboardRenderer +@inject IStringLocalizerFactory localizer +@model DashboardDemo.Pages.MyDashboardModel +@{ +} +@section styles { + +} +@section scripts { + +} + + @await DashboardRenderer.RenderAsync(Component, new { dashboardName = DashboardNames.MyDashboard }) + + +``` + +**DashboardRenderer.RenderAsync** 方法呈现我们定义的仪表板. 现在我们必须定义script和style bundles. 你可以在上面的代码中看到它们的用法: + +```c# + [DependsOn(typeof(AbpBasicDashboardStyleContributor))] + public class MyDashboardStyleBundleContributor : BundleContributor + { + public override void ConfigureBundle(BundleConfigurationContext context) + { + + } + } +``` + +```c# + [DependsOn(typeof(AbpBasicDashboardScriptContributor))] + public class MyDashboardScriptBundleContributor : BundleContributor + { + public override void ConfigureBundle(BundleConfigurationContext context) + { + + } + } +``` + +仪表板系统使用[Bundling & Minification](../Bundling-Minification.md)作为脚本和样式. 仪表板贡献者将依赖于他们的小部件和全局过滤器贡献者, 小部件和全局过滤器将依赖于他们需要的其他贡献者. 这可以保证多个小部件可以请求javascript库, 并且不会重复. + +我们需要将这些贡献者添加到**WebModule.cs**文件的**ConfigureServices**方法中的bundling选项: + +```c# + Configure(options => + { + options.ScriptBundles.Add(DashboardNames.MyDashboard, configuration => + { + configuration.AddContributors(typeof(MyDashboardScriptBundleContributor)); + }); + + options.StyleBundles.Add(DashboardNames.MyDashboard, configuration => + { + configuration.AddContributors(typeof(MyDashboardStyleBundleContributor)); + }); + }); +``` + +现在我们可以开始创建小部件了. + +## 小部件 + +小部件是在将它们添加到仪表板时按顺序呈现的视图组件. 它们也可以在任何你喜欢的地方呈现. + +我们将看到如何创建小部件并将其添加到我们创建的仪表板中. 我们将在本教程开头的屏幕截图中创建"每月利润"小部件. + +在创建小部件之前,我们需要一个应用程序服务来返回小部件的虚拟数据. + +```c# +namespace DashboardDemo +{ + public interface IDemoStatisticAppService : IApplicationService + { + Task GetMonthlyUserStatistic(FilterDto filter); + + Task GetMonthlyProfitStatistic(FilterDto filter); + } + + public class DemoStatisticAppService : ApplicationService, IDemoStatisticAppService + { + public async Task GetMonthlyProfitStatistic(FilterDto filter) + { + var monthCount = GetLabels(filter, out var monthList); + + var data = Enumerable + .Repeat(0, monthCount) + .Select(i => new Random().Next(-20, 40)) + .ToArray(); + + return new MonthlyProfitStatisticDto { Labels = monthList.ToArray(), Data = data }; + } + + private static int GetLabels(FilterDto filter, out List monthList) + { + DateTime endDate = filter.EndDate ?? DateTime.Now; + DateTime startDate = filter.StartDate ?? DateTime.Now.AddYears(-1); + + if (filter.StartDate > filter.EndDate) + { + throw new BusinessException("Start date can not be greater than end date."); + } + + var months = new[] {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"}; + var monthCount = (endDate.Year - startDate.Year) * 12 + endDate.Month - startDate.Month +1; + monthList = new List(); + + for (int i = 0; i < monthCount; i++) + { + monthList.Add(months[endDate.Month-1]); + endDate = endDate.AddMonths(-1); + } + + monthList.Reverse(); + + return monthCount; + } + } + + public class MonthlyProfitStatisticDto + { + public string[] Labels { get; set; } + + public int[] Data { get; set; } + } + + public class FilterDto + { + public DateTime? StartDate { get; set; } + + public DateTime? EndDate { get; set; } + } +} +``` + +我们将在**Global Filters**中使用**FilterDto**. + +现在我们可以开始处理我们的小部件了. + +![widget file tree](..\images\MonthlyProfitWidgetFiles.png) + +你可以看到我们将创建小部件的文件. (如果你的小部件不需要css或javascript,则不需要创建它们和贡献者). + +首先我们创建 **MonthlyProfitWidgetViewComponent**: + +```html +@inject IHtmlLocalizer L +@using DashboardDemo.Localization.DashboardDemo +@using Microsoft.AspNetCore.Mvc.Localization +@model DashboardDemo.Pages.widgets.MonthlyProfitWidgetViewComponent +@{ +} +
+ + @L["Monthly Profit"] + +
+ +
+
+
+
+ +``` + +```c# + public class MonthlyProfitWidgetViewComponent : AbpViewComponent + { + public const string Name = "MonthlyProfitWidget"; + + public const string DisplayName = "Monthly Profit Widget"; + + public IViewComponentResult Invoke() + { + return View("/Pages/widgets/MonthlyProfitWidget/MonthlyProfitWidgetViewComponent.cshtml", new MonthlyProfitWidgetViewComponent()); + } + } +``` + +我们将使用[chart.js library](https://www.chartjs.org/)来创建图表. 要将此库添加到项目中,我们将包依赖项添加到**package.json**: + +```json + "dependencies": { + //other dependencies... + "chart.js": "^2.8.0" + } +``` + +然后添加映射到**abp.resourcemappings.js**:(参见[相关文档](/AspNetCore/Client-Side-Package-Management#resource-mapping-definition-file)) + +```js + mappings: { + //other mappings... + "@node_modules/chart.js/dist/*.*": "@libs/chart.js/" + } +``` + +现在我们的应用程序中有chart.js库. 为了使用它,我们将创建它的贡献者: + +```c# + public class ChartjsScriptContributor : BundleContributor + { + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.Add("/libs/chart.js/Chart.js"); + } + } + + public class ChartjsStyleContributor : BundleContributor + { + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.Add("/libs/chart.js/Chart.css"); + } + } +``` + +现在我们为小部件文件创建贡献者并使它们依赖于chart.js: + +```c# + [DependsOn(typeof(JQueryScriptContributor))] + [DependsOn(typeof(ChartjsScriptContributor))] + public class MonthlyProfitWidgetScriptBundleContributor : BundleContributor + { + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.Add("/Pages/widgets/MonthlyProfitWidget/MonthlyProfitWidget.js"); + } + } + + [DependsOn(typeof(BootstrapStyleContributor))] + [DependsOn(typeof(ChartjsStyleContributor))] + public class MonthlyProfitWidgetStyleBundleContributor : BundleContributor + { + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.Add("/Pages/widgets/MonthlyProfitWidget/MonthlyProfitWidget.css"); + } + } +``` + +**MonthlyProfitWidget.css** 对于我们的小部件是空的. + +**MonthlyProfitWidget.js** 内容如下: + +```js +(function ($) { + var $container = $('#MonthlyProfitWidgetContainer'); + if ($container.length > 0) { + var chart = {}; + + var createChart = function () { + dashboardDemo.demoStatistic.getMonthlyProfitStatistic({}).then(function (result) { + chart = new Chart($container.find('#MonthlyProfitStatistics'), { + type: 'line', + data: { + labels: result.labels, + datasets: [{ + label: 'Monthly Profit', + data: result.data, + backgroundColor: 'rgba(255, 255, 132, 0.2)' + }] + }, + options: { + scales: { + yAxes: [{ + ticks: { + beginAtZero: true + } + }] + } + } + }); + }); + }; + + createChart(); + } +})(jQuery); + +``` + +我们创建了小部件. 在将其添加到仪表板之前还有最后一件事, 我们需要定义它: + +```c# + public static class WidgetDefinitionProvider + { + public static List GetDefinitions() + { + //other widgets... + + var monthlyProfitWidget = new WidgetDefinition( + MonthlyProfitWidgetViewComponent.Name, + LocalizableString.Create(MonthlyProfitWidgetViewComponent.DisplayName), + typeof(MonthlyProfitWidgetViewComponent) + ) + .SetDefaultDimension(6, 4) + .AddRequiredPermission(IdentityPermissions.Users.Default); + + return new List + { + //other widgets... + monthlyProfitWidget + }; + } + } +``` + +**SetDefaultDimension(int x, int y):** 设置小部件的尺寸. 在仪表板中渲染时将使用此选项. X表示bootstrap中的列宽,可以在1到12之间.Y是以像素为单位的高度,将乘以100. + +**AddRequiredPermission(string permissionName)**: 设置窗口小部件的权限. 因此, 没有此权限的用户将看不到此小部件. + +我们需要在**WebModule.cs**文件的**ConfigureServices**方法中将小部件定义添加到**WidgetOptions**: + +```c# + Configure(options => + { + options.Widgets.AddRange(WidgetDefinitionProvider.GetDefinitions()); + }); +``` + +现在我们的小部件已经可以使用了. 我们将使用**DashboardDefinitionProvider.cs**中**WithWidget**方法将其添加到仪表板中: + +```c# + var myDashboard = new DashboardDefinition( + DashboardNames.MyDashboard, + LocalizableString.Create("MyDashboard")) + .WithWidget(MonthlyProfitWidgetViewComponent.Name); +``` + +并将javascript和contributor依赖项添加到仪表板: + +```c# + [DependsOn(typeof(MonthlyProfitWidgetScriptBundleContributor))] // <<<<<< + [DependsOn(typeof(AbpBasicDashboardScriptContributor))] + public class MyDashboardScriptBundleContributor : BundleContributor + { + public override void ConfigureBundle(BundleConfigurationContext context) + { + + } + } + + [DependsOn(typeof(MonthlyProfitWidgetStyleBundleContributor))] // <<<<<< + [DependsOn(typeof(AbpBasicDashboardStyleContributor))] + public class MyDashboardStyleBundleContributor : BundleContributor + { + public override void ConfigureBundle(BundleConfigurationContext context) + { + + } + } +``` + +现在启动应用程序并转到 **/MyDashboard**页面. + +## 全局过滤器 + +全局过滤器用于过滤具有相同输入的所有小部件. 如果向仪表板添加全局过滤器,则会显示刷新按钮,以使用新过滤器值刷新窗口小部件. 单击此按钮时,它会将过滤器序列化为对象,并以该对象作为参数触发事件. + +我们来实现一个**date range**全局过滤器. + +首先我们创建 **DateRangeGlobalFilterViewComponent.cshtml**: + +```html +@inject IHtmlLocalizer L +@using DashboardDemo.Localization.DashboardDemo +@using Microsoft.AspNetCore.Mvc.Localization +@model DashboardDemo.Pages.widgets.Filters.DateRangeGlobalFilterViewComponent +@{ +} +
+
+
+ + +
+
+ + +
+
+
+ + +``` + +```c# +namespace DashboardDemo.Pages.widgets.Filters +{ + [ViewComponent] + public class DateRangeGlobalFilterViewComponent : ViewComponent + { + public const string Name = "DateRangeGlobalFilter"; + + public const string DisplayName = "Date Range Filter"; + + public IViewComponentResult Invoke() + { + return View("/Pages/widgets/Filters/DateRangeGlobalFilterViewComponent.cshtml", new DateRangeGlobalFilterViewComponent()); + } + } +} +``` + +您可以像添加到窗口小部件一样添加javascript和css文件,但在此示例中不需要它们. + +我们将在**WebModule.cs**文件的**ConfigureServices**方法中将全局过滤器定义添加到**GlobalFilterOptions**: + +```c# + Configure(options => + { + options.GlobalFilters.AddRange(GlobalFilterDefinitionProvider.GetDefinitions()); + }); +``` + +并使用**WithGlobalFilter**方法将其添加到**DashboardDefinitionProvider.cs**中的仪表板中: + +```c# + var myDashboard = new DashboardDefinition( + DashboardNames.MyDashboard, + LocalizableString.Create("MyDashboard")) + .WithWidget(MonthlyProfitWidgetViewComponent.Name) + .WithGlobalFilter(DateRangeGlobalFilterViewComponent.Name); +``` + +现在让我们在小部件中捕获刷新事件: + +```js +(function ($) { + var $container = $('#MonthlyProfitWidgetContainer'); + if ($container.length > 0) { + var chart = {}; + + var createChart = function () { + dashboardDemo.demoStatistic.getMonthlyProfitStatistic({}).then(function (result) { + chart = new Chart($container.find('#MonthlyProfitStatistics'), { + type: 'line', + data: { + labels: result.labels, + datasets: [{ + label: 'Monthly Profit', + data: result.data, + backgroundColor: 'rgba(255, 255, 132, 0.2)' + }] + }, + options: { + scales: { + yAxes: [{ + ticks: { + beginAtZero: true + } + }] + } + } + }); + }); + }; + + $(document).on('RefreshWidgets', + function (event, filters) { + dashboardDemo.demoStatistic.getMonthlyProfitStatistic({ startDate: filters.startDate, endDate: filters.endDate }).then(function (result) { + chart.data = { + labels: result.labels, + datasets: [{ + label: 'Monthly Profit', + data: result.data, + backgroundColor: 'rgba(255, 255, 132, 0.2)' + }] + }, + chart.update(); + }); + }); + + createChart(); + } +})(jQuery); + +``` + +## 源代码 + +你可以在[Github](https://github.com/abpframework/abp/tree/dev/samples/DashboardDemo)查看仪表板的示例应用程序 \ No newline at end of file diff --git a/docs/zh-Hans/docs-nav.json b/docs/zh-Hans/docs-nav.json index 18771ac2b5..1150545240 100644 --- a/docs/zh-Hans/docs-nav.json +++ b/docs/zh-Hans/docs-nav.json @@ -220,6 +220,10 @@ "text": "Tag Helpers", "path": "AspNetCore/Tag-Helpers/Index.md" }, + { + "text": "仪表板和小部件(Widget)系统", + "path": "AspNetCore/Tag-Helpers/DashboardWidgetSystem.md" + }, { "text": "主题化", "path": "AspNetCore/Theming.md" diff --git a/docs/zh-Hans/images/MonthlyProfitWidgetFiles.png b/docs/zh-Hans/images/MonthlyProfitWidgetFiles.png new file mode 100644 index 0000000000000000000000000000000000000000..e1e9d316f5b36b008ac67050fa151a7ef956abb4 GIT binary patch literal 6449 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 literal 0 HcmV?d00001 diff --git a/docs/zh-Hans/images/dashboard1.png b/docs/zh-Hans/images/dashboard1.png new file mode 100644 index 0000000000000000000000000000000000000000..4102bbd4c13e44a9f68b55d71fe82ece78a8e4d3 GIT binary patch literal 43797 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�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 JC>7>){ZIWd+D`xg literal 0 HcmV?d00001