Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
138 commits
Select commit Hold shift + click to select a range
1791386
#28 添加scope和grant types控件
niltor Jun 30, 2025
9dd0467
#27
niltor Jul 1, 2025
beaf842
#27 主页的多语言处理
niltor Jul 1, 2025
599f418
udpate home
niltor Jul 1, 2025
9374ce7
#34 添加 源代码生成器,生成多语言常量
niltor Jul 1, 2025
0fdbbe6
#34 完善多语言常量源代码生成逻辑;修改程序集名称,从Analyzers 修改成SourceGeneration
niltor Jul 3, 2025
8ec67ef
使用新的生成的语言常量Key
niltor Jul 3, 2025
2cd221d
#36 Add new Service project: AdminService; Imporve Manager Source ge…
niltor Jul 3, 2025
7e25870
temp save
niltor Jul 3, 2025
830c8de
源代码 生成 器,忽略Share
niltor Jul 3, 2025
e3c7f33
布局调整
niltor Jul 3, 2025
5eb5713
dialog bug
llp1520 Jul 3, 2025
5a2ea16
Merge branch 'dev-v10' of https://github.com/AterDev/ater.dry.cli int…
llp1520 Jul 3, 2025
e8ea5e5
调整add project dialog
niltor Jul 3, 2025
86036d0
fix mainlayout style
llp1520 Jul 3, 2025
b5b21ac
simple fix and feature.
llp1520 Jul 3, 2025
2bb3abd
change global.json
niltor Jul 3, 2025
b268976
移除 模板 中的identityServer,后续独立项目实现
niltor Jul 4, 2025
877d3e2
update ater packages
niltor Jul 4, 2025
0834364
fix:ManagerSourceGen
niltor Jul 4, 2025
5e81b03
多语言常量生成处理
niltor Jul 4, 2025
8bf3f0d
update
niltor Jul 4, 2025
37c1391
update ater package version
niltor Jul 4, 2025
8e2c643
#37 主页列表与添加表单的验证
niltor Jul 5, 2025
acf0fa0
#38 添加侧边栏导航菜单;完善布局页内容
niltor Jul 5, 2025
57f996e
新增简易实体列表
llp1520 Jul 5, 2025
28bcfc7
新增列表和代码编辑器
llp1520 Jul 6, 2025
b6eef05
#38 处理实体列表的获取
niltor Jul 6, 2025
7d830d9
merge
niltor Jul 6, 2025
8ee00de
fix entityList
niltor Jul 6, 2025
7878fe2
调整添加本地项目时的调用方法
niltor Jul 6, 2025
1d8acd1
列表部分细节完善
niltor Jul 6, 2025
3d30af4
#38 adjust UI element;
niltor Jul 7, 2025
f0fb155
update ui
niltor Jul 8, 2025
d09c6e6
测试点击背景关闭modal提交
llp1520 Jul 8, 2025
7e2f474
完善路由跳转,projectId的传递
niltor Jul 8, 2025
f815d85
add openapi page
niltor Jul 8, 2025
f14481a
Merge branch 'dev-v10' of https://github.com/AterDev/ater.dry.cli int…
niltor Jul 8, 2025
ee69d9d
使用ProjectContext存储 projectId,以便在切换时保留当前项目信息。
niltor Jul 9, 2025
d88d8c7
OpenApi的添加和编辑弹窗
niltor Jul 10, 2025
824cf48
#38 新增实体搜索功能
llp1520 Jul 10, 2025
9d43862
使用menu展示api docs
niltor Jul 10, 2025
b017a6a
Merge branch 'dev-v10' of https://github.com/AterDev/ater.dry.cli int…
niltor Jul 10, 2025
f6ecd8e
openapi页面 基础数据内容的展示
niltor Jul 11, 2025
f600219
openapi类型点击后的属性展示
niltor Jul 11, 2025
7028a72
template: update WhereNotNull extension
niltor Jul 12, 2025
a929e6a
temp update
niltor Jul 12, 2025
66661a9
#38 模块的添加/删除,实体刷新,解决方案清理,服务的查看与添加.
niltor Jul 13, 2025
d4887d2
# 代码生成弹窗
niltor Jul 14, 2025
a9bebd3
添加多选和 批量生成menu
niltor Jul 14, 2025
19b9210
#38 添加通知中心,显示生成结果
niltor Jul 15, 2025
07fd136
openapi 客户端生成的弹窗
niltor Jul 15, 2025
fe84bcf
request client 生成调用
niltor Jul 15, 2025
96800ee
添加了 数据管理中的提示词和模板基础代码
niltor Jul 16, 2025
507464d
添加对 template 和 prompt文件的管理功能
niltor Jul 17, 2025
c9fe07d
local file 空目录时的处理
niltor Jul 17, 2025
c57f72b
移除GenStep对其他类型的支持,只保留模板生成
niltor Jul 17, 2025
959d8b3
GenTask 页面基础布局
niltor Jul 17, 2025
d39d086
生成任务的创建和修改
niltor Jul 18, 2025
8325ce2
关于生成task 和step 的基础操作
niltor Jul 19, 2025
a5aa3fb
update gen task
niltor Jul 19, 2025
3cc473b
调试运行任务; 默认在操作后清除追踪内容。
niltor Jul 20, 2025
0ba37f9
prepared: McpTool page and create solution Page
niltor Jul 20, 2025
ebf75c0
对数据库服务注入方式进行调整
niltor Jul 21, 2025
1d87771
模板及创建解决方案page更新
niltor Jul 22, 2025
b648662
完成 解决方案创建页面
niltor Jul 22, 2025
469bd35
config project 窗口
niltor Jul 23, 2025
492133b
use openapi 2.0 and temp save
niltor Jul 23, 2025
95c79d1
临时处理 openapi2.0 升级带来的各种问题
niltor Jul 24, 2025
d23c26f
删除了controller
niltor Jul 25, 2025
893e365
模板中的openapi 修改,以及基类控制器的修改
niltor Jul 25, 2025
f48b509
mcp的编辑
niltor Jul 26, 2025
606bac1
MCP的新增与编辑,关联内容的选择
niltor Jul 26, 2025
705ef65
Add null checks and improve error handling
niltor Jul 26, 2025
9ec29a3
open api 内容解析的修复;页面切换api doc时的事件;
niltor Jul 27, 2025
a0c2d3e
对mcp tool 的添加/大修改/删除操作
niltor Jul 28, 2025
558ac01
处理mcp tool ,暂时忽略IMcpServer注入问题
niltor Jul 28, 2025
c7dab7e
处理代码中空值问题
niltor Jul 28, 2025
cc511da
code format
niltor Jul 29, 2025
8480d66
调整打包脚本
niltor Jul 29, 2025
aa8b58e
update update studio
niltor Jul 29, 2025
38572a4
remvoe blzorMonaco
niltor Jul 29, 2025
a4ea820
studio打包安装
niltor Jul 30, 2025
51ed9ef
fix update studio
niltor Jul 30, 2025
febff0f
优化打包大小
niltor Jul 30, 2025
939cad3
移除Icons包,自己维护图标.
niltor Jul 31, 2025
4e696ef
update 脚本
niltor Jul 31, 2025
fe19621
update
niltor Jul 31, 2025
aa427c0
暂时移除ApiLight的打包
niltor Aug 1, 2025
0186bc3
完善错误页内容
niltor Aug 1, 2025
fea3467
rename project to solution
niltor Aug 2, 2025
ba42f18
调整模板打包内容;
niltor Aug 2, 2025
2e637c9
在模板层面 添加前端选项,并添加创建时选项
niltor Aug 2, 2025
ee80ade
修改打包脚本,将可选模块从解决方案中移除
niltor Aug 2, 2025
f195ea0
创建解决方案时,模块处理逻辑
niltor Aug 2, 2025
02d26cd
添加studio update 命令
niltor Aug 3, 2025
2167c22
remove node project
niltor Aug 3, 2025
415536c
对多个web服务的开发配置进行统一配置
niltor Aug 3, 2025
a519cfa
优化和整理代码
niltor Aug 3, 2025
b8ab9bd
代码优化
niltor Aug 3, 2025
4148271
完善创建解决方案的交互
niltor Aug 4, 2025
8d2b7a0
get entity after build
niltor Aug 5, 2025
e4840e3
clean code
niltor Aug 6, 2025
b05e153
让aspire 通过配置决定使用什么服务
niltor Aug 6, 2025
5487328
设置应用于AspireHost配置
niltor Aug 6, 2025
b052d81
temp save
niltor Aug 6, 2025
691cac6
manager 实现的修改
niltor Aug 7, 2025
34fb310
调整基础设施配置
niltor Aug 7, 2025
ddde103
修改迁移
niltor Aug 7, 2025
3d07675
Manager 的修改;
niltor Aug 8, 2025
32f53d5
添加通过 EntityFrameworkCore.Design去 创建DbContext实例,以便后续获取相关信息.
niltor Aug 9, 2025
167ff60
#42 完善目标DbContext的实例创建
niltor Aug 9, 2025
ae99c27
#42
niltor Aug 10, 2025
1839246
Entity解析时的 Module和类型处理
niltor Aug 10, 2025
f2062c5
#42
niltor Aug 11, 2025
c0ad9f1
完善实体属性内容的解析
niltor Aug 11, 2025
956715b
test entity parse
niltor Aug 11, 2025
de88803
remove webappContext
niltor Aug 12, 2025
ade2fe0
dto的生成调整
niltor Aug 12, 2025
78181b5
简单Manager的生成
niltor Aug 12, 2025
b5d7e9b
优化生成时dotnet build 的耗时,可不进行包还原.
niltor Aug 13, 2025
bd2feed
移除创建解决方案时对内置模块的支持
niltor Aug 13, 2025
1749f32
temp save
niltor Aug 13, 2025
5e424b6
调整Controller的生成内容
niltor Aug 14, 2025
84202ae
自定义 用户键属性Id名称
niltor Aug 14, 2025
e5ecf16
config project 的完善
niltor Aug 14, 2025
f2c16aa
update codes
niltor Aug 14, 2025
8945c67
Http.Api默认保留UserMod
niltor Aug 14, 2025
009cc30
rename http.api to apiservice
niltor Aug 14, 2025
59eb731
简化IProjectContext 内容
niltor Aug 15, 2025
3804766
添加部分manager的生成逻辑代码;
niltor Aug 15, 2025
a1fe25a
prepared controller generator
niltor Aug 18, 2025
0604f94
temp save
niltor Aug 18, 2025
13d2a23
初步调试Controller的生成
niltor Aug 19, 2025
80c9b1a
add http for mcp server
niltor Aug 20, 2025
1a11e89
Update src/Modules/StudioMod/Managers/ToolsManager.cs
niltor Aug 21, 2025
7e4bc29
Update src/Modules/StudioMod/Managers/EntityInfoManager.cs
niltor Aug 21, 2025
68281f8
Update src/Definition/Share/Services/CommandService.cs
niltor Aug 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
126 changes: 125 additions & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
@@ -1,4 +1,128 @@
[*.cs]
[*.cs]

