zhaolei
2020-11-20 921de2254ff5712a44ed8575ee8efe34252f6603
commit | author | age
921de2 1 using Microsoft.AspNetCore.Components;
Z 2 using System;
3 using System.Collections.Generic;
4 using System.Threading.Tasks;
5
6 namespace Bootstrap.Admin.Pages.Components
7 {
8     /// <summary>
9     /// 模态框组件类
10     /// </summary>
11     public class AssignModalBase<TItem> : ComponentBase
12     {
13 #nullable disable
14         /// <summary>
15         /// 获得/设置 数据绑定项
16         /// </summary>
17         [Parameter]
18         public TItem Item { get; set; }
19 #nullable restore
20
21         /// <summary>
22         /// 获得/设置 Modal 实例
23         /// </summary>
24         [Parameter]
25         public ModalBase? Modal { get; set; }
26
27         /// <summary>
28         /// 获得/设置 Id
29         /// </summary>
30         [Parameter]
31         public string Id { get; set; } = "";
32
33         /// <summary>
34         /// 获得/设置 弹窗标题
35         /// </summary>
36         [Parameter]
37         public string Title { get; set; } = "未设置";
38
39         /// <summary>
40         /// 获得/设置 表格 Toolbar 按钮模板
41         /// </summary>
42         [Parameter]
43         public RenderFragment<TItem>? ItemTemplate { get; set; }
44
45         /// <summary>
46         /// 获得/设置 Items
47         /// </summary>
48         public IEnumerable<TItem> Items { get; set; } = new TItem[0];
49
50         /// <summary>
51         /// 获得/设置 保存回调事件
52         /// </summary>
53         [Parameter]
54         public Action<IEnumerable<TItem>>? OnSave { get; set; }
55
56         /// <summary>
57         /// OnAfterRender 方法
58         /// </summary>
59         /// <param name="firstRender"></param>
60         protected override void OnAfterRender(bool firstRender)
61         {
62             if (show)
63             {
64                 show = false;
65                 Modal?.Toggle();
66             }
67         }
68
69         /// <summary>
70         /// SetParametersAsync 方法
71         /// </summary>
72         public override Task SetParametersAsync(ParameterView parameters)
73         {
74             parameters.SetParameterProperties(this);
75             if (string.IsNullOrEmpty(Id)) throw new InvalidOperationException("Modal Component Id property must be set");
76             return base.SetParametersAsync(ParameterView.Empty);
77         }
78
79         /// <summary>
80         /// Save 方法
81         /// </summary>
82         protected void Save()
83         {
84             OnSave?.Invoke(Items);
85             Modal?.Toggle();
86         }
87
88         private bool show;
89         /// <summary>
90         /// Update 方法
91         /// </summary>
92         public void Update(IEnumerable<TItem> items)
93         {
94             Items = items;
95             show = true;
96             StateHasChanged();
97         }
98     }
99 }