# RS1014: 不要忽略通过不可变对象上的方法返回的值
dotnet_diagnostic.RS1014.severity = silent

[*.cs]
#### 命名样式 ####

# 命名规则

dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i

dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case

dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case

# 符号规范

dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =

dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =

dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers =

# 命名样式

dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
dotnet_naming_style.begins_with_i.capitalization = pascal_case

dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case

dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
csharp_using_directive_placement = outside_namespace:silent
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_accessors = true:silent
csharp_style_expression_bodied_lambdas = when_on_single_line:silent
csharp_style_expression_bodied_local_functions = false:silent
csharp_style_conditional_delegate_call = true:suggestion
csharp_style_var_for_built_in_types = false:silent
csharp_style_var_when_type_is_apparent = false:silent
csharp_style_var_elsewhere = false:silent
csharp_prefer_simple_using_statement = true:suggestion
csharp_prefer_braces = true:silent
csharp_style_prefer_switch_expression = true:suggestion
csharp_style_throw_expression = true:suggestion
dotnet_diagnostic.CA1805.severity = suggestion

[*.vb]
#### 命名样式 ####

# 命名规则

dotnet_naming_rule.interface_should_be_以_i_开始.severity = suggestion
dotnet_naming_rule.interface_should_be_以_i_开始.symbols = interface
dotnet_naming_rule.interface_should_be_以_i_开始.style = 以_i_开始

dotnet_naming_rule.类型_should_be_帕斯卡拼写法.severity = suggestion
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.symbols = 类型
dotnet_naming_rule.类型_should_be_帕斯卡拼写法.style = 帕斯卡拼写法

dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.severity = suggestion
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.symbols = 非字段成员
dotnet_naming_rule.非字段成员_should_be_帕斯卡拼写法.style = 帕斯卡拼写法

# 符号规范

dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected
dotnet_naming_symbols.interface.required_modifiers =

dotnet_naming_symbols.类型.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.类型.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected
dotnet_naming_symbols.类型.required_modifiers =

dotnet_naming_symbols.非字段成员.applicable_kinds = property, event, method
dotnet_naming_symbols.非字段成员.applicable_accessibilities = public, friend, private, protected, protected_friend, private_protected
dotnet_naming_symbols.非字段成员.required_modifiers =

# 命名样式

dotnet_naming_style.以_i_开始.required_prefix = I
dotnet_naming_style.以_i_开始.required_suffix =
dotnet_naming_style.以_i_开始.word_separator =
dotnet_naming_style.以_i_开始.capitalization = pascal_case

dotnet_naming_style.帕斯卡拼写法.required_prefix =
dotnet_naming_style.帕斯卡拼写法.required_suffix =
dotnet_naming_style.帕斯卡拼写法.word_separator =
dotnet_naming_style.帕斯卡拼写法.capitalization = pascal_case

dotnet_naming_style.帕斯卡拼写法.required_prefix =
dotnet_naming_style.帕斯卡拼写法.required_suffix =
dotnet_naming_style.帕斯卡拼写法.word_separator =
dotnet_naming_style.帕斯卡拼写法.capitalization = pascal_case

[*.{cs,vb}]
dotnet_style_qualification_for_field = false:silent
dotnet_style_qualification_for_property = false:silent
dotnet_style_qualification_for_method = false:silent
dotnet_style_qualification_for_event = false:silent
end_of_line = crlf
dotnet_style_collection_initializer = true:suggestion
dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion
dotnet_diagnostic.CA1852.severity = suggestion
17 changes: 11 additions & 6 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,28 @@

本仓库是一个使用.NET 开发的命令行工具。请在生成代码时遵循以下指导:

**重要原则**

回答的内容必须是确定的,验证的,而不是按概率生成,无法确定和验证的要说明!准确性和确定性是最重要的,否则宁愿不回答。

使用Agent模式时,在生成代码后,不要通过`run_build`来构建项目验证错误,而是通过编辑器的错误提示来验证代码的正确性。

**技术栈和语言偏好:**

* 主要语言是:C#,前端是TypeScript
* AterStudio项目是 ASP.NET Core
* 前端使用Angular框架
* 主要语言是:C#
* AterStudio项目是 ASP.NET Core和Blazor Server项目
* 前端使用Fluentui-blazor组件库

**重要的文件和目录:**

* `src/Command/CommandLine`: 是命令行程序。
* `src/Definition/CodeGenerator`: 使用roslyn解析和实现代码生成逻辑
* `src/Definition/Entity`: 实体模型项目
* `src/Services/AterStudio`: 是 AterStudio 的服务项目,基于ASP.NET Core
* `src/Services/AterStudio`: 是 AterStudio 的服务项目,基于ASP.NET Core和Blazor Server
* `src/Modules/StudioMod`: 是业务实现的主要模块,AterStudio直接引用该项目。

**代码生成工具:**

以下是在使用 github copilot chat agent 时要遵循的内容:

* 本项目配置了MCP Server `ater.copilot`,提供代码生成功能
* 当要生成前端请求代码时,使用`http://localhost:5278/openapi/admin.json`作为openapi url路径,使用`NgHttp`作为前端请求类型,输出路径是项目根目录下的`/src/Services/ClientApp/src/app`,作为参数时传递完整的绝对路径。
* 对于FluentUI组件库,如果属性大于两个,需要换行对齐属性
106 changes: 106 additions & 0 deletions .github/prompts/Test/test.prompt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Form Code Generation

## rules

1. 根据提供的描述或代码生成前端表单代码。
2. 要严格遵循指定的UI框架,如FluentUI,AntDesign或Angular Material等。
3. 如果说明要弹窗形式,要有相关的自定义组件代码。
4. 要分析代码中的字段类型和相关特性和注解,如必须和长度限制等,是否为枚举等,以选择合适的表单控件。

## example

对于 FluentUI 框架,组件应该包含Placeholder属性,以及Class="w-100"属性,
生成的表单代码如下所示:

```razor
@implements IDialogContentComponent

<FluentDialogHeader ShowDismiss="false">
<FluentLabel Typo="Typography.PaneHeader">{标题}</FluentLabel>
<FluentLabel Typo="Typography.Subject" Color="Color.Accent">
{描述}
</FluentLabel>
</FluentDialogHeader>
<FluentBodyContent>
<EditForm EditContext="editContext">
<DataAnnotationsValidator />
<FluentValidationSummary />
<FluentStack Orientation="Orientation.Vertical" VerticalGap="12">
<FluentStack Orientation="Orientation.Vertical" VerticalGap="2">
{控件内容1}
</FluentStack>
<FluentStack Orientation="Orientation.Vertical" VerticalGap="2">
{控件内容2}
</FluentStack>

// 更多控件内容...
</FluentStack>

</EditForm>

</FluentBodyContent>
<FluentDialogFooter>
<FluentButton Appearance="Appearance.Accent"
Type="ButtonType.Button"
OnClick="SaveAsync">
@Lang(Localizer.Confirm)
</FluentButton>
<FluentButton Appearance="Appearance.Neutral"
OnClick="CancelAsync">
@Lang(Localizer.Cancel)
</FluentButton>
</FluentDialogFooter>

@code{
[CascadingParameter]
FluentDialog Dialog { get; set; } = null!;
EditContext? editContext;

// 以下替换为给出的模型类
AddProjectDto AddDto { get; set; } = default!;

bool formValid { get;set; }

protected override void OnInitialized()
{
AddDto = new AddProjectDto
{
ProjectName = string.Empty,
ProjectDirectory = string.Empty
};
editContext = new EditContext(AddDto);
editContext.OnFieldChanged += HandleFieldChanged;
}

private void HandleFieldChanged(object? sender, FieldChangedEventArgs e)
{
if (editContext is not null)
{
formValid = editContext.Validate();
StateHasChanged();
}
}

public void Dispose()
{
if (editContext is not null)
{
editContext.OnFieldChanged -= HandleFieldChanged;
}
}

private async Task SaveAsync()
{
if (!editContext!.Validate())
{
ToastService.ShowError(Lang(Localizer.FormValidFailed));
return;
}
// 保存逻辑
}
private async Task CancelAsync()
{
await Dialog.CancelAsync();
}
}
```
106 changes: 106 additions & 0 deletions .github/prompts/form.prompt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Form Code Generation

## rules

1. 根据提供的描述或代码生成前端表单代码。
2. 要严格遵循指定的UI框架,如FluentUI,AntDesign或Angular Material等。
3. 如果说明要弹窗形式,要有相关的自定义组件代码。
4. 要分析代码中的字段类型和相关特性和注解,如必须和长度限制等,是否为枚举等,以选择合适的表单控件。

## example

对于 FluentUI 框架,组件应该包含Placeholder属性,以及Class="w-100"属性,
生成的表单代码如下所示:

```razor
@implements IDialogContentComponent

<FluentDialogHeader ShowDismiss="false">
<FluentLabel Typo="Typography.PaneHeader">{标题}</FluentLabel>
<FluentLabel Typo="Typography.Subject" Color="Color.Accent">
{描述}
</FluentLabel>
</FluentDialogHeader>
<FluentBodyContent>
<EditForm EditContext="editContext">
<DataAnnotationsValidator />
<FluentValidationSummary />
<FluentStack Orientation="Orientation.Vertical" VerticalGap="12">
<FluentStack Orientation="Orientation.Vertical" VerticalGap="2">
{控件内容1}
</FluentStack>
<FluentStack Orientation="Orientation.Vertical" VerticalGap="2">
{控件内容2}
</FluentStack>

// 更多控件内容...
</FluentStack>

</EditForm>

</FluentBodyContent>
<FluentDialogFooter>
<FluentButton Appearance="Appearance.Accent"
Type="ButtonType.Button"
OnClick="SaveAsync">
@Lang(Localizer.Confirm)
</FluentButton>
<FluentButton Appearance="Appearance.Neutral"
OnClick="CancelAsync">
@Lang(Localizer.Cancel)
</FluentButton>
</FluentDialogFooter>

@code{
[CascadingParameter]
FluentDialog Dialog { get; set; } = null!;
EditContext? editContext;

// 以下替换为给出的模型类
AddProjectDto AddDto { get; set; } = default!;

bool formValid { get;set; }

protected override void OnInitialized()
{
AddDto = new AddProjectDto
{
ProjectName = string.Empty,
ProjectDirectory = string.Empty
};
editContext = new EditContext(AddDto);
editContext.OnFieldChanged += HandleFieldChanged;
}

private void HandleFieldChanged(object? sender, FieldChangedEventArgs e)
{
if (editContext is not null)
{
formValid = editContext.Validate();
StateHasChanged();
}
}

public void Dispose()
{
if (editContext is not null)
{
editContext.OnFieldChanged -= HandleFieldChanged;
}
}

private async Task SaveAsync()
{
if (!editContext!.Validate())
{
ToastService.ShowError(Lang(Localizer.FormValidFailed));
return;
}
// 保存逻辑
}
private async Task CancelAsync()
{
await Dialog.CancelAsync();
}
}
```
9 changes: 0 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,12 +93,3 @@ ater studio
## 📄 文档

[进行中](https://www.dusi.dev/docs/Ater.Dry)


## 🙏 致谢

<p align="left">
<a href="https://www.jetbrains.com/?from=ater.dry.cli">
<img src="https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png" alt="JetBrains Logo" width="100"/>
</a>
</p>
Loading