From 00cff26a4935d19328350f31722f37d6986e238f Mon Sep 17 00:00:00 2001 From: "{iliuhai@aliyun.com}" Date: Sun, 1 Dec 2024 17:23:19 +0800 Subject: [PATCH 01/18] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index bf3bdeea..5cf86eed 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,13 @@ * 低代码实验性项目 * 基于 .NET 8.0 + Blazor 实现 +### 分支规则 +* master: 最新稳定代码 +* release: 发布分支,基于 release 创建版本(当 release 分支足够稳定后,合并到 dev、master 分支) +* dev: 开发分支(所有的 feature、hotfix 合并至 dev 分支,进行统一验证,并合并到 release 分支) +* feature: 新特性分支(基于 dev 分支创建) +* hotfix: 热修复分支(基于 dev 或 release 分支创建) + +### 版本规则 +* 正式版本: 遵循语义化版本 2.0 规范 (v0.0.1) +* 非正式版本: v0.0.1-preview.1 -- Gitee From 283e56d8a1b884dab6dfa406c2bf096223e8dede Mon Sep 17 00:00:00 2001 From: "{iliuhai@aliyun.com}" Date: Sun, 1 Dec 2024 18:29:19 +0800 Subject: [PATCH 02/18] =?UTF-8?q?=E5=90=AF=E7=94=A8=20prerender?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../H.LowCode.DesignEngine.Host/Components/App.razor | 4 ++-- .../Pages/{DesignerPage.razor => DesignePage.razor} | 0 .../Layout/PartsDesignEngineLayout.razor | 2 +- .../H.LowCode.RenderEngine.Host/Components/App.razor | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) rename src/DesignEngine/H.LowCode.DesignEngine/Pages/{DesignerPage.razor => DesignePage.razor} (100%) diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Host/Components/App.razor b/src/DesignEngine/H.LowCode.DesignEngine.Host/Components/App.razor index db72c7bb..f7791fc7 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Host/Components/App.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine.Host/Components/App.razor @@ -21,12 +21,12 @@ - + - + diff --git a/src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignerPage.razor b/src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignePage.razor similarity index 100% rename from src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignerPage.razor rename to src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignePage.razor diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/Layout/PartsDesignEngineLayout.razor b/src/DesignEngine/H.LowCode.PartsDesignEngine/Layout/PartsDesignEngineLayout.razor index 679c7533..b171e903 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/Layout/PartsDesignEngineLayout.razor +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/Layout/PartsDesignEngineLayout.razor @@ -4,7 +4,7 @@ - + @Body diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Host/Components/App.razor b/src/RenderEngine/H.LowCode.RenderEngine.Host/Components/App.razor index 40776696..85cab2e6 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Host/Components/App.razor +++ b/src/RenderEngine/H.LowCode.RenderEngine.Host/Components/App.razor @@ -21,12 +21,12 @@ - + - + -- Gitee From 607db66cc06de6e848ae72c595932e5607087c2c Mon Sep 17 00:00:00 2001 From: "{iliuhai@aliyun.com}" Date: Mon, 2 Dec 2024 00:22:26 +0800 Subject: [PATCH 03/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20H.LowCode.ComponentP?= =?UTF-8?q?arts.BasicComponents=20=E9=A1=B9=E7=9B=AE=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E5=85=B3=E7=B3=BB=EF=BC=8C=E9=81=BF=E5=85=8D=20RenderEngine=20?= =?UTF-8?q?=E9=97=B4=E6=8E=A5=E4=BE=9D=E8=B5=96=E4=BA=86=20DesignEngine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DesignEngine/H.LowCode.DesignEngine/DesignEngineModule.cs | 1 + src/H.LowCode.sln | 2 +- .../DefaultComponentModule.cs | 3 ++- .../H.LowCode.ComponentParts.BasicComponents.csproj | 2 -- .../H.LowCode.ComponentParts.ExtensionComponents.csproj | 1 - .../PageRender/FormPageRender.razor | 2 +- src/Parts/H.LowCode.ThemeParts.AntBlazor/Pages/MetaPage.razor | 1 - .../RenderEngineHostClientModule.cs | 1 - 8 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/DesignEngine/H.LowCode.DesignEngine/DesignEngineModule.cs b/src/DesignEngine/H.LowCode.DesignEngine/DesignEngineModule.cs index 6e599222..c4c46b9b 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/DesignEngineModule.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine/DesignEngineModule.cs @@ -8,6 +8,7 @@ public class DesignEngineModule : AbpModule public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddAntDesign(); + context.Services.AddSingleton(typeof(DragDropStateService)); } } diff --git a/src/H.LowCode.sln b/src/H.LowCode.sln index 94231e61..3708bedf 100644 --- a/src/H.LowCode.sln +++ b/src/H.LowCode.sln @@ -96,7 +96,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.Repository.Remote EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.DbMigrator", "Tools\H.LowCode.DbMigrator\H.LowCode.DbMigrator.csproj", "{F33C7AB6-CA4B-4254-9A75-D803FEDE0CB4}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Designer", "Designer", "{A32809CE-52C6-4E00-92D3-76903D8D9C61}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesignEngine", "DesignEngine", "{A32809CE-52C6-4E00-92D3-76903D8D9C61}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/src/Parts/H.LowCode.ComponentParts.BasicComponents/DefaultComponentModule.cs b/src/Parts/H.LowCode.ComponentParts.BasicComponents/DefaultComponentModule.cs index 2de1e3b0..2606b89a 100644 --- a/src/Parts/H.LowCode.ComponentParts.BasicComponents/DefaultComponentModule.cs +++ b/src/Parts/H.LowCode.ComponentParts.BasicComponents/DefaultComponentModule.cs @@ -5,11 +5,12 @@ using Volo.Abp.Modularity; namespace H.LowCode.ComponentParts.BasicComponents; -[DependsOn(typeof(DesignEngineModule))] public class DefaultComponentModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { + context.Services.AddAntDesign(); + context.Services.AddScoped(); context.Services.AddScoped(); context.Services.AddScoped(); diff --git a/src/Parts/H.LowCode.ComponentParts.BasicComponents/H.LowCode.ComponentParts.BasicComponents.csproj b/src/Parts/H.LowCode.ComponentParts.BasicComponents/H.LowCode.ComponentParts.BasicComponents.csproj index dcdc3538..bcf756eb 100644 --- a/src/Parts/H.LowCode.ComponentParts.BasicComponents/H.LowCode.ComponentParts.BasicComponents.csproj +++ b/src/Parts/H.LowCode.ComponentParts.BasicComponents/H.LowCode.ComponentParts.BasicComponents.csproj @@ -17,9 +17,7 @@ - - diff --git a/src/Parts/H.LowCode.ComponentParts.ExtensionComponents/H.LowCode.ComponentParts.ExtensionComponents.csproj b/src/Parts/H.LowCode.ComponentParts.ExtensionComponents/H.LowCode.ComponentParts.ExtensionComponents.csproj index 22feaaba..38b79b19 100644 --- a/src/Parts/H.LowCode.ComponentParts.ExtensionComponents/H.LowCode.ComponentParts.ExtensionComponents.csproj +++ b/src/Parts/H.LowCode.ComponentParts.ExtensionComponents/H.LowCode.ComponentParts.ExtensionComponents.csproj @@ -17,7 +17,6 @@ - diff --git a/src/Parts/H.LowCode.ThemeParts.AntBlazor/PageRender/FormPageRender.razor b/src/Parts/H.LowCode.ThemeParts.AntBlazor/PageRender/FormPageRender.razor index 9b901c2b..08df9eab 100644 --- a/src/Parts/H.LowCode.ThemeParts.AntBlazor/PageRender/FormPageRender.razor +++ b/src/Parts/H.LowCode.ThemeParts.AntBlazor/PageRender/FormPageRender.razor @@ -7,7 +7,7 @@ {
+ LabelColSpan="8" WrapperColSpan="16"> @foreach (var component in Page.Components) { diff --git a/src/Parts/H.LowCode.ThemeParts.AntBlazor/Pages/MetaPage.razor b/src/Parts/H.LowCode.ThemeParts.AntBlazor/Pages/MetaPage.razor index 19706d45..e279fd90 100644 --- a/src/Parts/H.LowCode.ThemeParts.AntBlazor/Pages/MetaPage.razor +++ b/src/Parts/H.LowCode.ThemeParts.AntBlazor/Pages/MetaPage.razor @@ -4,7 +4,6 @@ @layout AntBlazorThemeLayout @inject IMetaAppService MetaAppService -@* @inject ComponentState State *@ @($"{_pageCascadingModel.PageName}") diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Host.Client/RenderEngineHostClientModule.cs b/src/RenderEngine/H.LowCode.RenderEngine.Host.Client/RenderEngineHostClientModule.cs index c65f1cd0..619d55fc 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Host.Client/RenderEngineHostClientModule.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Host.Client/RenderEngineHostClientModule.cs @@ -1,7 +1,6 @@ using H.LowCode.ComponentBase; using H.LowCode.ComponentParts.BasicComponents; using H.LowCode.ComponentParts.ExtensionComponents; -using H.LowCode.DesignEngine.Application.Contracts; using H.LowCode.RenderEngine.Application.Contracts; using H.LowCode.ThemeParts.AntBlazor; using H.Util.Blazor; -- Gitee From af12b1f3be36489c54a3fc28dcaea1e312d0a707 Mon Sep 17 00:00:00 2001 From: iliuhai Date: Fri, 6 Dec 2024 10:42:54 +0800 Subject: [PATCH 04/18] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=BC=95=E7=94=A8=EF=BC=8C=E7=BB=9F=E4=B8=80=E7=AE=A1=E7=90=86?= =?UTF-8?q?=20Microsoft=E3=80=81Abp=20=E5=8C=85=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Directory.Packages.props | 69 +++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 351ab0e6..aead5a47 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -4,60 +4,63 @@ true + + 9.0.0 + 9.0.1 - - + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - - + + - + - + - + -- Gitee From ef1b7f0a0d4aed029d4ef662d9a0c0c41aa46c53 Mon Sep 17 00:00:00 2001 From: "{iliuhai@aliyun.com}" Date: Fri, 20 Dec 2024 20:56:32 +0800 Subject: [PATCH 05/18] TODO.md --- TODO.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/TODO.md b/TODO.md index ad39f32f..a8f80bfa 100644 --- a/TODO.md +++ b/TODO.md @@ -1,13 +1,18 @@ ### 待办 #### 公共 -* GUID 替换为 6位随机字符串,减少字符长度 -* razor 项目减少第三方包依赖(如 abp) +* [已解决]GUID 替换为 6位随机字符串,减少字符长度 +* [不处理]razor 项目减少第三方包依赖(如 abp) * 自身、第三方 版本更新产生的兼容问题 -* Auto 模式,页面调用2次问题优化 -* 添加 HttpClientInterceptor,实现调用 ApplicationService 时 Server 模式本地请求,WebAssembly 模式 http 请求代理 +* [已解决]Auto 模式,页面调用2次问题优化 +* [已解决]添加 HttpClientInterceptor,实现调用 ApplicationService 时 Server 模式本地请求,WebAssembly 模式 http 请求代理 -#### DesignEngine +#### DesignEngine +* 设计通用的组件物料结构,并加载到设计器 +** 当前存在问题: +*** 组件类型为固定值,无法变更 +*** 组件物料支持新设置项后,历史元数据中的属性设置看不到 +* 将组件分为原子组件、物料组件,物料组件使用 json 格式存储,并进行渲染 #### RenderEngine -- Gitee From 254d94532ca943ff82aa130d378b11e34fd8d10c Mon Sep 17 00:00:00 2001 From: "{iliuhai@aliyun.com}" Date: Sun, 29 Dec 2024 23:23:46 +0800 Subject: [PATCH 06/18] =?UTF-8?q?=E9=87=8D=E6=9E=84=EF=BC=9A=20-=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=BB=84=E4=BB=B6=E7=89=A9=E6=96=99=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=EF=BC=8C=E5=B9=B6=E5=AD=98=E5=82=A8=E4=B8=BA=20json?= =?UTF-8?q?=EF=BC=88=E7=BB=84=E4=BB=B6=E5=85=B7=E4=BD=93=E7=BB=86=E8=8A=82?= =?UTF-8?q?=E4=BB=8D=E9=9C=80=E6=89=8B=E5=8A=A8=E4=BF=AE=E6=94=B9=E6=96=87?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=9A=82=E4=B8=8D=E6=94=AF=E6=8C=81=E5=AE=8C?= =?UTF-8?q?=E5=85=A8=E5=8F=AF=E8=A7=86=E5=8C=96=E5=BC=80=E5=8F=91=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=EF=BC=89=E3=80=82=E5=8E=86=E5=8F=B2=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E5=B1=8F=E8=94=BD=EF=BC=8C=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E4=B8=AD=E7=9A=84=E7=BB=84=E4=BB=B6=E5=88=A0?= =?UTF-8?q?=E9=99=A4=EF=BC=8C=E5=BE=85=E5=90=8E=E7=BB=AD=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E3=80=82=20-=20=E7=BB=84=E4=BB=B6=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E9=80=BB=E8=BE=91=E9=87=8D=E6=9E=84=EF=BC=8C=E4=BB=8E?= =?UTF-8?q?=20json=20=E5=8A=A0=E8=BD=BD=E7=BB=84=E4=BB=B6=EF=BC=9B?= =?UTF-8?q?=E5=90=8C=E6=97=B6=E5=8C=BA=E5=88=86=20ComponentPartsSchema?= =?UTF-8?q?=E3=80=81ComponentSchema=EF=BC=8C=E5=B1=9E=E6=80=A7=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E8=AE=BE=E8=AE=A1=E3=80=82=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E5=B7=B2=E6=9C=89=E9=A1=B5=E9=9D=A2=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E6=95=B0=E6=8D=AE=E6=97=B6=EF=BC=8C=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E4=B8=A4=E4=B8=AA=20Schema=EF=BC=8C=E7=BB=84=E4=BB=B6=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E5=8F=8A=E6=B8=B2=E6=9F=93=E9=80=BB=E8=BE=91=E9=97=AD?= =?UTF-8?q?=E7=8E=AF=E3=80=82=20-?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- meta/apps/caseapp/menu/5omcgxevf.json | 14 +- meta/apps/caseapp/page/0lgu6xpop.json | 2 +- meta/apps/caseapp/page/2qceiqni.json | 2 +- meta/apps/caseapp/page/2qme5ln5e.json | 2 +- meta/apps/caseapp/page/4tnfvebp1.json | 169 +------- meta/apps/caseapp/page/5kicsevr.json | 291 +------------ meta/apps/caseapp/page/7qa2yetz.json | 2 +- meta/apps/caseapp/page/85oldiqok.json | 2 +- meta/apps/caseapp/page/fhumgxyk.json | 148 ++++++- meta/apps/caseapp/page/g0qcqxzd.json | 2 +- meta/apps/caseapp/page/gndz2vecz.json | 391 +----------------- meta/apps/caseapp/page/huf12sk.json | 4 +- meta/apps/caseapp/page/pl3juvaok.json | 207 +--------- meta/apps/caseapp/page/rlswps5.json | 2 +- meta/apps/caseapp/page/sf1duor2x.json | 2 +- meta/apps/caseapp/page/uwz9o94b0.json | 2 +- meta/apps/caseapp/page/xjvks1d3f.json | 2 +- meta/apps/caseapp/page/xovrp6nz.json | 2 +- meta/apps/caseapp/page/ymb3bsw.json | 2 +- meta/apps/testapp/page/ajzc8ywaa.json | 27 +- meta/apps/testapp/page/ehduqxwzm.json | 27 +- meta/apps/testapp/page/wjrxq0ft.json | 27 +- meta/apps/testapp/page/xvdr8b6l.json | 27 +- .../componentParts/antdesign/52391a70.json | 68 +++ .../componentParts/antdesign/5bd80f8a.json | 24 ++ .../componentParts/antdesign/5d066e93.json | 24 ++ .../componentParts/antdesign/6d997568.json | 24 ++ .../componentParts/antdesign/7bab5a19.json | 30 ++ .../componentParts/antdesign/f2b54b4c.json | 24 ++ .../componentParts/antdesign/f63f79db.json | 24 ++ .../FormDataDomainService.cs | 17 +- .../H.LowCode.Domain/H.LowCode.Domain.csproj | 1 + .../ComponentPartsDomainService.cs | 46 +++ .../IComponentPartsDomainService.cs | 22 + .../IComponentPartsRepository.cs | 22 + .../ComponentPartsListModel.cs | 25 -- .../Base/PartsFileRepositoryBase.cs | 30 ++ .../MetaJsonFileRepositoryModule.cs | 2 + .../ComponentPartsRepository.cs | 134 ++++++ .../Repositories/PageFileRepository.cs | 4 - .../ContainerComponentBase.razor | 40 +- .../H.LowCode.DesignEngine.Abstraction.csproj | 2 + .../IComponentProvider.cs | 7 +- .../IPageTemplateProvider.cs | 7 +- .../_Imports.razor | 2 + ....DesignEngine.Application.Contracts.csproj | 1 + .../IComponentPartsAppService.cs | 23 ++ .../ComponentPartsAppService.cs | 45 ++ .../DesignEngineHostClientModule.cs | 4 +- .../H.LowCode.DesignEngine.Host.Client.csproj | 4 +- .../DesignEngineHostModule.cs | 4 +- .../appsettings.json | 4 +- .../{ => Models}/AppListModel.cs | 2 +- .../{ => Models}/DataSourceListModel.cs | 2 +- .../{ => Models}/PageListModel.cs | 4 +- .../PartsModels/ComponentPartsListModel.cs | 48 +++ .../ComponentPanel/ComponentPanel.razor | 63 ++- .../ComponentPanel/DragItem.razor | 13 +- .../DesignPanel/ComponentItem.razor | 87 ++-- .../DesignPanel/DesignPanel.razor | 37 +- .../DesignPanel/DropItem.razor | 52 +-- .../DesignPanel/DropItemContainer.razor | 67 ++- .../H.LowCode.DesignEngine.csproj | 1 + .../{DesignerPage.razor => DesignPage.razor} | 14 +- .../Services/DragDropStateService.cs | 43 +- .../SettingPanel/PropertySetting.razor | 13 +- .../BasicPropertyItem.razor | 98 +---- .../DataSourcePropertyItem.razor | 82 ++-- .../ExtensionPropertyItem.razor | 102 +++-- .../TablePropertyItem.razor | 18 +- .../SettingPanel/SettingPanel.razor | 13 +- .../SettingPanel/StyleSetting.razor | 14 +- .../H.LowCode.DesignEngine/_Imports.razor | 4 +- .../H.LowCode.MyApp/H.LowCode.MyApp.csproj | 1 + .../Pages/DataSource/APIDataSource.razor | 2 +- .../Pages/DataSource/TableDataSource.razor | 2 +- .../H.LowCode.MyApp/Pages/PageManager.razor | 4 +- .../H.LowCode.MyApp/_Imports.razor | 3 +- .../ComponentPanel/ComponentPanel.razor | 6 +- .../ComponentPanel/DragItem.razor | 8 +- .../DesignPanel/ComponentDesignPanel.razor | 8 +- .../DesignPanel/ComponentItem.razor | 60 +-- .../DesignPanel/DropItem.razor | 52 +-- .../DesignPanel/DropItemContainer.razor | 62 ++- .../DesignPanel/PageDesignPanel.razor | 22 +- .../H.LowCode.PartsDesignEngine.csproj | 1 + .../Pages/ComponentPartsDesigner.razor | 12 +- .../Pages/PagePartsDesigner.razor | 2 +- .../Services/DragDropStateService.cs | 43 +- .../SettingPanel/PropertySetting.razor | 196 +-------- .../SettingPanel/SettingPanel.razor | 6 +- .../SettingPanel/StyleSetting.razor | 14 +- .../_Imports.razor | 3 +- .../H.LowCode.Workbench.csproj | 1 + .../ComponentParts/ComponentForm.razor | 1 + .../Pages/Ecosystem/ComponentPartsList.razor | 216 ++++++++-- .../Pages/Ecosystem/PagePartsList.razor | 6 +- .../H.LowCode.Workbench/Pages/Index.razor | 2 +- .../H.LowCode.Workbench/Pages/MyApps.razor | 2 - .../H.LowCode.Workbench/_Imports.razor | 3 +- src/Directory.Packages.props | 1 + src/H.LowCode.sln | 8 +- .../BasicComponentProvider.cs | 162 -------- .../LayoutComponentProvider.cs | 73 ---- .../SeniorComponentProvider.cs | 178 -------- .../ExtensionComponentProvider.cs | 95 ----- .../ExtensionPageTemplateProvider.cs | 49 --- .../BasicComponentProvider.cs | 204 +++++++++ .../LayoutComponentProvider.cs | 81 ++++ .../SeniorComponentProvider.cs | 186 +++++++++ .../Components/LcButton.razor | 2 +- .../Components/LcCard.razor | 6 +- .../Components/LcCarousel.razor | 2 +- .../Components/LcDescriptions.razor | 10 +- .../Components/LcFlex.razor | 8 +- .../Components/LcGrid.razor | 2 +- .../Components/LcLayout.razor | 2 +- .../Components/LcList.razor | 2 +- .../Components/LcTable.razor | 31 +- .../Components/LcTabs.razor | 4 +- .../DefaultComponentModule.cs | 6 +- .../H.LowCode.Components.AntBlazor.csproj} | 1 + .../_Imports.razor | 1 + .../ExtensionComponentProvider.cs | 103 +++++ .../Components/LcBaiduMap.razor | 2 +- .../Components/LcGaodeMap.razor | 2 +- .../Components/LcLakexEditor.razor | 16 +- .../Components/LcMap.razor | 2 +- .../Components/LcMonacoEditor.razor | 10 +- .../Components/LcRegion.razor | 2 +- .../Components/LcUserSelect.razor | 2 +- .../ExtensionComponentModule.cs | 6 +- .../H.LowCode.Components.Extension.csproj} | 2 +- .../ExtensionPageTemplateProvider.cs | 55 +++ .../_Imports.razor | 3 +- .../wwwroot/LakexEditor-1.24.0/LakexEditor.js | 6 +- .../wwwroot/LakexEditor-1.24.0/doc.css | 0 .../wwwroot/LakexEditor-1.24.0/doc.umd.js | 2 +- .../browser/ui/codicons/codicon/codicon.ttf | Bin .../MonacoEditor/base/worker/workerMain.js | 0 .../basic-languages/javascript/javascript.js | 0 .../MonacoEditor/editor/editor.main.css | 0 .../MonacoEditor/editor/editor.main.js | 0 .../MonacoEditor/editor/editor.main.nls.js | 0 .../language/typescript/tsMode.js | 0 .../language/typescript/tsWorker.js | 0 .../wwwroot/MonacoEditor/loader.min.js | 0 .../wwwroot/MonacoEditor/monaco.js | 4 +- .../wwwroot/antd-4.24.13/antd.css | 0 .../react-18/react-dom.production.min.js | 0 .../wwwroot/react-18/react.production.min.js | 0 .../ComponentRender/ComponentRender.razor | 106 ----- .../ContainerComponentRender.razor | 24 -- .../PageRender/NormalPageRender.razor | 13 - .../PageRender/TablePageRender.razor | 13 - .../AntBlazorThemeModule.cs | 2 +- .../ComponentRender/ComponentRender.razor | 68 ++- .../ComponentRender/ComponentRender.razor.css | 0 .../ContainerComponentRender.razor | 10 +- .../ContainerComponentRender.razor.css | 0 .../ComponentRender/FormComponentRender.razor | 66 ++- .../FormComponentRender.razor.css | 0 .../FormContainerComponentRender.razor | 10 +- .../FormContainerComponentRender.razor.css | 0 .../H.LowCode.Themes.AntBlazor.csproj} | 0 .../Layout/AntBlazorThemeLayout.razor | 4 +- .../PageRender/FormPageRender.razor | 31 +- .../PageRender/NormalPageRender.razor | 2 +- .../PageRender/TablePageRender.razor | 2 +- .../Pages/HomePage.razor | 2 +- .../Pages/MetaPage.razor | 2 +- .../_Imports.razor | 0 .../wwwroot/images/logo.svg | 0 .../wwwroot/renderengine.css | 0 .../H.LowCode.MetaSchema/AppSchema.cs | 2 +- .../H.LowCode.MetaSchema/ComponentSchema.cs | 152 +++---- .../H.LowCode.MetaSchema/DataSourceSchema.cs | 4 +- .../DataSourceSchemas/APISchema.cs | 3 - .../Enums/PropertyItemTypeEnum.cs | 1 + .../H.LowCode.MetaSchema/PageSchema.cs | 19 +- .../ComponentFragmentSchema.cs | 75 +++- .../ComponentPropertyGroupSchema.cs | 19 + .../ComponentPropertySchema.cs | 137 +++--- .../PropertySchemas/PagePropertySchema.cs | 3 + .../PropertySchemas/PropertyItemSchema.cs | 11 +- .../Utils/ObjectMerger.cs | 134 ++++++ .../AppPartsSchema.cs | 22 +- .../ComponentPartsSchema.cs | 105 +++-- .../PagePartsSchema.cs | 24 +- ...tsMetaSchema.cs => PartsMetaSchemaBase.cs} | 2 +- .../ComponentDesignStateSchema.cs | 36 ++ .../ComponentPartsEventSchema.cs | 11 + .../ComponentPartsPropertyGroupSchema.cs | 15 + .../ComponentPartsPropertySchema.cs | 18 + .../ComponentPartsStyleSchema.cs | 55 +++ .../DataAppServices/IFormDataAppService.cs | 3 +- .../H.LowCode.RenderEngine.Host.Client.csproj | 6 +- .../LowCodeGlobalVariables.cs | 4 +- .../RenderEngineHostClientModule.cs | 6 +- .../RenderEngineHostModule.cs | 6 +- .../appsettings.json | 4 +- .../ComponentRender/ComponentRender.razor.css | 23 -- .../ContainerComponentRender.razor.css | 4 - .../H.LowCode.RenderEngine.csproj | 5 + .../PageRender/FormPageRender.razor | 29 -- 205 files changed, 2960 insertions(+), 3199 deletions(-) create mode 100644 meta/parts/componentParts/antdesign/52391a70.json create mode 100644 meta/parts/componentParts/antdesign/5bd80f8a.json create mode 100644 meta/parts/componentParts/antdesign/5d066e93.json create mode 100644 meta/parts/componentParts/antdesign/6d997568.json create mode 100644 meta/parts/componentParts/antdesign/7bab5a19.json create mode 100644 meta/parts/componentParts/antdesign/f2b54b4c.json create mode 100644 meta/parts/componentParts/antdesign/f63f79db.json create mode 100644 src/Common/H.LowCode.Domain/PartsDomainServices/ComponentPartsDomainService.cs create mode 100644 src/Common/H.LowCode.Domain/PartsDomainServices/IComponentPartsDomainService.cs create mode 100644 src/Common/H.LowCode.Domain/PartsRepositories/IComponentPartsRepository.cs delete mode 100644 src/Common/H.LowCode.Model/ComponentPartsListModel.cs create mode 100644 src/Common/H.LowCode.Repository.JsonFile/Base/PartsFileRepositoryBase.cs create mode 100644 src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/PartsAppServices/IComponentPartsAppService.cs create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentPartsAppService.cs rename src/DesignEngine/H.LowCode.DesignEngine.Model/{ => Models}/AppListModel.cs (94%) rename src/DesignEngine/H.LowCode.DesignEngine.Model/{ => Models}/DataSourceListModel.cs (95%) rename src/DesignEngine/H.LowCode.DesignEngine.Model/{ => Models}/PageListModel.cs (82%) create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Model/PartsModels/ComponentPartsListModel.cs rename src/DesignEngine/H.LowCode.DesignEngine/Pages/{DesignerPage.razor => DesignPage.razor} (89%) create mode 100644 src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ComponentParts/ComponentForm.razor delete mode 100644 src/Parts/H.LowCode.ComponentParts.BasicComponents/ComponentProviders/BasicComponentProvider.cs delete mode 100644 src/Parts/H.LowCode.ComponentParts.BasicComponents/ComponentProviders/LayoutComponentProvider.cs delete mode 100644 src/Parts/H.LowCode.ComponentParts.BasicComponents/ComponentProviders/SeniorComponentProvider.cs delete mode 100644 src/Parts/H.LowCode.ComponentParts.ExtensionComponents/ComponentProviders/ExtensionComponentProvider.cs delete mode 100644 src/Parts/H.LowCode.ComponentParts.ExtensionComponents/PageTemplateProviders/ExtensionPageTemplateProvider.cs create mode 100644 src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/BasicComponentProvider.cs create mode 100644 src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/LayoutComponentProvider.cs create mode 100644 src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/SeniorComponentProvider.cs rename src/Parts/{H.LowCode.ComponentParts.BasicComponents => H.LowCode.Components.AntBlazor}/Components/LcButton.razor (72%) rename src/Parts/{H.LowCode.ComponentParts.BasicComponents => H.LowCode.Components.AntBlazor}/Components/LcCard.razor (57%) rename src/Parts/{H.LowCode.ComponentParts.BasicComponents => H.LowCode.Components.AntBlazor}/Components/LcCarousel.razor (91%) rename src/Parts/{H.LowCode.ComponentParts.BasicComponents => H.LowCode.Components.AntBlazor}/Components/LcDescriptions.razor (67%) rename src/Parts/{H.LowCode.ComponentParts.BasicComponents => H.LowCode.Components.AntBlazor}/Components/LcFlex.razor (74%) rename src/Parts/{H.LowCode.ComponentParts.BasicComponents => H.LowCode.Components.AntBlazor}/Components/LcGrid.razor (92%) rename src/Parts/{H.LowCode.ComponentParts.BasicComponents => H.LowCode.Components.AntBlazor}/Components/LcLayout.razor (88%) rename src/Parts/{H.LowCode.ComponentParts.BasicComponents => H.LowCode.Components.AntBlazor}/Components/LcList.razor (96%) rename src/Parts/{H.LowCode.ComponentParts.BasicComponents => H.LowCode.Components.AntBlazor}/Components/LcTable.razor (83%) rename src/Parts/{H.LowCode.ComponentParts.BasicComponents => H.LowCode.Components.AntBlazor}/Components/LcTabs.razor (76%) rename src/Parts/{H.LowCode.ComponentParts.BasicComponents => H.LowCode.Components.AntBlazor}/DefaultComponentModule.cs (65%) rename src/Parts/{H.LowCode.ComponentParts.BasicComponents/H.LowCode.ComponentParts.BasicComponents.csproj => H.LowCode.Components.AntBlazor/H.LowCode.Components.AntBlazor.csproj} (90%) rename src/Parts/{H.LowCode.ComponentParts.BasicComponents => H.LowCode.Components.AntBlazor}/_Imports.razor (91%) create mode 100644 src/Parts/H.LowCode.Components.Extension/ComponentProviders/ExtensionComponentProvider.cs rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/Components/LcBaiduMap.razor (61%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/Components/LcGaodeMap.razor (61%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/Components/LcLakexEditor.razor (69%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/Components/LcMap.razor (92%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/Components/LcMonacoEditor.razor (82%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/Components/LcRegion.razor (50%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/Components/LcUserSelect.razor (52%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/ExtensionComponentModule.cs (53%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents/H.LowCode.ComponentParts.ExtensionComponents.csproj => H.LowCode.Components.Extension/H.LowCode.Components.Extension.csproj} (88%) create mode 100644 src/Parts/H.LowCode.Components.Extension/PageTemplateProviders/ExtensionPageTemplateProvider.cs rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/_Imports.razor (81%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/LakexEditor-1.24.0/LakexEditor.js (81%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/LakexEditor-1.24.0/doc.css (100%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/LakexEditor-1.24.0/doc.umd.js (51%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/MonacoEditor/base/browser/ui/codicons/codicon/codicon.ttf (100%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/MonacoEditor/base/worker/workerMain.js (100%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/MonacoEditor/basic-languages/javascript/javascript.js (100%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/MonacoEditor/editor/editor.main.css (100%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/MonacoEditor/editor/editor.main.js (100%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/MonacoEditor/editor/editor.main.nls.js (100%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/MonacoEditor/language/typescript/tsMode.js (100%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/MonacoEditor/language/typescript/tsWorker.js (100%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/MonacoEditor/loader.min.js (100%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/MonacoEditor/monaco.js (89%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/antd-4.24.13/antd.css (100%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/react-18/react-dom.production.min.js (100%) rename src/Parts/{H.LowCode.ComponentParts.ExtensionComponents => H.LowCode.Components.Extension}/wwwroot/react-18/react.production.min.js (100%) delete mode 100644 src/Parts/H.LowCode.ThemeParts.AntBlazor/ComponentRender/ComponentRender.razor delete mode 100644 src/Parts/H.LowCode.ThemeParts.AntBlazor/ComponentRender/ContainerComponentRender.razor delete mode 100644 src/Parts/H.LowCode.ThemeParts.AntBlazor/PageRender/NormalPageRender.razor delete mode 100644 src/Parts/H.LowCode.ThemeParts.AntBlazor/PageRender/TablePageRender.razor rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/AntBlazorThemeModule.cs (90%) rename src/{RenderEngine/H.LowCode.RenderEngine => Parts/H.LowCode.Themes.AntBlazor}/ComponentRender/ComponentRender.razor (34%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/ComponentRender/ComponentRender.razor.css (100%) rename src/{RenderEngine/H.LowCode.RenderEngine => Parts/H.LowCode.Themes.AntBlazor}/ComponentRender/ContainerComponentRender.razor (59%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/ComponentRender/ContainerComponentRender.razor.css (100%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/ComponentRender/FormComponentRender.razor (31%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/ComponentRender/FormComponentRender.razor.css (100%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/ComponentRender/FormContainerComponentRender.razor (59%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/ComponentRender/FormContainerComponentRender.razor.css (100%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor/H.LowCode.ThemeParts.AntBlazor.csproj => H.LowCode.Themes.AntBlazor/H.LowCode.Themes.AntBlazor.csproj} (100%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/Layout/AntBlazorThemeLayout.razor (96%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/PageRender/FormPageRender.razor (54%) rename src/{RenderEngine/H.LowCode.RenderEngine => Parts/H.LowCode.Themes.AntBlazor}/PageRender/NormalPageRender.razor (85%) rename src/{RenderEngine/H.LowCode.RenderEngine => Parts/H.LowCode.Themes.AntBlazor}/PageRender/TablePageRender.razor (85%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/Pages/HomePage.razor (84%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/Pages/MetaPage.razor (97%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/_Imports.razor (100%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/wwwroot/images/logo.svg (100%) rename src/Parts/{H.LowCode.ThemeParts.AntBlazor => H.LowCode.Themes.AntBlazor}/wwwroot/renderengine.css (100%) create mode 100644 src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentPropertyGroupSchema.cs create mode 100644 src/Protocol/H.LowCode.MetaSchema/Utils/ObjectMerger.cs rename src/Protocol/H.LowCode.PartsMetaSchema/{BasePartsMetaSchema.cs => PartsMetaSchemaBase.cs} (85%) create mode 100644 src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentDesignStateSchema.cs create mode 100644 src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsEventSchema.cs create mode 100644 src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsPropertyGroupSchema.cs create mode 100644 src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsPropertySchema.cs create mode 100644 src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsStyleSchema.cs delete mode 100644 src/RenderEngine/H.LowCode.RenderEngine/ComponentRender/ComponentRender.razor.css delete mode 100644 src/RenderEngine/H.LowCode.RenderEngine/ComponentRender/ContainerComponentRender.razor.css delete mode 100644 src/RenderEngine/H.LowCode.RenderEngine/PageRender/FormPageRender.razor diff --git a/meta/apps/caseapp/menu/5omcgxevf.json b/meta/apps/caseapp/menu/5omcgxevf.json index ff52e485..4659829c 100644 --- a/meta/apps/caseapp/menu/5omcgxevf.json +++ b/meta/apps/caseapp/menu/5omcgxevf.json @@ -1 +1,13 @@ -{"aid":"caseapp","id":"5omcgxevf","pid":"i7ftaaue","t":"多标签页表单","type":0,"icon":"home","path":"gndz2vecz","order":5,"childs":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-03T12:33:54.6558904Z"} \ No newline at end of file +{ + "aid": "caseapp", + "id": "5omcgxevf", + "pid": "i7ftaaue", + "t": "多标签页表单", + "type": 0, + "icon": "home", + "path": "gndz2vecz", + "order": 5, + "childs": [], + "createdTime": "0001-01-01T00:00:00", + "modifiedTime": "2024-09-03T12:33:54.6558904Z" +} \ No newline at end of file diff --git a/meta/apps/caseapp/page/0lgu6xpop.json b/meta/apps/caseapp/page/0lgu6xpop.json index 6d5dd04c..1da94c6a 100644 --- a/meta/apps/caseapp/page/0lgu6xpop.json +++ b/meta/apps/caseapp/page/0lgu6xpop.json @@ -1 +1 @@ -{"aid":"caseapp","id":"0lgu6xpop","n":"地图","order":82,"pt":0,"pubstate":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T13:28:30.4945123Z"} \ No newline at end of file +{"aid":"caseapp","id":"0lgu6xpop","n":"地图","order":82,"pt":0,"pub":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T13:28:30.4945123Z"} \ No newline at end of file diff --git a/meta/apps/caseapp/page/2qceiqni.json b/meta/apps/caseapp/page/2qceiqni.json index a1558a34..bc3ffeb0 100644 --- a/meta/apps/caseapp/page/2qceiqni.json +++ b/meta/apps/caseapp/page/2qceiqni.json @@ -1 +1 @@ -{"aid":"caseapp","id":"2qceiqni","n":"主从表单","order":30,"pt":1,"pubstate":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-03T14:06:23.582086Z"} \ No newline at end of file +{"aid":"caseapp","id":"2qceiqni","n":"主从表单","order":30,"pt":1,"pub":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-03T14:06:23.582086Z"} \ No newline at end of file diff --git a/meta/apps/caseapp/page/2qme5ln5e.json b/meta/apps/caseapp/page/2qme5ln5e.json index e8302484..729f7eb1 100644 --- a/meta/apps/caseapp/page/2qme5ln5e.json +++ b/meta/apps/caseapp/page/2qme5ln5e.json @@ -1 +1 @@ -{"aid":"caseapp","id":"2qme5ln5e","n":"分组表单","order":23,"pt":1,"pubstate":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-03T14:05:33.0350751Z"} \ No newline at end of file +{"aid":"caseapp","id":"2qme5ln5e","n":"分组表单","order":23,"pt":1,"pub":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-03T14:05:33.0350751Z"} \ No newline at end of file diff --git a/meta/apps/caseapp/page/4tnfvebp1.json b/meta/apps/caseapp/page/4tnfvebp1.json index 2db92dec..bcbc6b07 100644 --- a/meta/apps/caseapp/page/4tnfvebp1.json +++ b/meta/apps/caseapp/page/4tnfvebp1.json @@ -4,174 +4,9 @@ "n": "左右布局列表", "order": 3, "pt": 2, - "pubstate": 0, + "pub": 0, "comps": [ - { - "id": "76723634-82f8-4067-8fe1-16280bd17695", - "n": "layout", - "iscontainer": true, - "pid": "159aa9ea-1086-4c23-a3c5-0ad863f95eb3", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "H.LowCode.ComponentParts.BasicComponents.LcLayout, H.LowCode.ComponentParts.BasicComponents" - }, - { - "idx": 1, - "frageenum": 2, - "n": "Component", - "valtype": 1, - "strval": "{Self}" - } - ], - "compprop": { - "n": "layout_930", - "t": "Layout 布局", - "compvaltype": 0, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 24, - "itemh": 150, - "labelw": 180, - "defstyle": "width:100%; height:100%; background-color: #ffffff00;", - "display": "inline", - "pos": "static" - }, - "childs": [ - { - "id": "c657ff7b-c5f2-48c7-8c97-f8d811054185", - "n": "layoutcontainer-content", - "iscontainer": true, - "pid": "76723634-82f8-4067-8fe1-16280bd17695", - "hide": true, - "fragment": [], - "compprop": { - "compvaltype": 0, - "supportprops": [], - "extdata": { - "layoutcontainer-content": "layoutcontainer-content" - } - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "defstyle": "height:100%; width:100%;", - "display": "inline", - "pos": "static" - }, - "childs": [ - { - "id": "3e9e62ed-e321-4968-9f2f-c3bb5d118b33", - "n": "table", - "pid": "c657ff7b-c5f2-48c7-8c97-f8d811054185", - "hide": true, - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "H.LowCode.ComponentParts.BasicComponents.LcTable, H.LowCode.ComponentParts.BasicComponents" - }, - { - "idx": 1, - "frageenum": 2, - "n": "Component", - "valtype": 1, - "strval": "{Self}" - } - ], - "compprop": { - "n": "table_849", - "t": "表格", - "compvaltype": 0, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 24, - "itemh": 85, - "labelw": 180, - "defstyle": "height: auto", - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - } - ], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "403b5b30-2532-4578-a8a8-5b34a6c1b94b", - "n": "layoutcontainer-sider", - "iscontainer": true, - "pid": "76723634-82f8-4067-8fe1-16280bd17695", - "hide": true, - "fragment": [], - "compprop": { - "compvaltype": 0, - "supportprops": [], - "extdata": { - "layoutcontainer-sider": "layoutcontainer-sider" - } - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "defstyle": "height:100%; width:100%;", - "display": "inline", - "pos": "static" - }, - "childs": [ - { - "id": "7d83ebdf-bdf1-4054-8ae3-29db6f115a00", - "n": "tree", - "pid": "403b5b30-2532-4578-a8a8-5b34a6c1b94b", - "hide": true, - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Tree\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "tree_964", - "t": "树", - "compvaltype": 0, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - } - ], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - } - ], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - } + ], "pageprop": { "playout": 2 diff --git a/meta/apps/caseapp/page/5kicsevr.json b/meta/apps/caseapp/page/5kicsevr.json index 58c1d9ce..6c0eb120 100644 --- a/meta/apps/caseapp/page/5kicsevr.json +++ b/meta/apps/caseapp/page/5kicsevr.json @@ -4,296 +4,9 @@ "n": "页面分栏表单", "order": 28, "pt": 1, - "pubstate": 0, + "pub": 0, "comps": [ - { - "id": "60d439f4-79bf-4248-bbfb-840bae32967d", - "n": "input", - "pid": "04ee0fc4-d9f6-4f56-8f07-12708d5e7083", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Input\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "input_853", - "t": "输入框", - "compvaltype": 1, - "supportprops": [ - "MaximumLength", - "MinimumLength", - "Pattern", - "Format" - ], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "97c80f1d-9af0-4ce0-91b5-fea1c79dffbb", - "n": "inputnumber", - "pid": "04ee0fc4-d9f6-4f56-8f07-12708d5e7083", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.InputNumber\u00601[[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "inputnumber_180", - "t": "数字输入框", - "compvaltype": 6, - "supportprops": [ - "Maximum", - "Minimum" - ], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "bb3b7d3e-668f-4278-aba0-c1dadb45a30a", - "n": "textarea", - "pid": "04ee0fc4-d9f6-4f56-8f07-12708d5e7083", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.TextArea, AntDesign" - }, - { - "idx": 1, - "frageenum": 1, - "n": "style", - "valtype": 1, - "strval": "height:50px;" - } - ], - "compprop": { - "n": "textarea_924", - "t": "大输入框", - "compvaltype": 1, - "supportprops": [ - "MaximumLength", - "MinimumLength" - ], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "d1462c49-1615-47bc-a175-b1ca0182db49", - "n": "checkbox", - "pid": "04ee0fc4-d9f6-4f56-8f07-12708d5e7083", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Checkbox, AntDesign" - } - ], - "compprop": { - "n": "checkbox_481", - "t": "多选框", - "compvaltype": 13, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "4ee07216-9917-4d68-9662-2917297762c1", - "n": "radio", - "pid": "04ee0fc4-d9f6-4f56-8f07-12708d5e7083", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Radio\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "radio_303", - "t": "单选框", - "compvaltype": 0, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "fec28725-833b-4821-95b5-0ae500d3a4d9", - "n": "autocomplete", - "pid": "04ee0fc4-d9f6-4f56-8f07-12708d5e7083", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.AutoComplete\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "autocomplete_739", - "t": "自动完成", - "compvaltype": 1, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "ceeb0d29-ef34-4f9f-9066-971846e3a146", - "n": "cascader", - "pid": "04ee0fc4-d9f6-4f56-8f07-12708d5e7083", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Cascader, AntDesign" - } - ], - "compprop": { - "n": "cascader_138", - "t": "级联选择", - "compvaltype": 1, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "72eb1e8d-8306-4ea0-9734-f71874128415", - "n": "select", - "pid": "04ee0fc4-d9f6-4f56-8f07-12708d5e7083", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Select\u00602[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "select_514", - "t": "选择器", - "compvaltype": 1, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "d8bfdfaf-f4b0-4f01-81f8-7dbf584bf1f8", - "n": "switch", - "pid": "04ee0fc4-d9f6-4f56-8f07-12708d5e7083", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Switch, AntDesign" - } - ], - "compprop": { - "n": "switch_605", - "t": "开关", - "compvaltype": 13, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - } + ], "pageprop": { "playout": 3 diff --git a/meta/apps/caseapp/page/7qa2yetz.json b/meta/apps/caseapp/page/7qa2yetz.json index 78628c68..eea80ca1 100644 --- a/meta/apps/caseapp/page/7qa2yetz.json +++ b/meta/apps/caseapp/page/7qa2yetz.json @@ -1 +1 @@ -{"aid":"caseapp","id":"7qa2yetz","n":"表头分组列表","order":4,"pt":2,"pubstate":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T02:45:54.9019322Z"} \ No newline at end of file +{"aid":"caseapp","id":"7qa2yetz","n":"表头分组列表","order":4,"pt":2,"pub":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T02:45:54.9019322Z"} \ No newline at end of file diff --git a/meta/apps/caseapp/page/85oldiqok.json b/meta/apps/caseapp/page/85oldiqok.json index 834bfdd8..6be7d66c 100644 --- a/meta/apps/caseapp/page/85oldiqok.json +++ b/meta/apps/caseapp/page/85oldiqok.json @@ -1 +1 @@ -{"aid":"caseapp","id":"85oldiqok","n":"代码编辑器","order":83,"pt":0,"pubstate":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T13:28:37.8746284Z"} \ No newline at end of file +{"aid":"caseapp","id":"85oldiqok","n":"代码编辑器","order":83,"pt":0,"pub":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T13:28:37.8746284Z"} \ No newline at end of file diff --git a/meta/apps/caseapp/page/fhumgxyk.json b/meta/apps/caseapp/page/fhumgxyk.json index 782cb14c..0f0270bc 100644 --- a/meta/apps/caseapp/page/fhumgxyk.json +++ b/meta/apps/caseapp/page/fhumgxyk.json @@ -1 +1,147 @@ -{"aid":"caseapp","id":"fhumgxyk","n":"基础表单","order":21,"pt":1,"pubstatus":false,"comps":[{"id":"483402c9-9613-4cae-bf47-f28b72bbb99f","n":"input","pid":"2696932e-fb12-4ad6-b8e5-b98a313b3f2e","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Input\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"f_field1","t":"输入框","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"dst":0},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"c78ff6cb-f784-44a8-90ab-b8ce541e46ba","n":"inputnumber","pid":"2696932e-fb12-4ad6-b8e5-b98a313b3f2e","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.InputNumber\u00601[[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"f_field2","t":"数字输入框","supds":false,"compvaltype":6,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"dst":0},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"7916d0b5-e0b0-4042-9833-478906414d4c","n":"textarea","pid":"2696932e-fb12-4ad6-b8e5-b98a313b3f2e","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.TextArea, AntDesign"},{"idx":1,"frageenum":1,"n":"style","valtype":1,"strval":"height:50px;"}],"compprop":{"n":"f_field3","t":"大输入框","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"dst":0},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"76271da6-f98f-4372-9bba-1d3878ea6788","n":"checkbox","pid":"2696932e-fb12-4ad6-b8e5-b98a313b3f2e","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Checkbox, AntDesign"}],"compprop":{"n":"f_field4","t":"多选框","supds":false,"compvaltype":13,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"dst":0},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"fe12fc3d-7063-4cd8-bdea-5f1626185ab6","n":"radio","pid":"2696932e-fb12-4ad6-b8e5-b98a313b3f2e","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Radio\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"f_field5","t":"单选框","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"dst":0},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"1b02db82-5c09-4163-96a2-02d104b54bfa","n":"select","pid":"2696932e-fb12-4ad6-b8e5-b98a313b3f2e","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Select\u00602[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"f_field6","t":"选择器","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"dst":0},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"5d4ef31c-6a3b-46ea-a0c2-c387e0e301d6","n":"cascader","pid":"2696932e-fb12-4ad6-b8e5-b98a313b3f2e","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Cascader, AntDesign"}],"compprop":{"n":"f_field8","t":"级联选择","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"dst":0},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"ef03b5a7-9bcd-40e0-85fd-69a00c1948ba","n":"switch","pid":"2696932e-fb12-4ad6-b8e5-b98a313b3f2e","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Switch, AntDesign"}],"compprop":{"n":"f_field9","t":"开关","supds":false,"compvaltype":13,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"dst":0},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"92301c7e-fdcf-4ecb-8274-bffe7ca18057","n":"timepicker","pid":"2696932e-fb12-4ad6-b8e5-b98a313b3f2e","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"f_field10","t":"时间选择","supds":false,"compvaltype":18,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"dst":0},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"425d8da3-20f9-49ca-aed5-94e65294baa6","n":"cascader","pid":"e7c59aea-a035-464a-b35f-890ce8e8d1a0","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Cascader, AntDesign"}],"compprop":{"n":"f_field12","t":"级联选择","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"dst":0},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"pageprop":{"playout":2},"ds":{"dst":1,"dsv":"tb_test1"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-11-27T17:01:55.0475704Z"} \ No newline at end of file +{ + "aid": "caseapp", + "id": "fhumgxyk", + "n": "基础表单", + "order": 21, + "pt": 1, + "pub": 0, + "pageprop": { + "playout": 2, + "ds": { + "dst": 0 + } + }, + "ds": { + "dst": 1, + "dsv": "tb_test1" + }, + "comps": [ + { + "id": "0bd406f9-10f9-4eaf-8184-270b192a5e20", + "libid": "antdesign", + "compid": "52391a70", + "pid": "lyawwbh9f", + "n": "Input1", + "lb": "输入框1", + "desc": "111", + "container": false, + "frag": { + "dtn": "AntDesign.Input\u00601[System.String], AntDesign", + "tn": "AntDesign.Input\u00601[System.String], AntDesign", + "tm": "System.String", + "attrs": [], + "params": [] + }, + "pgroups": [ + { + "n": "basic", + "disn": "自定义", + "props": [ + { + "n": "maxlength", + "disn": "最大长度", + "desc": "字段输入的最大长度,为0时表示不限制长度", + "dftval": "0", + "compvaltype": 0 + }, + { + "n": "isslice", + "disn": "是否截断", + "desc": "选择\u0022是\u0022当超出数据库长度时字段截断", + "dftval": "0", + "compvaltype": 0 + }, + { + "n": "isreadonly", + "disn": "是否只读", + "desc": "", + "dftval": "0", + "compvaltype": 0 + }, + { + "n": "tips", + "disn": "输入提示", + "dftval": "", + "compvaltype": 0 + } + ] + } + ], + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {}, + "childs": [], + "ds": { + "dst": 0 + } + }, + { + "id": "299f6803-f04d-498d-ab53-3c1812c91b3d", + "libid": "antdesign", + "compid": "52391a70", + "pid": "lyawwbh9f", + "n": "Input2", + "lb": "输入框2", + "desc": "222", + "container": false, + "frag": { + "dtn": "AntDesign.Input\u00601[System.String], AntDesign", + "tn": "AntDesign.Input\u00601[System.String], AntDesign", + "tm": "System.String", + "params": [] + }, + "pgroups": [ + { + "n": "basic", + "disn": "自定义", + "props": [ + { + "n": "maxlength", + "disn": "最大长度", + "desc": "字段输入的最大长度,为0时表示不限制长度", + "dftval": "0", + "compvaltype": 0 + }, + { + "n": "isslice", + "disn": "是否截断", + "desc": "选择\u0022是\u0022当超出数据库长度时字段截断", + "dftval": "0", + "compvaltype": 0 + }, + { + "n": "isreadonly", + "disn": "是否只读", + "desc": "", + "dftval": "0", + "compvaltype": 0 + }, + { + "n": "tips", + "disn": "输入提示", + "dftval": "", + "compvaltype": 0 + } + ] + } + ], + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {}, + "childs": [], + "ds": { + "dst": 0 + } + } + ], + "createdTime": "0001-01-01T00:00:00", + "modifiedTime": "2024-12-28T13:29:37.336004Z" +} \ No newline at end of file diff --git a/meta/apps/caseapp/page/g0qcqxzd.json b/meta/apps/caseapp/page/g0qcqxzd.json index 91b31418..90bbee81 100644 --- a/meta/apps/caseapp/page/g0qcqxzd.json +++ b/meta/apps/caseapp/page/g0qcqxzd.json @@ -15,7 +15,7 @@ { "idx": 0, "frageenum": 0, - "fragname": "H.LowCode.ComponentParts.BasicComponents.LcTable, H.LowCode.ComponentParts.BasicComponents" + "fragname": "H.LowCode.Components.AntBlazor.LcTable, H.LowCode.Components.AntBlazor" }, { "idx": 1, diff --git a/meta/apps/caseapp/page/gndz2vecz.json b/meta/apps/caseapp/page/gndz2vecz.json index f64992d7..886b2c3c 100644 --- a/meta/apps/caseapp/page/gndz2vecz.json +++ b/meta/apps/caseapp/page/gndz2vecz.json @@ -4,396 +4,9 @@ "n": "多标签页表单", "order": 24, "pt": 1, - "pubstate": 0, + "pub": 0, "comps": [ - { - "id": "ed4e2646-f047-454b-8998-06feec1c9e86", - "n": "tabs", - "pid": "ca8ade2e-59b0-40e9-bc94-c22a52790993", - "hide": true, - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "H.LowCode.ComponentParts.BasicComponents.LcTabs, H.LowCode.ComponentParts.BasicComponents" - }, - { - "idx": 1, - "frageenum": 2, - "n": "Component", - "valtype": 1, - "strval": "{Self}" - }, - { - "idx": 2, - "frageenum": 1, - "n": "ItemCount", - "valtype": 3, - "intval": 3 - } - ], - "compprop": { - "n": "tabs_845", - "t": "标签页", - "compvaltype": 0, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 24, - "itemh": 300, - "labelw": 180, - "defstyle": "background-color: #ffffff00; height: auto", - "display": "inline", - "pos": "static" - }, - "childs": [ - { - "id": "a05ae91c-809a-49d9-a5e2-5a02613f11ab", - "n": "tab-0", - "iscontainer": true, - "pid": "ed4e2646-f047-454b-8998-06feec1c9e86", - "hide": true, - "fragment": [], - "compprop": { - "compvaltype": 0, - "supportprops": [], - "extdata": { - "tab-0": "tab-0" - } - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "defstyle": "min-height:300px; height:auto; background: #f4f7fa;", - "display": "inline", - "pos": "static" - }, - "childs": [ - { - "id": "3fc5f474-a2d6-4af4-be6b-1f1d36dd4597", - "n": "input", - "pid": "a05ae91c-809a-49d9-a5e2-5a02613f11ab", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Input\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "input_197", - "t": "输入框", - "compvaltype": 1, - "supportprops": [ - "MaximumLength", - "MinimumLength", - "Pattern", - "Format" - ], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "e31f40d3-8536-4a9d-bc6a-04df5fe7ea5c", - "n": "inputnumber", - "pid": "a05ae91c-809a-49d9-a5e2-5a02613f11ab", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.InputNumber\u00601[[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "inputnumber_754", - "t": "数字输入框", - "compvaltype": 6, - "supportprops": [ - "Maximum", - "Minimum" - ], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "1e8cd89e-1213-42ff-a9eb-8d267b34d7e9", - "n": "checkbox", - "pid": "a05ae91c-809a-49d9-a5e2-5a02613f11ab", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Checkbox, AntDesign" - } - ], - "compprop": { - "n": "checkbox_902", - "t": "多选框", - "compvaltype": 13, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "9bf54059-b285-494e-9b95-ea38e53d19ff", - "n": "timepicker", - "pid": "a05ae91c-809a-49d9-a5e2-5a02613f11ab", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "timepicker_723", - "t": "时间选择", - "compvaltype": 18, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - } - ], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "2f2e0c1f-6bb3-40f0-92d8-049140c2b983", - "n": "tab-1", - "iscontainer": true, - "pid": "ed4e2646-f047-454b-8998-06feec1c9e86", - "hide": true, - "fragment": [], - "compprop": { - "compvaltype": 0, - "supportprops": [], - "extdata": { - "tab-1": "tab-1" - } - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "defstyle": "min-height:300px; height:auto; background: #f4f7fa;", - "display": "inline", - "pos": "static" - }, - "childs": [ - { - "id": "12a6f5ea-3e4d-4555-b50f-607b0d2a3c45", - "n": "textarea", - "pid": "2f2e0c1f-6bb3-40f0-92d8-049140c2b983", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.TextArea, AntDesign" - }, - { - "idx": 1, - "frageenum": 1, - "n": "style", - "valtype": 1, - "strval": "height:50px;" - } - ], - "compprop": { - "n": "textarea_378", - "t": "大输入框", - "compvaltype": 1, - "supportprops": [ - "MaximumLength", - "MinimumLength" - ], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "fda9a9e8-3bae-47aa-98ac-450080d3aa24", - "n": "autocomplete", - "pid": "2f2e0c1f-6bb3-40f0-92d8-049140c2b983", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.AutoComplete\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "autocomplete_722", - "t": "自动完成", - "compvaltype": 1, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - } - ], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "c94156fa-c964-4ab1-b13e-a87e9700f140", - "n": "tab-2", - "iscontainer": true, - "pid": "ed4e2646-f047-454b-8998-06feec1c9e86", - "hide": true, - "fragment": [], - "compprop": { - "compvaltype": 0, - "supportprops": [], - "extdata": { - "tab-2": "tab-2" - } - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "defstyle": "min-height:300px; height:auto; background: #f4f7fa;", - "display": "inline", - "pos": "static" - }, - "childs": [ - { - "id": "7b128063-00f8-4ff0-a8f3-82c281dc3cfe", - "n": "switch", - "pid": "c94156fa-c964-4ab1-b13e-a87e9700f140", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Switch, AntDesign" - } - ], - "compprop": { - "n": "switch_784", - "t": "开关", - "compvaltype": 13, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "81323554-c9eb-4c24-939a-7bf07e759cf0", - "n": "timepicker", - "pid": "c94156fa-c964-4ab1-b13e-a87e9700f140", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "timepicker_693", - "t": "时间选择", - "compvaltype": 18, - "supportprops": [], - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - } - ], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - } - ], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - } + ], "pageprop": { "playout": 2 diff --git a/meta/apps/caseapp/page/huf12sk.json b/meta/apps/caseapp/page/huf12sk.json index d2d8d9b3..e13e8a16 100644 --- a/meta/apps/caseapp/page/huf12sk.json +++ b/meta/apps/caseapp/page/huf12sk.json @@ -4,7 +4,7 @@ "n": "查询列表", "order": 2, "pt": 2, - "pubstate": 0, + "pub": 0, "comps": [ { "id": "4c099d76-872e-41f6-a3f9-089a8a104757", @@ -15,7 +15,7 @@ { "idx": 0, "frageenum": 0, - "fragname": "H.LowCode.ComponentParts.BasicComponents.LcTable, H.LowCode.ComponentParts.BasicComponents" + "fragname": "H.LowCode.Components.AntBlazor.LcTable, H.LowCode.Components.AntBlazor" }, { "idx": 1, diff --git a/meta/apps/caseapp/page/pl3juvaok.json b/meta/apps/caseapp/page/pl3juvaok.json index 760c827c..21167338 100644 --- a/meta/apps/caseapp/page/pl3juvaok.json +++ b/meta/apps/caseapp/page/pl3juvaok.json @@ -4,212 +4,9 @@ "n": "校验表单", "order": 22, "pt": 1, - "pubstate": 0, + "pub": 0, "comps": [ - { - "id": "5040c62e-70c5-4c2b-bbab-dad8a38ab419", - "n": "input", - "pid": "6911e9be-4bb2-41d7-945e-c828914dadcb", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Input\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "input_666", - "t": "输入框", - "compvaltype": 1, - "supportprops": [ - "MaximumLength", - "MinimumLength", - "Pattern", - "Format" - ], - - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "5e3705bf-e827-4ec3-898a-03e7a27aa1ad", - "n": "inputnumber", - "pid": "6911e9be-4bb2-41d7-945e-c828914dadcb", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.InputNumber\u00601[[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "inputnumber_302", - "t": "数字输入框", - "compvaltype": 6, - "supportprops": [ - "Maximum", - "Minimum" - ], - - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "d1dfa9eb-49c3-445a-888c-6b0428d0b03a", - "n": "textarea", - "pid": "6911e9be-4bb2-41d7-945e-c828914dadcb", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.TextArea, AntDesign" - }, - { - "idx": 1, - "frageenum": 1, - "n": "style", - "valtype": 1, - "strval": "height:50px;" - } - ], - "compprop": { - "n": "textarea_135", - "t": "大输入框", - "compvaltype": 1, - "supportprops": [ - "MaximumLength", - "MinimumLength" - ], - - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "5bb8630f-8095-453f-a44c-40d1ffa7df20", - "n": "checkbox", - "pid": "6911e9be-4bb2-41d7-945e-c828914dadcb", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Checkbox, AntDesign" - } - ], - "compprop": { - "n": "checkbox_387", - "t": "多选框", - "compvaltype": 13, - "supportprops": [], - - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "55d8d52a-b4a6-4068-9509-34db7577a930", - "n": "radio", - "pid": "6911e9be-4bb2-41d7-945e-c828914dadcb", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Radio\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "radio_309", - "t": "单选框", - "compvaltype": 0, - "supportprops": [], - - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - }, - { - "id": "9c717aee-646f-4f79-a4f0-99ef93985155", - "n": "select", - "pid": "6911e9be-4bb2-41d7-945e-c828914dadcb", - "fragment": [ - { - "idx": 0, - "frageenum": 0, - "fragname": "AntDesign.Select\u00602[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign" - } - ], - "compprop": { - "n": "select_641", - "t": "选择器", - "compvaltype": 1, - "supportprops": [], - - "extdata": {} - }, - "event": {}, - "style": { - "itemw": 12, - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "childs": [], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "0001-01-01T00:00:00" - } + ], "pageprop": { "playout": 2 diff --git a/meta/apps/caseapp/page/rlswps5.json b/meta/apps/caseapp/page/rlswps5.json index d2086793..f78728c0 100644 --- a/meta/apps/caseapp/page/rlswps5.json +++ b/meta/apps/caseapp/page/rlswps5.json @@ -1 +1 @@ -{"aid":"caseapp","id":"rlswps5","n":"文本编辑器","order":81,"pt":0,"pubstate":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T13:28:22.7333711Z"} \ No newline at end of file +{"aid":"caseapp","id":"rlswps5","n":"文本编辑器","order":81,"pt":0,"pub":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T13:28:22.7333711Z"} \ No newline at end of file diff --git a/meta/apps/caseapp/page/sf1duor2x.json b/meta/apps/caseapp/page/sf1duor2x.json index c8ca95dc..8ac39f6e 100644 --- a/meta/apps/caseapp/page/sf1duor2x.json +++ b/meta/apps/caseapp/page/sf1duor2x.json @@ -1 +1 @@ -{"aid":"caseapp","id":"sf1duor2x","n":"分析页","order":61,"pt":0,"pubstate":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T02:44:53.435242Z"} \ No newline at end of file +{"aid":"caseapp","id":"sf1duor2x","n":"分析页","order":61,"pt":0,"pub":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T02:44:53.435242Z"} \ No newline at end of file diff --git a/meta/apps/caseapp/page/uwz9o94b0.json b/meta/apps/caseapp/page/uwz9o94b0.json index fb26e570..d9a2f585 100644 --- a/meta/apps/caseapp/page/uwz9o94b0.json +++ b/meta/apps/caseapp/page/uwz9o94b0.json @@ -1 +1 @@ -{"aid":"caseapp","id":"uwz9o94b0","n":"监控页","order":62,"pt":0,"pubstate":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T02:44:38.4337882Z"} \ No newline at end of file +{"aid":"caseapp","id":"uwz9o94b0","n":"监控页","order":62,"pt":0,"pub":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T02:44:38.4337882Z"} \ No newline at end of file diff --git a/meta/apps/caseapp/page/xjvks1d3f.json b/meta/apps/caseapp/page/xjvks1d3f.json index 8022c369..5ce1c2fa 100644 --- a/meta/apps/caseapp/page/xjvks1d3f.json +++ b/meta/apps/caseapp/page/xjvks1d3f.json @@ -1 +1 @@ -{"aid":"caseapp","id":"xjvks1d3f","n":"表格样式表单","order":29,"pt":1,"pubstate":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-03T14:05:59.3915206Z"} \ No newline at end of file +{"aid":"caseapp","id":"xjvks1d3f","n":"表格样式表单","order":29,"pt":1,"pub":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-03T14:05:59.3915206Z"} \ No newline at end of file diff --git a/meta/apps/caseapp/page/xovrp6nz.json b/meta/apps/caseapp/page/xovrp6nz.json index 08ba5ea4..bcf2bce5 100644 --- a/meta/apps/caseapp/page/xovrp6nz.json +++ b/meta/apps/caseapp/page/xovrp6nz.json @@ -1 +1 @@ -{"aid":"caseapp","id":"xovrp6nz","n":"卡片列表","order":5,"pt":2,"pubstate":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T02:46:01.3062168Z"} \ No newline at end of file +{"aid":"caseapp","id":"xovrp6nz","n":"卡片列表","order":5,"pt":2,"pub":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T02:46:01.3062168Z"} \ No newline at end of file diff --git a/meta/apps/caseapp/page/ymb3bsw.json b/meta/apps/caseapp/page/ymb3bsw.json index 7710c78b..f25476be 100644 --- a/meta/apps/caseapp/page/ymb3bsw.json +++ b/meta/apps/caseapp/page/ymb3bsw.json @@ -1 +1 @@ -{"aid":"caseapp","id":"ymb3bsw","n":"工作台","order":63,"pt":0,"pubstate":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T02:44:46.6022488Z"} \ No newline at end of file +{"aid":"caseapp","id":"ymb3bsw","n":"工作台","order":63,"pt":0,"pub":0,"comps":[],"pageprop":{"playout":2},"ds":{"type":0,"fields":[],"options":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-09-12T02:44:46.6022488Z"} \ No newline at end of file diff --git a/meta/apps/testapp/page/ajzc8ywaa.json b/meta/apps/testapp/page/ajzc8ywaa.json index f9e338f4..48e4934c 100644 --- a/meta/apps/testapp/page/ajzc8ywaa.json +++ b/meta/apps/testapp/page/ajzc8ywaa.json @@ -1 +1,26 @@ -{"aid":"testapp","id":"ajzc8ywaa","n":"页面1","order":3,"pt":0,"pubstatus":false,"comps":[{"id":"4ef818b1-0f5e-4318-a9be-ccf382df76fb","n":"inputnumber","pid":"c164e179-f59b-4e4a-924a-4b9a5f7b2d74","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.InputNumber\u00601[[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"inputnumber_584","t":"数字输入框","supds":false,"compvaltype":6,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"pageprop":{"playout":2},"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-10-13T09:21:54.2980288Z"} \ No newline at end of file +{ + "aid": "testapp", + "id": "ajzc8ywaa", + "n": "页面1", + "order": 3, + "pt": 0, + "pubstatus": false, + "comps": [ + + ], + "pageprop": { + "playout": 2 + }, + "ds": { + "order": 0, + "type": 0, + "pubstatus": false, + "fields": [], + "ops": [], + "createdTime": "0001-01-01T00:00:00", + "modifiedTime": "0001-01-01T00:00:00" + }, + "i18n": {}, + "createdTime": "0001-01-01T00:00:00", + "modifiedTime": "2024-10-13T09:21:54.2980288Z" +} \ No newline at end of file diff --git a/meta/apps/testapp/page/ehduqxwzm.json b/meta/apps/testapp/page/ehduqxwzm.json index 67d68725..003333d9 100644 --- a/meta/apps/testapp/page/ehduqxwzm.json +++ b/meta/apps/testapp/page/ehduqxwzm.json @@ -1 +1,26 @@ -{"aid":"testapp","id":"ehduqxwzm","n":"页面3","order":5,"pt":0,"pubstatus":false,"comps":[{"id":"dc7dcc44-9318-4793-a193-65e4c9473d37","n":"autocomplete","pid":"aee83d69-f6c5-4f51-877d-680e4b8aa6dc","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.AutoComplete\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"autocomplete_916","t":"自动完成","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"pageprop":{"playout":2},"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-10-13T09:22:10.8343157Z"} \ No newline at end of file +{ + "aid": "testapp", + "id": "ehduqxwzm", + "n": "页面3", + "order": 5, + "pt": 0, + "pubstatus": false, + "comps": [ + + ], + "pageprop": { + "playout": 2 + }, + "ds": { + "order": 0, + "type": 0, + "pubstatus": false, + "fields": [], + "ops": [], + "createdTime": "0001-01-01T00:00:00", + "modifiedTime": "0001-01-01T00:00:00" + }, + "i18n": {}, + "createdTime": "0001-01-01T00:00:00", + "modifiedTime": "2024-10-13T09:22:10.8343157Z" +} \ No newline at end of file diff --git a/meta/apps/testapp/page/wjrxq0ft.json b/meta/apps/testapp/page/wjrxq0ft.json index 9a2f8b69..3ec06f98 100644 --- a/meta/apps/testapp/page/wjrxq0ft.json +++ b/meta/apps/testapp/page/wjrxq0ft.json @@ -1 +1,26 @@ -{"aid":"testapp","id":"wjrxq0ft","n":"组件嵌套","order":1,"pt":0,"pubstatus":false,"comps":[{"id":"c201339e-8400-4e5b-94bb-2a58988d4742","pid":"9460d9cb-1687-49bf-8b0d-97c693cedfd3","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Input\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"_454","t":"输入框","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"ae52571b-fae7-49c6-bc92-d8e1f2b4085c","pid":"9460d9cb-1687-49bf-8b0d-97c693cedfd3","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.InputNumber\u00601[[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"_940","t":"数字输入框","supds":false,"compvaltype":6,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"457b84fb-d625-406c-8252-c4fdb7d3b6a3","pid":"9460d9cb-1687-49bf-8b0d-97c693cedfd3","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.TextArea, AntDesign"},{"idx":1,"frageenum":1,"n":"style","valtype":1,"strval":"height:50px;"}],"compprop":{"n":"_723","t":"大输入框","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"ccc25b3b-fcd9-4a1b-ace3-7e402f7ffdcd","pid":"9460d9cb-1687-49bf-8b0d-97c693cedfd3","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Checkbox, AntDesign"}],"compprop":{"n":"_124","t":"多选框","supds":false,"compvaltype":13,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"0b907bde-f6d1-4f29-9c7a-626c374e2a6a","pid":"9460d9cb-1687-49bf-8b0d-97c693cedfd3","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Radio\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"_414","t":"单选框","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"3b38c243-9940-4c12-91de-bbfc28918e9b","pid":"9460d9cb-1687-49bf-8b0d-97c693cedfd3","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Select\u00602[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"_618","t":"选择器","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"66c6819d-a65a-4bcc-afd4-8c75f1e0d0a1","pid":"9460d9cb-1687-49bf-8b0d-97c693cedfd3","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.AutoComplete\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"_851","t":"自动完成","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"9d18d92a-2b53-412e-8985-ddc4ce5b50bc","pid":"9460d9cb-1687-49bf-8b0d-97c693cedfd3","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Cascader, AntDesign"}],"compprop":{"n":"_278","t":"级联选择","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"563e80ce-e433-4c65-a47e-368c4dacf72e","pid":"9460d9cb-1687-49bf-8b0d-97c693cedfd3","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Switch, AntDesign"}],"compprop":{"n":"_504","t":"开关","supds":false,"compvaltype":13,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"7390aa99-edc8-4a5a-8114-43b06c5b999e","pid":"9460d9cb-1687-49bf-8b0d-97c693cedfd3","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"_147","t":"时间选择","supds":false,"compvaltype":18,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"5d8fa30b-dbcf-4b60-9d44-fe72c611996b","pid":"9460d9cb-1687-49bf-8b0d-97c693cedfd3","hide":true,"fragment":[{"idx":0,"frageenum":0,"fragname":"H.LowCode.ComponentParts.BasicComponents.LcButton, H.LowCode.ComponentParts.BasicComponents"},{"idx":1,"frageenum":2,"n":"Text","valtype":1,"strval":"按钮"}],"compprop":{"n":"_429","t":"按钮","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":2,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","n":"grid","iscontainer":true,"pid":"d084f514-811c-4270-887e-d55415c33726","fragment":[{"idx":0,"frageenum":0,"fragname":"H.LowCode.ComponentParts.BasicComponents.LcGrid, H.LowCode.ComponentParts.BasicComponents"},{"idx":1,"frageenum":2,"n":"Component","valtype":1,"strval":"{Self}"},{"idx":2,"frageenum":1,"n":"Rows","valtype":3,"intval":2},{"idx":3,"frageenum":1,"n":"Cols","valtype":3,"intval":2}],"compprop":{"n":"grid_333","t":"Grid 栅格","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":85,"labelw":180,"defstyle":"background-color: #ffffff00; height: auto;","display":"inline","pos":"static"},"childs":[{"id":"28dd07c0-8e82-4f18-8489-4222519af917","n":"grid","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","fragment":[],"compprop":{"n":"grid_313","t":"Grid 栅格","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":85,"labelw":180,"defstyle":"background-color: #ffffff00; height: auto;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"a628481f-8aef-44a4-99cf-745ef6875800","n":"grid","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","fragment":[],"compprop":{"n":"grid_313","t":"Grid 栅格","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":85,"labelw":180,"defstyle":"background-color: #ffffff00; height: auto;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"1cb3f131-e56f-4d88-82e5-5d86f900a1f2","n":"grid","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","fragment":[],"compprop":{"n":"grid_313","t":"Grid 栅格","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":85,"labelw":180,"defstyle":"background-color: #ffffff00; height: auto;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"0d9f5cfe-9f02-4464-bada-f65ee58c2165","n":"grid","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","fragment":[],"compprop":{"n":"grid_313","t":"Grid 栅格","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":85,"labelw":180,"defstyle":"background-color: #ffffff00; height: auto;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"56eb9c3e-1c01-420a-a589-6e89e9172aeb","n":"gridcontainer-0-0","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"54bf3545-f8ab-425b-bb01-9810c3085990","n":"gridcontainer-0-1","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"31d018bc-ac7c-4018-878e-db02b2638d00","n":"gridcontainer-1-0","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"3a357bfc-29a0-449f-9bcc-7cca80bad105","n":"gridcontainer-1-1","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"00ddcb7b-5680-4424-955d-e580e077fd3d","n":"gridcontainer-0-0","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[{"id":"71494530-79a2-49c7-9599-28a281c99a4a","n":"input","pid":"00ddcb7b-5680-4424-955d-e580e077fd3d","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Input\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"input_581","t":"输入框","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"d8cda63d-f52b-4d30-80f4-0e4bfd453b86","n":"gridcontainer-0-1","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"5a54f1b7-e47f-443b-ac2c-57ee186fd6da","n":"gridcontainer-1-0","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"0ba45127-8414-4299-8aff-15b478b30ea3","n":"gridcontainer-1-1","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"4883b019-91d9-44ef-998d-e0ea1aae7b5c","n":"gridcontainer-0-0","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"gridcontainer-0-0":"gridcontainer-0-0"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[{"id":"cf7e898b-0282-44c2-a6ac-c06cef69c9bc","n":"switch","pid":"4883b019-91d9-44ef-998d-e0ea1aae7b5c","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Switch, AntDesign"}],"compprop":{"n":"switch_114","t":"开关","supds":false,"compvaltype":13,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"124d3a28-61ca-4f39-ab25-0d98faac4bff","n":"gridcontainer-0-1","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"gridcontainer-0-1":"gridcontainer-0-1"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"29e61e50-b6ec-4d92-ad09-d2c212f4c332","n":"gridcontainer-1-0","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"gridcontainer-1-0":"gridcontainer-1-0"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"a5daf57b-453a-407f-9e52-96cc5057cf46","n":"gridcontainer-1-1","iscontainer":true,"pid":"fb5b62fc-c4e7-40fc-921c-8d3c330562bf","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"gridcontainer-1-1":"gridcontainer-1-1"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"5ea1a22f-2ed8-4494-b684-aae31ca2b7ec","n":"layout","iscontainer":true,"pid":"05982b5d-4fc2-4b59-8cc9-98def07be7fd","fragment":[{"idx":0,"frageenum":0,"fragname":"H.LowCode.ComponentParts.BasicComponents.LcLayout, H.LowCode.ComponentParts.BasicComponents"},{"idx":1,"frageenum":2,"n":"Component","valtype":1,"strval":"{Self}"}],"compprop":{"n":"layout_260","t":"Layout 布局","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":150,"labelw":180,"defstyle":"background-color: #ffffff00; height: 100%","display":"inline","pos":"static"},"childs":[{"id":"78d20185-c6d8-41c1-a9f9-1bcf57cf2c82","n":"layoutcontainer-content","iscontainer":true,"pid":"5ea1a22f-2ed8-4494-b684-aae31ca2b7ec","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"layoutcontainer-content":"layoutcontainer-content"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"3a5cc01d-925f-4409-ae3a-dfa1cd7bebfb","n":"layoutcontainer-sider","iscontainer":true,"pid":"5ea1a22f-2ed8-4494-b684-aae31ca2b7ec","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"layoutcontainer-sider":"layoutcontainer-sider"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100;","display":"inline","pos":"static"},"childs":[{"id":"2dcf5a21-9133-4012-b9e7-2d08ad901b54","n":"flex","iscontainer":true,"pid":"3a5cc01d-925f-4409-ae3a-dfa1cd7bebfb","fragment":[{"idx":0,"frageenum":0,"fragname":"H.LowCode.ComponentParts.BasicComponents.LcFlex, H.LowCode.ComponentParts.BasicComponents"},{"idx":1,"frageenum":2,"n":"Component","valtype":1,"strval":"{Self}"}],"compprop":{"n":"flex_931","t":"Flex 布局","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":150,"labelw":180,"defstyle":"background-color: #ffffff00; height: auto;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"pageprop":{"playout":2},"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-10-13T09:21:35.1783317Z"} \ No newline at end of file +{ + "aid": "testapp", + "id": "wjrxq0ft", + "n": "组件嵌套", + "order": 1, + "pt": 0, + "pubstatus": false, + "comps": [ + + ], + "pageprop": { + "playout": 2 + }, + "ds": { + "order": 0, + "type": 0, + "pubstatus": false, + "fields": [], + "ops": [], + "createdTime": "0001-01-01T00:00:00", + "modifiedTime": "0001-01-01T00:00:00" + }, + "i18n": {}, + "createdTime": "0001-01-01T00:00:00", + "modifiedTime": "2024-10-13T09:21:35.1783317Z" +} \ No newline at end of file diff --git a/meta/apps/testapp/page/xvdr8b6l.json b/meta/apps/testapp/page/xvdr8b6l.json index c855419e..9e5b6c18 100644 --- a/meta/apps/testapp/page/xvdr8b6l.json +++ b/meta/apps/testapp/page/xvdr8b6l.json @@ -1 +1,26 @@ -{"aid":"testapp","id":"xvdr8b6l","n":"页面1","order":2,"pt":0,"pubstatus":false,"comps":[{"id":"b6bf62a7-df96-4499-9eda-814c026ea51f","n":"input","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Input\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"input_610","t":"输入框","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"d9c72ea8-dae3-4e32-8454-fb42afd09c94","n":"inputnumber","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.InputNumber\u00601[[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"inputnumber_834","t":"数字输入框","supds":false,"compvaltype":6,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"6b698e91-32a5-4ff1-b824-1503d7bb15f1","n":"textarea","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.TextArea, AntDesign"},{"idx":1,"frageenum":1,"n":"style","valtype":1,"strval":"height:50px;"}],"compprop":{"n":"textarea_291","t":"大输入框","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"01848232-5479-4e32-b65f-1fa8806befe1","n":"checkbox","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Checkbox, AntDesign"}],"compprop":{"n":"checkbox_490","t":"多选框","supds":false,"compvaltype":13,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"b5760fdc-3c90-4b0e-856e-5d54dc0e3be7","n":"radio","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Radio\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"radio_685","t":"单选框","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"2b2fc20e-cc31-4014-8bee-85678087e66c","n":"select","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Select\u00602[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"select_489","t":"选择器","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"6189518b-1f97-4c50-a3a1-51d9cce8bf1b","n":"autocomplete","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.AutoComplete\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"autocomplete_384","t":"自动完成","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"442dbaf1-7c33-4103-828b-e71fdd8cc139","n":"cascader","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Cascader, AntDesign"}],"compprop":{"n":"cascader_917","t":"级联选择","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"35a54057-2af8-49ae-bfa5-7c4fdb30bf54","n":"switch","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Switch, AntDesign"}],"compprop":{"n":"switch_831","t":"开关","supds":false,"compvaltype":13,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"cdbbc6de-b40f-4a57-babf-4b26b13f1745","n":"timepicker","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"timepicker_773","t":"时间选择","supds":false,"compvaltype":18,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"4ca5d2e1-cf60-4999-ae26-98442c6a0b97","n":"button","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","hide":true,"fragment":[{"idx":0,"frageenum":0,"fragname":"H.LowCode.ComponentParts.BasicComponents.LcButton, H.LowCode.ComponentParts.BasicComponents"},{"idx":1,"frageenum":2,"n":"Text","valtype":1,"strval":"按钮"}],"compprop":{"n":"button_473","t":"按钮","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":2,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"835139d2-5f9d-4fc4-829e-1853c2c8c36d","n":"tree","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","hide":true,"fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Tree\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"tree_951","t":"树","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"7ce2318a-c4ad-4417-baaf-90b6614e5e6d","n":"treeselect","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.TreeSelect\u00602[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"treeselect_881","t":"树选择器","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"0ff537be-8a4e-48a3-bcb9-a4c5220da60f","n":"tabs","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","hide":true,"fragment":[{"idx":0,"frageenum":0,"fragname":"H.LowCode.ComponentParts.BasicComponents.LcTabs, H.LowCode.ComponentParts.BasicComponents"},{"idx":1,"frageenum":2,"n":"Component","valtype":1,"strval":"{Self}"},{"idx":2,"frageenum":1,"n":"ItemCount","valtype":3,"intval":3}],"compprop":{"n":"tabs_241","t":"标签页","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":300,"labelw":180,"defstyle":"background-color: #ffffff00; height: auto","display":"inline","pos":"static"},"childs":[{"id":"ead3cf81-a747-4541-839c-da7a07fcf351","n":"tab-0","iscontainer":true,"pid":"0ff537be-8a4e-48a3-bcb9-a4c5220da60f","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"tab-0":"tab-0"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"min-height:300px; height:auto; background: #f4f7fa;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"0bdc807e-3da7-496d-afb1-fcd496a96148","n":"tab-1","iscontainer":true,"pid":"0ff537be-8a4e-48a3-bcb9-a4c5220da60f","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"tab-1":"tab-1"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"min-height:300px; height:auto; background: #f4f7fa;","display":"inline","pos":"static"},"childs":[{"id":"d75b502b-8859-4a81-a6aa-7b7e7c687c6b","n":"cascader","pid":"0bdc807e-3da7-496d-afb1-fcd496a96148","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Cascader, AntDesign"}],"compprop":{"n":"cascader_626","t":"级联选择","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"617fec62-21cf-4199-b545-8f2f0fb8a942","n":"tab-2","iscontainer":true,"pid":"0ff537be-8a4e-48a3-bcb9-a4c5220da60f","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"tab-2":"tab-2"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"min-height:300px; height:auto; background: #f4f7fa;","display":"inline","pos":"static"},"childs":[{"id":"bb0ff7c7-9a90-4451-a76e-e1774d143c67","n":"select","pid":"617fec62-21cf-4199-b545-8f2f0fb8a942","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Select\u00602[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"select_893","t":"选择器","supds":false,"compvaltype":1,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"46878e91-681f-4961-83b6-81fc16bebff8","n":"image","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Image, AntDesign"},{"idx":1,"frageenum":1,"n":"Width","valtype":1,"strval":"300px"},{"idx":2,"frageenum":1,"n":"Src","valtype":1,"strval":"https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"}],"compprop":{"n":"image_279","t":"图片","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":200,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"17cecee9-0e94-4d16-9d69-23489ac73b57","n":"list","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","hide":true,"fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.AntList\u00601[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], AntDesign"}],"compprop":{"n":"list_416","t":"List 列表","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"50e00599-2755-47d3-b964-f02ab010d443","n":"card","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","hide":true,"fragment":[{"idx":0,"frageenum":0,"fragname":"H.LowCode.ComponentParts.BasicComponents.LcCard, H.LowCode.ComponentParts.BasicComponents"},{"idx":1,"frageenum":2,"n":"Component","valtype":1,"strval":"{Self}"}],"compprop":{"n":"card_283","t":"卡片","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height: auto","display":"inline","pos":"static"},"childs":[{"id":"4ca4276e-7ce9-49dc-b970-b3f6fc3293c3","n":"card-1","iscontainer":true,"pid":"50e00599-2755-47d3-b964-f02ab010d443","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"card-1":"card-1"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"min-height:90px; height:auto; background: #f4f7fa;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"9433e0bb-a48c-43d7-8fa8-fe2ceef61265","n":"table","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","hide":true,"fragment":[{"idx":0,"frageenum":0,"fragname":"H.LowCode.ComponentParts.BasicComponents.LcTable, H.LowCode.ComponentParts.BasicComponents"},{"idx":1,"frageenum":2,"n":"Component","valtype":1,"strval":"{Self}"}],"compprop":{"n":"table_849","t":"表格","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":85,"labelw":180,"defstyle":"height: auto","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"be8e9530-2be2-4959-911d-594681cc5def","n":"carousel","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","hide":true,"fragment":[{"idx":0,"frageenum":0,"fragname":"H.LowCode.ComponentParts.BasicComponents.LcCarousel, H.LowCode.ComponentParts.BasicComponents"},{"idx":1,"frageenum":2,"n":"Component","valtype":1,"strval":"{Self}"},{"idx":2,"frageenum":1,"n":"ItemCount","valtype":3,"intval":4}],"compprop":{"n":"carousel_787","t":"轮播图","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":85,"labelw":180,"defstyle":"height:auto","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"a4a2ad46-0a25-4226-b09c-c53e1acd54bf","n":"descriptions","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","hide":true,"fragment":[{"idx":0,"frageenum":0,"fragname":"H.LowCode.ComponentParts.BasicComponents.LcDescriptions, H.LowCode.ComponentParts.BasicComponents"},{"idx":1,"frageenum":2,"n":"Component","valtype":1,"strval":"{Self}"},{"idx":2,"frageenum":1,"n":"ItemCount","valtype":3,"intval":3}],"compprop":{"n":"descriptions_607","t":"描述列表","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height: auto","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"2d5a02c2-958d-48cc-8a52-ae856f895fd1","n":"empty","pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","hide":true,"fragment":[{"idx":0,"frageenum":0,"fragname":"AntDesign.Empty, AntDesign"}],"compprop":{"n":"empty_184","t":"空","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":12,"itemh":150,"labelw":180,"defstyle":"height: auto","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"61a43a1c-22f7-438c-a328-37045bc69f10","n":"grid","iscontainer":true,"pid":"406c7075-8b19-4bd7-9cc5-99a57b8aeead","fragment":[{"idx":0,"frageenum":0,"fragname":"H.LowCode.ComponentParts.BasicComponents.LcGrid, H.LowCode.ComponentParts.BasicComponents"},{"idx":1,"frageenum":2,"n":"Component","valtype":1,"strval":"{Self}"},{"idx":2,"frageenum":1,"n":"Rows","valtype":3,"intval":2},{"idx":3,"frageenum":1,"n":"Cols","valtype":3,"intval":2}],"compprop":{"n":"grid_193","t":"Grid 栅格","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":85,"labelw":180,"defstyle":"width:100%; height: auto; background-color: #ffffff00;","display":"inline","pos":"static"},"childs":[{"id":"46724e5b-5722-4aa8-be09-0576e326e697","n":"gridcontainer-0-0","iscontainer":true,"pid":"61a43a1c-22f7-438c-a328-37045bc69f10","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"gridcontainer-0-0":"gridcontainer-0-0"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100%;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"b0b26499-8f7c-45bd-8676-e45233867a94","n":"gridcontainer-0-1","iscontainer":true,"pid":"61a43a1c-22f7-438c-a328-37045bc69f10","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"gridcontainer-0-1":"gridcontainer-0-1"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100%;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"a65806f4-cdaa-4f76-ba99-5a791aa9f8ee","n":"gridcontainer-1-0","iscontainer":true,"pid":"61a43a1c-22f7-438c-a328-37045bc69f10","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"gridcontainer-1-0":"gridcontainer-1-0"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100%;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"c8322b42-9a6f-46c1-b40e-3ef4341ea1a9","n":"gridcontainer-1-1","iscontainer":true,"pid":"61a43a1c-22f7-438c-a328-37045bc69f10","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"gridcontainer-1-1":"gridcontainer-1-1"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100%;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"133a9180-4f1a-4a34-974e-22aac018d42f","n":"layout","iscontainer":true,"pid":"d29284fa-f2ed-4582-bba7-3fa707845ddc","fragment":[{"idx":0,"frageenum":0,"fragname":"H.LowCode.ComponentParts.BasicComponents.LcLayout, H.LowCode.ComponentParts.BasicComponents"},{"idx":1,"frageenum":2,"n":"Component","valtype":1,"strval":"{Self}"}],"compprop":{"n":"layout_434","t":"Layout 布局","supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{}},"event":{},"style":{"itemw":24,"itemh":150,"labelw":180,"defstyle":"width:100%; height:100%; background-color: #ffffff00;","display":"inline","pos":"static"},"childs":[{"id":"f74d33f3-a1ca-4f9f-968d-1c79d01fa51a","n":"layoutcontainer-content","iscontainer":true,"pid":"133a9180-4f1a-4a34-974e-22aac018d42f","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"layoutcontainer-content":"layoutcontainer-content"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100%;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},{"id":"a4efda75-1dd1-46a4-a997-e030a22c3f75","n":"layoutcontainer-sider","iscontainer":true,"pid":"133a9180-4f1a-4a34-974e-22aac018d42f","hide":true,"fragment":[],"compprop":{"supds":false,"compvaltype":0,"supprops":[],"extprops":{},"extdata":{"layoutcontainer-sider":"layoutcontainer-sider"}},"event":{},"style":{"itemw":12,"itemh":85,"labelw":180,"defstyle":"height:100%; width:100%;","display":"inline","pos":"static"},"childs":[],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"ds":{"order":0,"type":0,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"}],"pageprop":{"playout":3},"ds":{"order":0,"type":1,"pubstatus":false,"fields":[],"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"0001-01-01T00:00:00"},"i18n":{},"createdTime":"0001-01-01T00:00:00","modifiedTime":"2024-10-13T09:20:24.737612Z"} \ No newline at end of file +{ + "aid": "testapp", + "id": "xvdr8b6l", + "n": "页面1", + "order": 2, + "pt": 0, + "pubstatus": false, + "comps": [ + + ], + "pageprop": { + "playout": 3 + }, + "ds": { + "order": 0, + "type": 1, + "pubstatus": false, + "fields": [], + "ops": [], + "createdTime": "0001-01-01T00:00:00", + "modifiedTime": "0001-01-01T00:00:00" + }, + "i18n": {}, + "createdTime": "0001-01-01T00:00:00", + "modifiedTime": "2024-10-13T09:20:24.737612Z" +} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/52391a70.json b/meta/parts/componentParts/antdesign/52391a70.json new file mode 100644 index 00000000..5f22fd16 --- /dev/null +++ b/meta/parts/componentParts/antdesign/52391a70.json @@ -0,0 +1,68 @@ +{ + "libid": "antdesign", + "cn": "Input", + "ct": 1, + "pgroups": [ + { + "props": [ + { + "pt": 1, + "n": "maxlength", + "disn": "最大长度", + "desc": "字段输入的最大长度,为0时表示不限制长度", + "dftval": "0", + "compvaltype": 0 + }, + { + "pt": 1, + "n": "isslice", + "disn": "是否截断", + "desc": "选择\u0022是\u0022当超出数据库长度时字段截断", + "dftval": "0", + "compvaltype": 0 + }, + { + "pt": 1, + "n": "isreadonly", + "disn": "是否只读", + "desc": "", + "dftval": "0", + "compvaltype": 0 + }, + { + "pt": 1, + "n": "tips", + "disn": "输入提示", + "dftval": "", + "compvaltype": 0 + } + ], + "n": "basic", + "disn": "自定义" + } + ], + "childs": [], + "sptds": true, + "order": 1, + "pub": 1, + "mt": "2024-12-27T16:19:29.5780385Z", + "compid": "52391a70", + "lb": "输入框", + "container": false, + "frag": { + "dtn": "AntDesign.Input\u00601[System.String], AntDesign", + "tn": "AntDesign.Input\u00601[System.String], AntDesign", + "tm": "System.String", + "params": [] + }, + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {}, + "ds": { + "dst": 0 + } +} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/5bd80f8a.json b/meta/parts/componentParts/antdesign/5bd80f8a.json new file mode 100644 index 00000000..72393584 --- /dev/null +++ b/meta/parts/componentParts/antdesign/5bd80f8a.json @@ -0,0 +1,24 @@ +{ + "libid": "antdesign", + "cn": "Checkbox", + "ct": 1, + "pgroups": [], + "childs": [], + "sptds": false, + "order": 3, + "pub": 1, + "mt": "2024-12-27T16:19:58.3906919Z", + "compid": "5bd80f8a", + "lb": "多选", + "container": false, + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {}, + "ds": { + "dst": 0 + } +} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/5d066e93.json b/meta/parts/componentParts/antdesign/5d066e93.json new file mode 100644 index 00000000..8799075a --- /dev/null +++ b/meta/parts/componentParts/antdesign/5d066e93.json @@ -0,0 +1,24 @@ +{ + "libid": "antdesign", + "cn": "Radio", + "ct": 1, + "pgroups": [], + "childs": [], + "sptds": false, + "order": 2, + "pub": 1, + "mt": "2024-12-27T16:19:21.6012853Z", + "compid": "5d066e93", + "lb": "单选", + "container": false, + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {}, + "ds": { + "dst": 0 + } +} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/6d997568.json b/meta/parts/componentParts/antdesign/6d997568.json new file mode 100644 index 00000000..fe4fd1cb --- /dev/null +++ b/meta/parts/componentParts/antdesign/6d997568.json @@ -0,0 +1,24 @@ +{ + "libid": "antdesign", + "cn": "Layout", + "ct": 1, + "pgroups": [], + "childs": [], + "sptds": false, + "order": 21, + "pub": 1, + "mt": "2024-12-27T16:20:54.6374125Z", + "compid": "6d997568", + "lb": "Layout 布局", + "container": true, + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {}, + "ds": { + "dst": 0 + } +} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/7bab5a19.json b/meta/parts/componentParts/antdesign/7bab5a19.json new file mode 100644 index 00000000..d6f013a1 --- /dev/null +++ b/meta/parts/componentParts/antdesign/7bab5a19.json @@ -0,0 +1,30 @@ +{ + "libid": "antdesign", + "cn": "DatePicker", + "ct": 1, + "pgroups": [], + "childs": [], + "sptds": false, + "order": 4, + "pub": 1, + "mt": "2024-12-27T16:20:19.4321465Z", + "compid": "7bab5a19", + "lb": "日期", + "container": false, + "frag": { + "dtn": "AntDesign.DatePicker\u00601[System.String], AntDesign", + "tn": "AntDesign.DatePicker\u00601[System.String], AntDesign", + "tm": "System.String", + "params": [] + }, + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {}, + "ds": { + "dst": 0 + } +} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/f2b54b4c.json b/meta/parts/componentParts/antdesign/f2b54b4c.json new file mode 100644 index 00000000..ac95dbe1 --- /dev/null +++ b/meta/parts/componentParts/antdesign/f2b54b4c.json @@ -0,0 +1,24 @@ +{ + "libid": "antdesign", + "cn": "Table", + "ct": 1, + "pgroups": [], + "childs": [], + "sptds": false, + "order": 30, + "pub": 1, + "mt": "2024-12-27T16:21:03.2876253Z", + "compid": "f2b54b4c", + "lb": "表格", + "container": false, + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {}, + "ds": { + "dst": 0 + } +} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/f63f79db.json b/meta/parts/componentParts/antdesign/f63f79db.json new file mode 100644 index 00000000..21e73c84 --- /dev/null +++ b/meta/parts/componentParts/antdesign/f63f79db.json @@ -0,0 +1,24 @@ +{ + "libid": "antdesign", + "cn": "Grid", + "ct": 1, + "pgroups": [], + "childs": [], + "sptds": false, + "order": 20, + "pub": 1, + "mt": "2024-12-27T16:27:53.9887209Z", + "compid": "f63f79db", + "lb": "Grid 栅格", + "container": true, + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {}, + "ds": { + "dst": 0 + } +} \ No newline at end of file diff --git a/src/Common/H.LowCode.Domain/DataDomainServices/FormDataDomainService.cs b/src/Common/H.LowCode.Domain/DataDomainServices/FormDataDomainService.cs index e8b398de..596b45e9 100644 --- a/src/Common/H.LowCode.Domain/DataDomainServices/FormDataDomainService.cs +++ b/src/Common/H.LowCode.Domain/DataDomainServices/FormDataDomainService.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Services; namespace H.LowCode.Domain; @@ -21,17 +22,21 @@ public class FormDataDomainService : DomainService, IFormDataDomainService string entityName = formPageSchema.DataSource.DataSourceValue; - var defaultEntity = new FormEntity() + if (string.IsNullOrEmpty(id) || string.Equals(id, "empty")) { - Name = entityName, - Fields = formPageSchema.Components.ToDictionary(key => key.ComponentProperty.Name, c => c.ComponentProperty.GetDefaultValue()) - }; - if (string.IsNullOrEmpty(id)) + var defaultEntity = new FormEntity() + { + Name = entityName, + Fields = formPageSchema.Components + .Where(t => t.IsContainer == false) + .ToDictionary(key => key.Name, val => val.Fragment.GetDefaultValue()) + }; return defaultEntity; + } var entity = await _formDataRepository.GetAsync(entityName, id); if (entity == null) - return defaultEntity; + throw new EntityNotFoundException($"Entity {entityName} Not Found: {id}"); return entity; } diff --git a/src/Common/H.LowCode.Domain/H.LowCode.Domain.csproj b/src/Common/H.LowCode.Domain/H.LowCode.Domain.csproj index eb347a69..32fa4dbf 100644 --- a/src/Common/H.LowCode.Domain/H.LowCode.Domain.csproj +++ b/src/Common/H.LowCode.Domain/H.LowCode.Domain.csproj @@ -10,6 +10,7 @@ + diff --git a/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentPartsDomainService.cs b/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentPartsDomainService.cs new file mode 100644 index 00000000..8e02f5ae --- /dev/null +++ b/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentPartsDomainService.cs @@ -0,0 +1,46 @@ +using H.LowCode.DesignEngine.Model; +using H.LowCode.Domain.Repositories; +using H.LowCode.PartsMetaSchema; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.Domain; + +public class ComponentPartsDomainService : DomainService, IComponentPartsDomainService +{ + private readonly IComponentPartsRepository _repository; + + public ComponentPartsDomainService(IComponentPartsRepository repository) + { + _repository = repository; + } + + public async Task> GetListAsync(string libraryId) + { + return await _repository.GetListAsync(libraryId); + } + + public async Task> GetAllComponentsAsync(string libraryId) + { + return await _repository.GetAllComponentsAsync(libraryId); + } + + public async Task GetByIdAsync(string libraryId, string componentId) + { + return await _repository.GetByIdAsync(libraryId, componentId); + } + + public async Task SaveAsync(ComponentPartsSchema componentParts) + { + return await _repository.SaveAsync(componentParts); + } + + public async Task DeleteAsync(string libraryId, string componentId) + { + return await _repository.DeleteAsync(libraryId, componentId); + } +} diff --git a/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentPartsDomainService.cs b/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentPartsDomainService.cs new file mode 100644 index 00000000..01105c9a --- /dev/null +++ b/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentPartsDomainService.cs @@ -0,0 +1,22 @@ +using H.LowCode.DesignEngine.Model; +using H.LowCode.PartsMetaSchema; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.Domain; + +public interface IComponentPartsDomainService : IDomainService +{ + Task> GetListAsync(string libraryId); + Task> GetAllComponentsAsync(string libraryId); + + Task GetByIdAsync(string libraryId, string componentId); + + Task SaveAsync(ComponentPartsSchema componentParts); + + Task DeleteAsync(string libraryId, string componentId); +} diff --git a/src/Common/H.LowCode.Domain/PartsRepositories/IComponentPartsRepository.cs b/src/Common/H.LowCode.Domain/PartsRepositories/IComponentPartsRepository.cs new file mode 100644 index 00000000..4342a454 --- /dev/null +++ b/src/Common/H.LowCode.Domain/PartsRepositories/IComponentPartsRepository.cs @@ -0,0 +1,22 @@ +using H.LowCode.DesignEngine.Model; +using H.LowCode.PartsMetaSchema; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.Domain.Repositories; + +public interface IComponentPartsRepository +{ + Task> GetListAsync(string libraryId); + + Task> GetAllComponentsAsync(string libraryId); + + Task GetByIdAsync(string libraryId, string componentId); + + Task SaveAsync(ComponentPartsSchema componentParts); + + Task DeleteAsync(string libraryId, string componentId); +} diff --git a/src/Common/H.LowCode.Model/ComponentPartsListModel.cs b/src/Common/H.LowCode.Model/ComponentPartsListModel.cs deleted file mode 100644 index 13630f39..00000000 --- a/src/Common/H.LowCode.Model/ComponentPartsListModel.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.Json.Serialization; -using System.Threading.Tasks; - -namespace H.LowCode.Model; - -public class ComponentPartsListModel -{ - [JsonPropertyName("id")] - public string Id { get; set; } - - [JsonPropertyName("n")] - public string Name { get; set; } - - [JsonPropertyName("order")] - public int Order { get; set; } - - [JsonPropertyName("pubstatus")] - public bool PublishStatus { get; set; } - - public DateTime ModifiedTime { get; set; } -} diff --git a/src/Common/H.LowCode.Repository.JsonFile/Base/PartsFileRepositoryBase.cs b/src/Common/H.LowCode.Repository.JsonFile/Base/PartsFileRepositoryBase.cs new file mode 100644 index 00000000..740533af --- /dev/null +++ b/src/Common/H.LowCode.Repository.JsonFile/Base/PartsFileRepositoryBase.cs @@ -0,0 +1,30 @@ +using H.LowCode.Configuration; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.Repository.JsonFile; + +public abstract class PartsFileRepositoryBase +{ + public bool? IsChangeTrackingEnabled { get; set; } + + protected static string _metaBaseDir; + + public PartsFileRepositoryBase(IOptions metaOption) + { + _metaBaseDir = metaOption.Value.PartsFilePath; + IsChangeTrackingEnabled = false; + } + + protected static string ReadAllText(string fileName) + { + if (!File.Exists(fileName)) + throw new FileNotFoundException(fileName); + + return File.ReadAllText(fileName, Encoding.UTF8); + } +} diff --git a/src/Common/H.LowCode.Repository.JsonFile/MetaJsonFileRepositoryModule.cs b/src/Common/H.LowCode.Repository.JsonFile/MetaJsonFileRepositoryModule.cs index ac1ef9a1..876ca53f 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/MetaJsonFileRepositoryModule.cs +++ b/src/Common/H.LowCode.Repository.JsonFile/MetaJsonFileRepositoryModule.cs @@ -16,6 +16,8 @@ public class MetaJsonFileRepositoryModule : AbpModule context.Services.AddScoped(); context.Services.AddScoped(); + context.Services.AddScoped(); + var configuration = context.Services.GetConfiguration(); context.Services.Configure(configuration.GetSection(MetaOption.SectionName)); } diff --git a/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs b/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs new file mode 100644 index 00000000..6c7603ef --- /dev/null +++ b/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs @@ -0,0 +1,134 @@ +using H.LowCode.Configuration; +using H.LowCode.DesignEngine.Model; +using H.LowCode.Domain.Repositories; +using H.LowCode.MetaSchema; +using H.LowCode.PartsMetaSchema; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.Repository.JsonFile; + +public class ComponentPartsRepository : PartsFileRepositoryBase, IComponentPartsRepository +{ + private static string componentPartsFileName_Format = @"{0}\componentParts\{1}\{2}.json"; + + public ComponentPartsRepository(IOptions metaOption) : base(metaOption) + { + + } + + public async Task> GetListAsync(string libraryId) + { + await Task.Delay(1); + List list = []; + + var componentPartsFolder = Path.Combine(_metaBaseDir, "componentParts", libraryId); + if (!Directory.Exists(componentPartsFolder)) + return list; + + var files = Directory.GetFiles(componentPartsFolder); + foreach (var fileName in files) + { + var componentPartsSchemaJson = ReadAllText(fileName); + if (string.IsNullOrWhiteSpace(componentPartsSchemaJson)) + continue; + + var componentPartsSchema = componentPartsSchemaJson.FromJson(); + if (componentPartsSchema == null) + continue; + + ComponentPartsListModel model = new() + { + LibraryId = componentPartsSchema.LibraryId, + ComponentId = componentPartsSchema.ComponentId, + ComponentName = componentPartsSchema.ComponentName, + ComponentType = componentPartsSchema.ComponentType, + IsContainer = componentPartsSchema.IsContainer, + Label = componentPartsSchema.Label, + Order = componentPartsSchema.Order, + ModifiedTime = componentPartsSchema.ModifiedTime, + PublishStatus = componentPartsSchema.PublishStatus + }; + + list.Add(model); + } + + //排序 + list = list.OrderBy(t => t.Order).ToList(); + + return list; + } + + public async Task> GetAllComponentsAsync(string libraryId) + { + await Task.Delay(1); + List list = []; + + var componentPartsFolder = Path.Combine(_metaBaseDir, "componentParts", libraryId); + if (!Directory.Exists(componentPartsFolder)) + return list; + + var files = Directory.GetFiles(componentPartsFolder); + foreach (var fileName in files) + { + var componentPartsSchemaJson = ReadAllText(fileName); + if (string.IsNullOrWhiteSpace(componentPartsSchemaJson)) + continue; + + var componentPartsSchema = componentPartsSchemaJson.FromJson(); + + if (componentPartsSchema == null || componentPartsSchema.PublishStatus != 1) + continue; + + list.Add(componentPartsSchema); + } + + //排序 + list = list.OrderBy(t => t.Order).ToList(); + + return list; + } + + public async Task GetByIdAsync(string libraryId, string componentId) + { + await Task.Delay(1); + string fileName = string.Format(componentPartsFileName_Format, _metaBaseDir, libraryId, componentId); + + var componentPartsSchemaJson = ReadAllText(fileName); + return componentPartsSchemaJson.FromJson(); + } + + public async Task SaveAsync(ComponentPartsSchema componentParts) + { + ArgumentNullException.ThrowIfNull(componentParts); + ArgumentException.ThrowIfNullOrEmpty(componentParts.Id); + + componentParts.ModifiedTime = DateTime.UtcNow; + + await Task.Delay(1); + string fileName = string.Format(componentPartsFileName_Format, _metaBaseDir, componentParts.LibraryId, componentParts.ComponentId); + + string fileDirectory = Path.GetDirectoryName(fileName); + if (!Directory.Exists(fileDirectory)) + Directory.CreateDirectory(fileDirectory); + + File.WriteAllText(fileName, componentParts.ToJson(), Encoding.UTF8); + return true; + } + + public async Task DeleteAsync(string libraryId, string componentId) + { + await Task.Delay(1); + + string fileName = string.Format(componentPartsFileName_Format, _metaBaseDir, libraryId, componentId); + if (!File.Exists(fileName)) + return false; + + File.Delete(fileName); + return true; + } +} diff --git a/src/Common/H.LowCode.Repository.JsonFile/Repositories/PageFileRepository.cs b/src/Common/H.LowCode.Repository.JsonFile/Repositories/PageFileRepository.cs index 74fb8947..e994d169 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/Repositories/PageFileRepository.cs +++ b/src/Common/H.LowCode.Repository.JsonFile/Repositories/PageFileRepository.cs @@ -85,10 +85,6 @@ public class PageFileRepository : FileRepositoryBase, IPageRepository if (!File.Exists(fileName)) return; - var pageFolder = Path.Combine(_metaBaseDir, appId, "page"); - if (!Directory.Exists(pageFolder)) - return; - File.Delete(fileName); } } diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/ContainerComponentBase.razor b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/ContainerComponentBase.razor index 393848c2..29419dbb 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/ContainerComponentBase.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/ContainerComponentBase.razor @@ -3,14 +3,14 @@ @code { [Parameter] - public ComponentSchema Component { get; set; } + public ComponentPartsSchema Component { get; set; } - protected virtual ComponentSchema CreateComponent(string key, Action action = null) + protected virtual ComponentPartsSchema CreateComponent(string key, Action action = null) { var c = Component.Childrens.FirstOrDefault(t => { - if (t.ComponentProperty.ExtensionData.ContainsKey(key)) - return true; + // if (t.Property.ExtensionData.ContainsKey(key)) + // return true; return false; }); if (c != null) @@ -25,25 +25,25 @@ return component; } - private ComponentSchema CreateContainerComponent(string name) + private ComponentPartsSchema CreateContainerComponent(string name) { - var component = new ComponentSchema(name); - component.Id = Guid.NewGuid(); + var component = new ComponentPartsSchema(); + component.Id = ShortIdGenerator.Generate(); component.Refresh = Component.Refresh; - component.ComponentFragments = []; - component.ComponentProperty = new(); - component.ComponentStyle = new() { DefaultStyle = "height:100%; width:100%;" }; - component.ComponentEvent = default; - component.DragEffectStyle = default; - component.IsDropedAfter = default; - component.IsDroppedFromComponentPanel = default; - component.IsHiddenTitle = true; - component.IsSelected = default; - component.Opacity = default; - - component.IsContainerComponent = true; - component.ComponentProperty.ExtensionData.Add(name, name); + component.Fragment = new(); + //component.Property.ExtraProperties = new Dictionary(); + component.Style = new() { DefaultStyle = "height:100%; width:100%;" }; + component.Event = default; + component.DesignState.DragEffectStyle = default; + component.DesignState.IsDropedAfter = default; + component.DesignState.IsDroppedFromComponentPanel = default; + component.IsHiddenLabel = true; + component.DesignState.IsSelected = default; + component.DesignState.Opacity = default; + + component.IsContainer = true; + //component.Property.ExtensionData.Add(name, name); component.ParentId = Component.Id; return component; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/H.LowCode.DesignEngine.Abstraction.csproj b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/H.LowCode.DesignEngine.Abstraction.csproj index 5d07415e..d71cba17 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/H.LowCode.DesignEngine.Abstraction.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/H.LowCode.DesignEngine.Abstraction.csproj @@ -8,12 +8,14 @@ + + diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/IComponentProvider.cs b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/IComponentProvider.cs index 2f24b5a6..7cde9f95 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/IComponentProvider.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/IComponentProvider.cs @@ -1,10 +1,13 @@ using H.LowCode.MetaSchema; +using H.LowCode.PartsMetaSchema; namespace H.LowCode.DesignEngine.Abstraction; public interface IComponentProvider { - public string Title { get; set; } + public string Name { get; } - IEnumerable LoadComponent(); + public string Label { get; } + + IEnumerable LoadComponents(); } diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/IPageTemplateProvider.cs b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/IPageTemplateProvider.cs index 68556714..4b23d171 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/IPageTemplateProvider.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/IPageTemplateProvider.cs @@ -1,10 +1,13 @@ using H.LowCode.MetaSchema; +using H.LowCode.PartsMetaSchema; namespace H.LowCode.DesignEngine.Abstraction; public interface IPageTemplateProvider { - public string Title { get; set; } + public string Label { get; set; } - IEnumerable LoadPageTemplate(); + IEnumerable LoadPageTemplate(); + + IEnumerable LoadPageTemplates(); } diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/_Imports.razor b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/_Imports.razor index 4e81a66c..4045835d 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/_Imports.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/_Imports.razor @@ -1,3 +1,5 @@ @using Microsoft.AspNetCore.Components.Web @using H.LowCode.ComponentBase @using H.LowCode.MetaSchema +@using H.LowCode.PartsMetaSchema +@using H.Util.Ids \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/H.LowCode.DesignEngine.Application.Contracts.csproj b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/H.LowCode.DesignEngine.Application.Contracts.csproj index 45a8f1d6..614ca7f1 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/H.LowCode.DesignEngine.Application.Contracts.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/H.LowCode.DesignEngine.Application.Contracts.csproj @@ -8,6 +8,7 @@ + diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/PartsAppServices/IComponentPartsAppService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/PartsAppServices/IComponentPartsAppService.cs new file mode 100644 index 00000000..6a1fe467 --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/PartsAppServices/IComponentPartsAppService.cs @@ -0,0 +1,23 @@ +using H.LowCode.DesignEngine.Model; +using H.LowCode.PartsMetaSchema; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; + +namespace H.LowCode.DesignEngine.Application.Contracts; + +public interface IComponentPartsAppService : IApplicationService +{ + Task> GetListAsync(string libraryId); + + Task> GetAllComponentsAsync(string libraryId); + + Task GetByIdAsync(string libraryId, string componentId); + + Task SaveAsync(ComponentPartsSchema componentParts); + + Task DeleteAsync(string libraryId, string componentId); +} diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentPartsAppService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentPartsAppService.cs new file mode 100644 index 00000000..a81bfbde --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentPartsAppService.cs @@ -0,0 +1,45 @@ +using H.LowCode.DesignEngine.Application.Contracts; +using H.LowCode.DesignEngine.Model; +using H.LowCode.Domain; +using H.LowCode.PartsMetaSchema; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Services; + +namespace H.LowCode.DesignEngine.Application; + +[RemoteService] +public class ComponentPartsAppService : ApplicationService, IComponentPartsAppService +{ + private IComponentPartsDomainService _domainService => LazyServiceProvider.GetRequiredService(); + + public async Task DeleteAsync(string libraryId, string componentId) + { + return await _domainService.DeleteAsync(libraryId, componentId); + } + + public async Task> GetAllComponentsAsync(string libraryId) + { + return await _domainService.GetAllComponentsAsync(libraryId); + } + + public async Task GetByIdAsync(string libraryId, string componentId) + { + return await _domainService.GetByIdAsync(libraryId, componentId); + } + + public async Task> GetListAsync(string libraryId) + { + return await _domainService.GetListAsync(libraryId); + } + + public async Task SaveAsync(ComponentPartsSchema componentParts) + { + return await _domainService.SaveAsync(componentParts); + } +} diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Host.Client/DesignEngineHostClientModule.cs b/src/DesignEngine/H.LowCode.DesignEngine.Host.Client/DesignEngineHostClientModule.cs index f43be6c7..c45920fb 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Host.Client/DesignEngineHostClientModule.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Host.Client/DesignEngineHostClientModule.cs @@ -1,6 +1,6 @@ using H.LowCode.ComponentBase; -using H.LowCode.ComponentParts.BasicComponents; -using H.LowCode.ComponentParts.ExtensionComponents; +using H.LowCode.Components.AntBlazor; +using H.LowCode.Components.Extension; using H.LowCode.DesignEngine.Application.Contracts; using H.LowCode.MyApp; using H.LowCode.PartsDesignEngine; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Host.Client/H.LowCode.DesignEngine.Host.Client.csproj b/src/DesignEngine/H.LowCode.DesignEngine.Host.Client/H.LowCode.DesignEngine.Host.Client.csproj index 05b582a4..e9d8fb54 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Host.Client/H.LowCode.DesignEngine.Host.Client.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine.Host.Client/H.LowCode.DesignEngine.Host.Client.csproj @@ -18,8 +18,8 @@ - - + + diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Host/DesignEngineHostModule.cs b/src/DesignEngine/H.LowCode.DesignEngine.Host/DesignEngineHostModule.cs index 026c23d7..e96bccbe 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Host/DesignEngineHostModule.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Host/DesignEngineHostModule.cs @@ -1,6 +1,6 @@ using H.LowCode.ComponentBase; -using H.LowCode.ComponentParts.BasicComponents; -using H.LowCode.ComponentParts.ExtensionComponents; +using H.LowCode.Components.AntBlazor; +using H.LowCode.Components.Extension; using H.LowCode.DesignEngine.Application; using H.LowCode.EntityFrameworkCore; using H.LowCode.MyApp; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Host/appsettings.json b/src/DesignEngine/H.LowCode.DesignEngine.Host/appsettings.json index 1d033763..251a7e05 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Host/appsettings.json +++ b/src/DesignEngine/H.LowCode.DesignEngine.Host/appsettings.json @@ -10,8 +10,8 @@ "Default": "Server=(localdb)\\MSSQLLocalDB;Database=H_LowCode;Trusted_Connection=True;TrustServerCertificate=True" }, "Meta": { - "appsFilePath": "D:\\H\\code\\my\\H.LowCode\\meta\\apps", - "partsFilePath": "D:\\H\\code\\my\\H.LowCode\\meta\\parts" + "appsFilePath": "../../../meta/apps", + "partsFilePath": "../../../meta/parts" }, "RemoteServices": { "Default": { diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Model/AppListModel.cs b/src/DesignEngine/H.LowCode.DesignEngine.Model/Models/AppListModel.cs similarity index 94% rename from src/DesignEngine/H.LowCode.DesignEngine.Model/AppListModel.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Model/Models/AppListModel.cs index 918a85f2..7374f4e6 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Model/AppListModel.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Model/Models/AppListModel.cs @@ -22,7 +22,7 @@ public class AppListModel [JsonPropertyName("desc")] public string Description { get; set; } - [JsonPropertyName("pubstatus")] + [JsonPropertyName("pub")] public PublishStatusEnum PublishStatus { get; set; } [JsonPropertyName("platform")] diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Model/DataSourceListModel.cs b/src/DesignEngine/H.LowCode.DesignEngine.Model/Models/DataSourceListModel.cs similarity index 95% rename from src/DesignEngine/H.LowCode.DesignEngine.Model/DataSourceListModel.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Model/Models/DataSourceListModel.cs index 5da7129f..ada33935 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Model/DataSourceListModel.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Model/Models/DataSourceListModel.cs @@ -25,7 +25,7 @@ public class DataSourceListModel [JsonPropertyName("type")] public DataSourceTypeEnum DataSourceType { get; set; } - [JsonPropertyName("pubstatus")] + [JsonPropertyName("pub")] public bool PublishStatus { get; set; } public string ModifiedUser { get; set; } diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Model/PageListModel.cs b/src/DesignEngine/H.LowCode.DesignEngine.Model/Models/PageListModel.cs similarity index 82% rename from src/DesignEngine/H.LowCode.DesignEngine.Model/PageListModel.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Model/Models/PageListModel.cs index 9403cff4..06a6f18c 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Model/PageListModel.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Model/Models/PageListModel.cs @@ -14,8 +14,8 @@ public class PageListModel public PageTypeEnum PageType { get; set; } - [JsonPropertyName("pubstatus")] - public bool PublishStatus { get; set; } + [JsonPropertyName("pub")] + public int PublishStatus { get; set; } public DateTime ModifiedTime { get; set; } } diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Model/PartsModels/ComponentPartsListModel.cs b/src/DesignEngine/H.LowCode.DesignEngine.Model/PartsModels/ComponentPartsListModel.cs new file mode 100644 index 00000000..81d0964a --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine.Model/PartsModels/ComponentPartsListModel.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace H.LowCode.DesignEngine.Model; + +public class ComponentPartsListModel +{ + /// + /// 组件库Id + /// + public string LibraryId { get; set; } + + [JsonPropertyName("compid")] + public string ComponentId { get; set; } + + [JsonPropertyName("cn")] + public string ComponentName { get; set; } + + [JsonPropertyName("lb")] + public string Label { get; set; } + + /// + /// 组件类型:1-原子组件 2-组合组件 + /// + public int ComponentType { get; set; } + + /// + /// 是否为容器组件 + /// + [JsonPropertyName("container")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public bool IsContainer { get; set; } + + [JsonPropertyName("order")] + public int Order { get; set; } + + public DateTime ModifiedTime { get; set; } + + /// + /// 发布状态 + /// + [JsonPropertyName("pub")] + public int PublishStatus { get; set; } +} diff --git a/src/DesignEngine/H.LowCode.DesignEngine/ComponentPanel/ComponentPanel.razor b/src/DesignEngine/H.LowCode.DesignEngine/ComponentPanel/ComponentPanel.razor index 3f090676..3b79a423 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/ComponentPanel/ComponentPanel.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/ComponentPanel/ComponentPanel.razor @@ -1,8 +1,8 @@ @namespace H.LowCode.DesignEngine @inherits LowCodeComponentBase -@inject IEnumerable ComponentProviders -@inject IEnumerable PageTemplateProviders +@inject IComponentPartsAppService ComponentPartsAppService +@inject ComponentState> ComponentPartsListState @@ -11,31 +11,33 @@
- @foreach (var componentProvider in ComponentProviders) + @if (_componentPartsList != null) { -
-
@componentProvider.Title
- @foreach (var component in componentProvider.LoadComponent()) - { - - } -
+ @foreach (var component in _componentPartsList) + { + @*
*@ + @*
@componentProvider.Label
*@ + @* @foreach (var component in componentProvider.LoadComponents()) *@ + @* { *@ + + @* } *@ + @*
*@ + } }
- @foreach (var pageTemplateProvider in PageTemplateProviders) - { -
-
@pageTemplateProvider.Title
- @foreach (var component in pageTemplateProvider.LoadPageTemplate()) - { - @* Style="width: 14.1rem; height: 5rem;" *@ - - } -
- } + @* @foreach (var pageTemplateProvider in PageTemplateProviders) *@ + @* { *@ + @*
*@ + @*
@pageTemplateProvider.Label
*@ + @* @foreach (var component in pageTemplateProvider.LoadPageTemplates()) *@ + @* { *@ + @* *@ + @* } *@ + @*
*@ + @* } *@
@@ -54,3 +56,22 @@
+ +@code { + private IList _componentPartsList; + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + + _componentPartsList = await ComponentPartsListState.GetOrAddAsync(this, async () => + { + return await LoadComponentPartsAsync(1, 1000); + }); + } + + private async Task> LoadComponentPartsAsync(int pageIndex, int pageSize) + { + return await ComponentPartsAppService.GetAllComponentsAsync("antdesign"); + } +} \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.DesignEngine/ComponentPanel/DragItem.razor b/src/DesignEngine/H.LowCode.DesignEngine/ComponentPanel/DragItem.razor index cb2497c1..a01c8dbd 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/ComponentPanel/DragItem.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/ComponentPanel/DragItem.razor @@ -3,8 +3,8 @@ @inject DragDropStateService DragDropStateService -
- @Component.ComponentProperty.Title +
+ @Component.Label
@code @@ -13,10 +13,7 @@ public PageCascadingModel PageCascading { get; set; } [Parameter] - public ComponentSchema Component { get; set; } - - [Parameter] - public string Style { get; set; } + public ComponentPartsSchema Component { get; set; } private void OnDragStart() { @@ -33,8 +30,8 @@ /// private void AddComponentToDesignPanel(bool isOnClick) { - ComponentSchema component = Component.CopyNew(); - component.IsDroppedFromComponentPanel = true; + ComponentPartsSchema component = Component.CopyNew(); + component.DesignState.IsDroppedFromComponentPanel = true; if (isOnClick) { //发送事件,通知订阅此事件的其他组件更新状态 diff --git a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/ComponentItem.razor b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/ComponentItem.razor index 2a0c909b..57e0e212 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/ComponentItem.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/ComponentItem.razor @@ -1,23 +1,32 @@ @namespace H.LowCode.DesignEngine @inherits LowCodeComponentBase -@if (Component.IsHiddenTitle == false && Component.IsContainerComponent == false) +@if (Component != null && _renderFragment != null) { -
@Component.ComponentProperty.Title :
-} + @if (Component.IsHiddenLabel == false && Component.IsContainer == false) + { +
@Component.Label:
+ } -@if (Component.IsContainerComponent) -{ -
@_renderFragment
-} -else -{ -
@_renderFragment
+ @if (Component.IsContainer) + { +
@_renderFragment
+ } + else + { +
+ @_renderFragment + @if (!string.IsNullOrEmpty(Component.Description)) + { +
@Component.Description
+ } +
+ } } @code { [Parameter] - public ComponentSchema Component { get; set; } + public ComponentPartsSchema Component { get; set; } private RenderFragment _renderFragment; @@ -33,54 +42,34 @@ else if (Component == null) throw new NullReferenceException(nameof(Component)); - if (string.IsNullOrEmpty(Component.ComponentProperty.Name)) - Component.ComponentProperty.Name = $"{Component.ComponentName}_{Random.Shared.Next(100, 999)}"; + if (string.IsNullOrEmpty(Component.Name)) + Component.Name = $"{Component.ComponentName}_{Random.Shared.Next(100, 999)}"; _renderFragment = RenderComponent(); } - + private RenderFragment RenderComponent() => builder => { - foreach (var fragment in Component.ComponentFragments) + int index = 0; + Type type = Type.GetType(Component.Fragment.FullTypeName); + builder.OpenComponent(index++, type); + //Parameters + foreach (var attr in Component.Fragment.Parameters) { - if (fragment.FragmentEnum == FragmentEnum.Component) - { - Type type = Type.GetType(fragment.ComponentFragmentName); - builder.OpenComponent(fragment.Index, type); - } - else if (fragment.FragmentEnum == FragmentEnum.Attribute) + if (attr.ValueType == ComponentValueTypeEnum.Integer) + builder.AddComponentParameter(index++, attr.Name, attr.IntValue); + else if (attr.ValueType == ComponentValueTypeEnum.String) { - if (fragment.ValueType == ComponentValueTypeEnum.Integer) - { - builder.AddAttribute(fragment.Index, fragment.Name, fragment.IntValue); - } - else if (fragment.ValueType == ComponentValueTypeEnum.String) - { - if ("{self}".Equals(fragment.StringValue, StringComparison.OrdinalIgnoreCase)) - builder.AddAttribute(fragment.Index, fragment.Name, Component); - else - builder.AddAttribute(fragment.Index, fragment.Name, fragment.StringValue); - } - else if (fragment.ValueType == ComponentValueTypeEnum.StringList) - { - builder.AddAttribute(fragment.Index, fragment.Name, fragment.StringValues); - } + if ("{self}".Equals(attr.StringValue, StringComparison.OrdinalIgnoreCase)) + builder.AddAttribute(index++, attr.Name, Component); + else + builder.AddComponentParameter(index++, attr.Name, attr.StringValue); } - else if (fragment.FragmentEnum == FragmentEnum.Parameter) + else { - if (fragment.ValueType == ComponentValueTypeEnum.Integer) - builder.AddComponentParameter(fragment.Index, fragment.Name, fragment.IntValue); - else if (fragment.ValueType == ComponentValueTypeEnum.String) - { - if ("{self}".Equals(fragment.StringValue, StringComparison.OrdinalIgnoreCase)) - builder.AddAttribute(fragment.Index, fragment.Name, Component); - else - builder.AddComponentParameter(fragment.Index, fragment.Name, fragment.StringValue); - } + throw new NotSupportedException($"{attr.ValueType}"); } } - - if (Component.ComponentFragments.Count > 0) - builder.CloseComponent(); + builder.CloseComponent(); }; } \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DesignPanel.razor b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DesignPanel.razor index e15c74c5..6ddc60ad 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DesignPanel.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DesignPanel.razor @@ -1,8 +1,10 @@ @namespace H.LowCode.DesignEngine +@using System.Reflection @inherits LowCodeComponentBase @inject DragDropStateService DragDropStateService -@inject ComponentState RootComponentState +@inject IComponentPartsAppService ComponentPartsAppService +@inject ComponentState RootComponentState @if (_rootComponent != null) { @@ -18,7 +20,7 @@ [SupplyParameterFromQuery(Name = "pt")] public int PageType { get; set; } - private ComponentSchema _rootComponent; + private ComponentPartsSchema _rootComponent; protected override async Task OnInitializedAsync() { @@ -32,24 +34,45 @@ DragDropStateService.SetRootComponent(PageCascading.AppId, PageCascading.PageId, _rootComponent); } - private ComponentSchema LoadRootComponent() + private ComponentPartsSchema LoadRootComponent() { var rootComponent = DragDropStateService.GetRootComponent(PageCascading.AppId, PageCascading.PageId); if (rootComponent == null) { - rootComponent = new ComponentSchema("root"); + rootComponent = new ComponentPartsSchema(); + rootComponent.Name = "root"; rootComponent.Refresh = StateHasChanged; } return rootComponent; } - public void Reload(PageSchema pageSchema) + public async Task ReloadAsync(PageSchema pageSchema) { - if (pageSchema != null && DragDropStateService.GetRootComponent(PageCascading.AppId, PageCascading.PageId) != null) - DragDropStateService.GetRootComponent(PageCascading.AppId, PageCascading.PageId).Childrens = pageSchema.Components; + var rootComponent = DragDropStateService.GetRootComponent(PageCascading.AppId, PageCascading.PageId); + if (pageSchema != null && rootComponent != null) + { + var componentPartses = new List(); + foreach (var component in pageSchema.Components) + { + //组件实例 Schema + var json = component.ToJson(); + var componentPartsInstance = json.FromJson(); + + //组件定义 Schema + var componentPartsDefine = await ComponentPartsAppService.GetByIdAsync(component.LibraryId, component.ComponentId); + + ObjectMerger.Merge(componentPartsInstance, componentPartsDefine); + componentPartses.Add(componentPartsDefine); + } + rootComponent.Childrens = componentPartses; + } StateHasChanged(); } + /// + /// 用于 RootComponentState 的 key(每个页面独立缓存) + /// + /// public override string ToString() { return $"{base.ToString()}-{PageCascading.AppId}-{PageCascading.PageId}"; diff --git a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DropItem.razor b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DropItem.razor index ae0fb02c..4580d9a0 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DropItem.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DropItem.razor @@ -3,11 +3,11 @@ @inject DragDropStateService DragDropStateService -
-
- @if (Component.IsSelected) +
+ @if (Component.DesignState.IsSelected) {
@@ -41,7 +41,7 @@ public PageCascadingModel PageCascading { get; set; } [Parameter] - public ComponentSchema Component { get; set; } + public ComponentPartsSchema Component { get; set; } /// /// 当前组件是否在根容器内 @@ -50,13 +50,13 @@ public bool IsInRootContainer { get; set; } [Parameter] - public Action OnItemClick { get; set; } + public Action OnItemClick { get; set; } [Parameter] - public Action OnItemDelete { get; set; } + public Action OnItemDelete { get; set; } [Parameter] - public Action OnItemCopy { get; set; } + public Action OnItemCopy { get; set; } protected ClassMapper DropItemBoxClassMapper { get; } = new ClassMapper(); protected ClassMapper DropItemClassMapper { get; } = new ClassMapper(); @@ -98,19 +98,19 @@ private void SetClassMap() { DropItemClassMapper.Clear() - .If("dropitem-selected", () => Component.IsSelected) - .If("dropitem-component", () => Component.IsContainerComponent == false) - .If("dropitem-container", () => Component.IsContainerComponent); + .If("dropitem-selected", () => Component.DesignState.IsSelected) + .If("dropitem-component", () => Component.IsContainer == false) + .If("dropitem-container", () => Component.IsContainer); DropItemBoxClassMapper.Clear() - .If("dropitem-box-layout", () => Component.IsContainerComponent); + .If("dropitem-box-layout", () => Component.IsContainer); } #endregion #region Event private void OnClick() { - Component.DragEffectStyle = string.Empty; + Component.DesignState.DragEffectStyle = string.Empty; //DragDropStateService.ResetDragStyle(); OnItemClick.Invoke(Component); @@ -119,7 +119,7 @@ private void OnDragStart(DragEventArgs dragEventArgs) { - Component.Opacity = 0.2; + Component.DesignState.Opacity = 0.2; //记录当前选中对象 DragDropStateService.SetCurrentDragComponent(PageCascading.AppId, PageCascading.PageId, Component); @@ -141,14 +141,14 @@ //设置移动位置样式,拖拽到目标元素上半部分时,上方添加虚线边框,下半部分时下方添加虚线边框 if (dragEventArgs.OffsetY < 30) { - Component.DragEffectStyle = "border-top: 2px dashed #1890ff;"; - Component.IsDropedAfter = false; + Component.DesignState.DragEffectStyle = "border-top: 2px dashed #1890ff;"; + Component.DesignState.IsDropedAfter = false; } else { Console.WriteLine($"OnDragOver: bottom"); - Component.DragEffectStyle = "border-bottom: 2px dashed #1890ff; height: auto;"; - Component.IsDropedAfter = true; + Component.DesignState.DragEffectStyle = "border-bottom: 2px dashed #1890ff; height: auto;"; + Component.DesignState.IsDropedAfter = true; } DragDropStateService.SetLastDragOverTime(PageCascading.AppId, PageCascading.PageId, DateTime.Now); } @@ -160,22 +160,22 @@ return; Console.WriteLine("OnDragLeave"); - Component.DragEffectStyle = string.Empty; + Component.DesignState.DragEffectStyle = string.Empty; } private void OnMouseOver() { - if (Component.IsSelected == false) + if (Component.DesignState.IsSelected == false) { - Component.DragEffectStyle = "outline: #1890ff dashed 1.5px;"; + Component.DesignState.DragEffectStyle = "outline: #1890ff dashed 1.5px;"; } } private void OnMouseOut() { - if (Component.IsSelected == false) + if (Component.DesignState.IsSelected == false) { - Component.DragEffectStyle = string.Empty; + Component.DesignState.DragEffectStyle = string.Empty; } } diff --git a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DropItemContainer.razor b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DropItemContainer.razor index 30350e31..32c432df 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DropItemContainer.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DropItemContainer.razor @@ -3,29 +3,15 @@ @inject DragDropStateService DragDropStateService -
+
@foreach (var comp in ContainerComponent.Childrens) { - @if (comp.IsTemplate == false) - { - - } - else - { - foreach (var c in comp.Childrens) - { -
- -
- @* *@ - } - } + } +
@code { @@ -34,7 +20,7 @@ public PageCascadingModel PageCascading { get; set; } [Parameter] - public ComponentSchema ContainerComponent { get; set; } + public ComponentPartsSchema ContainerComponent { get; set; } [Parameter] public bool IsRootContainer { get; set; } @@ -71,7 +57,7 @@ //订阅 ComponentPanel 中的组件点击事件 BlazorEventDispatcher.Subscribe("designengine.dragitem.onclick", (value) => { - DragDropHandler((ComponentSchema)value); + DragDropHandler((ComponentPartsSchema)value); }); } } @@ -96,28 +82,29 @@ BlazorEventDispatcher.Publish("designengine.dropitem.onblur", null); } - private void OnItemClick(ComponentSchema component) + private void OnItemClick(ComponentPartsSchema component) { //取消上一个选中,设置当前选中项 - if (DragDropStateService.GetLastSelectedComponent(PageCascading.AppId, PageCascading.PageId) != null) + var lastSelectedComponent = DragDropStateService.GetLastSelectedComponent(PageCascading.AppId, PageCascading.PageId); + if (lastSelectedComponent != null) { - DragDropStateService.GetLastSelectedComponent(PageCascading.AppId, PageCascading.PageId).IsSelected = false; - DragDropStateService.GetLastSelectedComponent(PageCascading.AppId, PageCascading.PageId).RefreshState(); + lastSelectedComponent.DesignState.IsSelected = false; + lastSelectedComponent.RefreshState(); } - component.IsSelected = true; + component.DesignState.IsSelected = true; StateHasChanged(); DragDropStateService.SetLastSelectedComponent(PageCascading.AppId, PageCascading.PageId, component); } - private void OnItemDelete(ComponentSchema component) + private void OnItemDelete(ComponentPartsSchema component) { DropItem_Remove(ContainerComponent, component); StateHasChanged(); } - private void OnItemCopy(ComponentSchema component) + private void OnItemCopy(ComponentPartsSchema component) { var newComponent = component.CopyNew(); DragItem_Add(ContainerComponent, newComponent, null, false); @@ -127,13 +114,13 @@ #region private /// - /// 拖动 ComponentSchema 释放时处理逻辑 + /// 拖动组件释放时处理逻辑 /// /// - private void DragDropHandler(ComponentSchema currentDragComponent) + private void DragDropHandler(ComponentPartsSchema currentDragComponent) { // 组件来源于 ComponentPanel,新增 - if (currentDragComponent.IsDroppedFromComponentPanel) + if (currentDragComponent.DesignState.IsDroppedFromComponentPanel) { DragItem_Add(ContainerComponent, currentDragComponent, DragDropStateService.GetLastDragOverComponent(PageCascading.AppId, PageCascading.PageId)); } @@ -163,14 +150,14 @@ /// /// /// - private void DragItem_Add(ComponentSchema containerComponent, ComponentSchema currentDragComponent, ComponentSchema dragOverComponent, bool isSelected = false) + private void DragItem_Add(ComponentPartsSchema containerComponent, ComponentPartsSchema currentDragComponent, ComponentPartsSchema dragOverComponent, bool isSelected = false) { currentDragComponent.ParentId = containerComponent.Id; - currentDragComponent.IsDroppedFromComponentPanel = false; + currentDragComponent.DesignState.IsDroppedFromComponentPanel = false; if (isSelected) { - currentDragComponent.IsSelected = isSelected; + currentDragComponent.DesignState.IsSelected = isSelected; DragDropStateService.SetLastSelectedComponent(PageCascading.AppId, PageCascading.PageId, currentDragComponent); } currentDragComponent.Refresh = StateHasChanged; @@ -178,7 +165,7 @@ //如果拖拽到放置区对象上方,按照顺序添加 if (dragOverComponent != null) { - if (dragOverComponent.IsDropedAfter) + if (dragOverComponent.DesignState.IsDropedAfter) containerComponent.Childrens.InsertAfter(dragOverComponent, currentDragComponent); else containerComponent.Childrens.InsertBefore(dragOverComponent, currentDragComponent); @@ -195,7 +182,7 @@ /// /// /// - private void DragItem_Move(ComponentSchema newContainerComponent, ComponentSchema currentDragComponent, ComponentSchema dragOverComponent) + private void DragItem_Move(ComponentPartsSchema newContainerComponent, ComponentPartsSchema currentDragComponent, ComponentPartsSchema dragOverComponent) { //上一个 DropItemContainer 移除 var oldContainerComponent = DragDropStateService.FindComponentById(PageCascading.AppId, PageCascading.PageId, currentDragComponent.ParentId); @@ -213,7 +200,7 @@ /// /// /// - private void DropItem_Sorting(ComponentSchema containerComponent, ComponentSchema currentDragComponent, ComponentSchema dragOverComponent) + private void DropItem_Sorting(ComponentPartsSchema containerComponent, ComponentPartsSchema currentDragComponent, ComponentPartsSchema dragOverComponent) { if (dragOverComponent == null) return; @@ -221,7 +208,7 @@ if (currentDragComponent == DragDropStateService.GetLastDragOverComponent(PageCascading.AppId, PageCascading.PageId)) return; - if (dragOverComponent.IsDropedAfter) + if (dragOverComponent.DesignState.IsDropedAfter) containerComponent.Childrens.InsertAfter(dragOverComponent, currentDragComponent); else containerComponent.Childrens.InsertBefore(dragOverComponent, currentDragComponent); @@ -241,14 +228,14 @@ // containerComponent.Childrens.Insert(indexDraggedOverItem, currentDragComponent); } - private void DropItem_Remove(ComponentSchema containerComponent, ComponentSchema component) + private void DropItem_Remove(ComponentPartsSchema containerComponent, ComponentPartsSchema component) { //将下一个设为选中 int index = containerComponent.Childrens.IndexOf(component); if (containerComponent.Childrens.Count > 1) { int next = index + 1 >= containerComponent.Childrens.Count ? index - 1 : index + 1; - containerComponent.Childrens[next].IsSelected = true; + containerComponent.Childrens[next].DesignState.IsSelected = true; DragDropStateService.SetLastSelectedComponent(PageCascading.AppId, PageCascading.PageId, containerComponent.Childrens[next]); } containerComponent.Childrens.Remove(component); diff --git a/src/DesignEngine/H.LowCode.DesignEngine/H.LowCode.DesignEngine.csproj b/src/DesignEngine/H.LowCode.DesignEngine/H.LowCode.DesignEngine.csproj index f60e913c..7c608107 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/H.LowCode.DesignEngine.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine/H.LowCode.DesignEngine.csproj @@ -5,6 +5,7 @@ + diff --git a/src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignerPage.razor b/src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignPage.razor similarity index 89% rename from src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignerPage.razor rename to src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignPage.razor index 904377d5..fa7bc63e 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignerPage.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignPage.razor @@ -70,7 +70,7 @@ private async Task LoadPageSchemaAsync() { - if (string.Equals("_empty", PageId)) + if (string.Equals("_new", PageId)) { _isNewPage = true; var newPage = new PageSchema() { AppId = AppId, Name = "newpage" }; @@ -85,7 +85,7 @@ if (_designPanel != null) { DragDropStateService.SetPage(AppId, pageSchema); - _designPanel.Reload(pageSchema); + await _designPanel.ReloadAsync(pageSchema); } return pageSchema; @@ -122,7 +122,15 @@ if (_pageSchema == null) throw new NullReferenceException(nameof(_pageSchema)); - _pageSchema.Components = DragDropStateService.GetRootComponent(_pageSchema.AppId, _pageSchema.Id).Childrens; + var components = new List(); + var partsComponents = DragDropStateService.GetRootComponent(_pageSchema.AppId, _pageSchema.Id).Childrens; + foreach (var partsComponent in partsComponents) + { + var component = partsComponent.ConvertToComponentSchema(); + + components.Add(component); + } + _pageSchema.Components = components; _pageSchema.PageProperty = DragDropStateService.GetGlobalPageProperty(AppId, PageId); return _pageSchema; } diff --git a/src/DesignEngine/H.LowCode.DesignEngine/Services/DragDropStateService.cs b/src/DesignEngine/H.LowCode.DesignEngine/Services/DragDropStateService.cs index fae892f0..6a196f0c 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/Services/DragDropStateService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine/Services/DragDropStateService.cs @@ -1,4 +1,5 @@ using H.LowCode.MetaSchema; +using H.LowCode.PartsMetaSchema; namespace H.LowCode.DesignEngine; @@ -11,13 +12,13 @@ internal class DragDropStateService private IDictionary schemaStates = new Dictionary(); #endregion - public ComponentSchema GetRootComponent(string appId, string pageId) + public ComponentPartsSchema GetRootComponent(string appId, string pageId) { var stateSchema = GetStateSchema(appId, pageId); return stateSchema?.RootComponent; } - public void SetRootComponent(string appId, string pageId, ComponentSchema rootComponent) + public void SetRootComponent(string appId, string pageId, ComponentPartsSchema rootComponent) { SetStateSchema(appId, pageId, (stateSchema) => { stateSchema.RootComponent = rootComponent; @@ -50,52 +51,52 @@ internal class DragDropStateService }); } - public ComponentSchema GetLastSelectedComponent(string appId, string pageId) + public ComponentPartsSchema GetLastSelectedComponent(string appId, string pageId) { var stateSchema = GetStateSchema(appId, pageId); return stateSchema?.LastSelectedComponent; } - public void SetLastSelectedComponent(string appId, string pageId, ComponentSchema lastSelectedComponent) + public void SetLastSelectedComponent(string appId, string pageId, ComponentPartsSchema lastSelectedComponent) { SetStateSchema(appId, pageId, (stateSchema) => { stateSchema.LastSelectedComponent = lastSelectedComponent; }); } - public ComponentSchema GetCurrentDragComponent(string appId, string pageId) + public ComponentPartsSchema GetCurrentDragComponent(string appId, string pageId) { var stateSchema = GetStateSchema(appId, pageId); return stateSchema?.CurrentDragComponent; } - public void SetCurrentDragComponent(string appId, string pageId, ComponentSchema currentDragComponent) + public void SetCurrentDragComponent(string appId, string pageId, ComponentPartsSchema currentDragComponent) { SetStateSchema(appId, pageId, (stateSchema) => { stateSchema.CurrentDragComponent = currentDragComponent; }); } - public ComponentSchema GetLastDragOverComponent(string appId, string pageId) + public ComponentPartsSchema GetLastDragOverComponent(string appId, string pageId) { var stateSchema = GetStateSchema(appId, pageId); return stateSchema?.LastDragOverComponent; } - public void SetLastDragOverComponent(string appId, string pageId, ComponentSchema lastDragOverComponent) + public void SetLastDragOverComponent(string appId, string pageId, ComponentPartsSchema lastDragOverComponent) { SetStateSchema(appId, pageId, (stateSchema) => { stateSchema.LastDragOverComponent = lastDragOverComponent; }); } - public ComponentSchema GetLastDropComponent(string appId, string pageId) + public ComponentPartsSchema GetLastDropComponent(string appId, string pageId) { var stateSchema = GetStateSchema(appId, pageId); return stateSchema?.LastDropComponent; } - public void SetLastDropComponent(string appId, string pageId, ComponentSchema lastDropComponent) + public void SetLastDropComponent(string appId, string pageId, ComponentPartsSchema lastDropComponent) { SetStateSchema(appId, pageId, (stateSchema) => { stateSchema.LastDropComponent = lastDropComponent; @@ -141,7 +142,7 @@ internal class DragDropStateService } } - public ComponentSchema FindComponentById(string appId, string pageId, Guid componentId) + public ComponentPartsSchema FindComponentById(string appId, string pageId, string componentId) { var rootComponent = GetStateSchema(appId, pageId)?.RootComponent; if (rootComponent == null) return null; @@ -152,7 +153,7 @@ internal class DragDropStateService return FindComponentByIdRecursive(componentId, rootComponent.Childrens); } - private ComponentSchema FindComponentByIdRecursive(Guid componentId, IList childrens) + private ComponentPartsSchema FindComponentByIdRecursive(string componentId, IList childrens) { foreach (var component in childrens) { @@ -182,18 +183,18 @@ internal class DragDropStateService if (stateSchema.CurrentDragComponent != null) { - stateSchema.CurrentDragComponent.Opacity = 1; + stateSchema.CurrentDragComponent.DesignState.Opacity = 1; } if (stateSchema.LastSelectedComponent != null) { - stateSchema.LastSelectedComponent.IsSelected = false; + stateSchema.LastSelectedComponent.DesignState.IsSelected = false; stateSchema.LastSelectedComponent.RefreshState(); } if (stateSchema.LastDragOverComponent != null) { - stateSchema.LastDragOverComponent.DragEffectStyle = string.Empty; + stateSchema.LastDragOverComponent.DesignState.DragEffectStyle = string.Empty; //stateSchema.LastDragOverComponent.RefreshState(); } } @@ -203,9 +204,9 @@ internal class DragDropStateService public class DragDropStateSchema { /// - /// 根 ComponentSchema + /// 根 ComponentPartsSchema /// - public ComponentSchema RootComponent { get; set; } + public ComponentPartsSchema RootComponent { get; set; } public PageSchema Page { get; set; } @@ -215,22 +216,22 @@ public class DragDropStateSchema /// 最后选中对象 /// (当 DropItem 失去焦点时,即页面上没有任何项被选中,LastSelectedModel 仍有值) ///
- public ComponentSchema LastSelectedComponent { get; set; } + public ComponentPartsSchema LastSelectedComponent { get; set; } /// /// 当前被拖拽对象 /// - public ComponentSchema CurrentDragComponent { get; set; } + public ComponentPartsSchema CurrentDragComponent { get; set; } /// /// 最后一次拖拽到上面的对象 /// - public ComponentSchema LastDragOverComponent { get; set; } + public ComponentPartsSchema LastDragOverComponent { get; set; } /// /// 最后一次拖拽到上面的组件 /// - public ComponentSchema LastDropComponent { get; set; } + public ComponentPartsSchema LastDropComponent { get; set; } /// /// 最后一次拖拽到上面的对象的时间 diff --git a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySetting.razor b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySetting.razor index a1b98a07..dfdd91b6 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySetting.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySetting.razor @@ -8,23 +8,16 @@ @* 数据源属性 *@ - @if (Component.ComponentProperty.IsSupportDataSource) - { - - } + @*扩展属性*@ - @if (Component.ComponentProperty.ExtraProperties != null - && Component.ComponentProperty.ExtraProperties.Count > 0) - { - - } + }
@code { [Parameter] - public ComponentSchema Component { get; set; } + public ComponentPartsSchema Component { get; set; } protected override async Task OnInitializedAsync() { diff --git a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/BasicPropertyItem.razor b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/BasicPropertyItem.razor index 1a90f9f2..a9c4c9b8 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/BasicPropertyItem.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/BasicPropertyItem.razor @@ -1,108 +1,32 @@ @namespace H.LowCode.DesignEngine @inherits LowCodeComponentBase -
基础
-@if (Component.IsContainerComponent == false) +@if (Component.IsContainer == false) {
- +
- +
- @code { @@ -169,6 +109,9 @@ private IList _componentPartsList; private ComponentPartsSchema _componentPartsSchema = new ComponentPartsSchema(); + private bool _textFormVisible = false; + private string _textFormValue; + IDictionary _parameterEditCache = new Dictionary(); protected override async Task OnInitializedAsync() @@ -217,11 +160,27 @@ StateHasChanged(); } + private async Task TextEditAsync(string componentId) + { + _componentPartsSchema = await GetComponentPartsAsync(componentId); + + JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions() + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.CjkUnifiedIdeographs), + WriteIndented = true + }; + _textFormValue = JsonSerializer.Serialize(_componentPartsSchema, jsonSerializerOptions); + _textFormVisible = true; + + StateHasChanged(); + } + private async Task DeleteAsync(string componentPartsId) { - await ComponentPartsAppService.DeleteAsync(LibraryId, componentPartsId); + //await ComponentPartsAppService.DeleteAsync(LibraryId, componentPartsId); - await Message.Success("删除成功!"); + await Message.Success("模拟删除成功!"); } private async Task OnConfirmAsync(MouseEventArgs e) @@ -254,6 +213,24 @@ _componentPartsList = await LoadComponentPartsAsync(1, 50); } + private async Task OnTextFormConfirmAsync(MouseEventArgs e) + { + _componentPartsSchema = _textFormValue.FromJson(); + var isSuccess = await SaveComponentPartsSchemaAsync(); + if (isSuccess) + { + _textFormVisible = false; + _componentPartsList = await LoadComponentPartsAsync(1, 50); + + await Message.Success("保存成功!"); + } + else + { + _textFormVisible = true; + await Message.Error("保存失败"); + } + } + private async Task SaveComponentPartsSchemaAsync() { return await ComponentPartsAppService.SaveAsync(_componentPartsSchema); @@ -280,7 +257,7 @@ //添加编辑缓存 _parameterEditCache[newParameter.Name] = (true, newParameter); - _componentPartsSchema.Fragment.Parameters.Add(newParameter); + _componentPartsSchema.Fragment.Attributes.Append(newParameter); //StateHasChanged(); } @@ -288,9 +265,9 @@ private async Task SaveParameterAsync(string name) { await Task.Delay(1); - var index = _componentPartsSchema.Fragment.Parameters.FindIndex(item => item.Name == name); - _componentPartsSchema.Fragment.Parameters[index] = _parameterEditCache[name].parameter; // apply the copy to data source - _parameterEditCache[name] = (false, _componentPartsSchema.Fragment.Parameters[index]); // don't affect rows in editing + var index = _componentPartsSchema.Fragment.Attributes.FindIndex(item => item.Name == name); + _componentPartsSchema.Fragment.Attributes[index] = _parameterEditCache[name].parameter; // apply the copy to data source + _parameterEditCache[name] = (false, _componentPartsSchema.Fragment.Attributes[index]); // don't affect rows in editing StateHasChanged(); } @@ -313,7 +290,7 @@ private async Task ParameterCancelEditAsync(string name) { await Task.Delay(1); - var data = _componentPartsSchema.Fragment.Parameters.FirstOrDefault(item => item.Name == name); + var data = _componentPartsSchema.Fragment.Attributes.FirstOrDefault(item => item.Name == name); _parameterEditCache[name] = (false, data); // recovery StateHasChanged(); diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 2abed25e..db7ab9fe 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -13,38 +13,38 @@ - - + + - - - - + + + + - - - - - - - + + + + + + + - - - + + + - - - - - - - - + + + + + + + + diff --git a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcButton.razor b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcButton.razor deleted file mode 100644 index 81f6e2f0..00000000 --- a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcButton.razor +++ /dev/null @@ -1,10 +0,0 @@ -@namespace H.LowCode.Components.AntBlazor -@inherits LowCodeComponentBase - - - -@code { - [Parameter] - public string Text { get; set; } - -} \ No newline at end of file diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor index 62b7fbd4..5d319235 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor @@ -56,11 +56,6 @@ else if (Component == null) throw new NullReferenceException(nameof(Component)); - _renderFragment = CreateComponent(); + _renderFragment = RenderComponent(Component.Fragment); } - - protected RenderFragment CreateComponent() => builder => - { - GetRenderTreeBuilder(Component, builder); - }; } \ No newline at end of file diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ContainerComponentRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ContainerComponentRender.razor index b33424bb..f41014ef 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ContainerComponentRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ContainerComponentRender.razor @@ -2,13 +2,17 @@ @inherits LowCodeComponentBase
- @foreach (var comp in ContainerComponent.Childrens) + @if (ContainerComponent.Childrens != null) { -
- -
+ +
+ } + }
diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor index 8ef696d4..af09a7be 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor @@ -12,13 +12,13 @@ else width: @((Component.Style.ItemWidth ?? (IsInRootContainer ? 24/PageCascading.PageLayout : 24)) /24 * 100)%; min-width:85px; min-height: @(Component.Style.ItemHeight)px; @Component.Style.DefaultStyle @Component.Style.CustomStyle"> - + - @if (_renderFragment != null){ -
@_renderFragment
- } + Label="@(Component.IsHiddenLabel ? string.Empty : Component.Label)" + Style="width:100%"> + +
@_renderFragment
+
} @@ -50,11 +50,6 @@ else if (Component == null) throw new NullReferenceException(nameof(Component)); - _renderFragment = CreateComponent(); + _renderFragment = RenderComponent(Component.Fragment); } - - protected RenderFragment CreateComponent() => builder => - { - GetRenderTreeBuilder(Component, builder); - }; } \ No newline at end of file diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormContainerComponentRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormContainerComponentRender.razor index bb243a99..2098bb9d 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormContainerComponentRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormContainerComponentRender.razor @@ -2,13 +2,16 @@ @inherits LowCodeComponentBase
- @foreach (var comp in ContainerComponent.Childrens) + @if (ContainerComponent.Childrens != null) { -
- -
+ +
+ } }
diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender.razor index e5ad8061..d03ac81a 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender.razor @@ -5,7 +5,7 @@ @if (formDTO != null) { - @foreach (var component in Page.Components) @@ -13,7 +13,7 @@ } - + @@ -28,7 +28,6 @@ [Parameter] public PageSchema Page { get; set; } - private Form> _form; private string Id; private FormDataDTO formDTO; @@ -38,10 +37,6 @@ if (string.IsNullOrEmpty(Id)) Id = "empty"; formDTO = await FormDataAppService.GetAsync(Page.AppId, Page.Id, Id); - - Console.WriteLine($"==============={RendererInfo.Name}"); - Console.WriteLine($"==============={Page.Components.ToJson()}"); - Console.WriteLine($"==============={formDTO.ToJson()}"); } private async Task OnFinishAsync() diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender_Test.razor b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender_Test.razor new file mode 100644 index 00000000..b45b0fe9 --- /dev/null +++ b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender_Test.razor @@ -0,0 +1,82 @@ +@using System.ComponentModel.DataAnnotations; +@using System.ComponentModel +@using System.Reflection + +@namespace H.LowCode.Themes.AntBlazor + + + + @* @foreach (var field in model) + { + + + + } *@ + + + + + @* *@ + @* *@ + @* *@ + + + + + + + + + + + + 选项1 + 选项2 + + + + + + + + + + + + + + +@code +{ + private Dictionary model = new() { + ["Field1"] = "字段1", + ["Field2"] = 2, //inputnumber + ["Field3"] = "字段3", + ["Field4"] = true, //checkbox + ["Field5"] = true, //switch + ["Field6"] = "字段6", //radio + ["Field7"] = "字段7", + ["Field8"] = "字段8", + }; + + private void AddField() + { + model.Add("Field" + model.Count + 1, ""); + } + + private void OnFinish(EditContext editContext) + { + Console.WriteLine($"Success:{model.ToJson()}"); + } + + private void OnFinishFailed(EditContext editContext) + { + Console.WriteLine($"Failed:{model.ToJson()}"); + } +} \ No newline at end of file diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/Pages/MetaPage.razor b/src/Parts/H.LowCode.Themes.AntBlazor/Pages/MetaPage.razor index 54d0fa4f..901c1513 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/Pages/MetaPage.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/Pages/MetaPage.razor @@ -17,6 +17,7 @@ else if(_pageSchema.PageType == PageTypeEnum.Form) { + @* *@ } else if (_pageSchema.PageType == PageTypeEnum.Table) { diff --git a/src/Protocol/H.LowCode.MetaSchema/ComponentSchema.cs b/src/Protocol/H.LowCode.MetaSchema/ComponentSchema.cs index a25975c2..950da13f 100644 --- a/src/Protocol/H.LowCode.MetaSchema/ComponentSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/ComponentSchema.cs @@ -82,7 +82,7 @@ public class ComponentSchema /// [JsonPropertyName("childs")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public IList Childrens { get; set; } = []; + public ComponentSchema[] Childrens { get; set; } [JsonPropertyName("ds")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] diff --git a/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/OptionSchema.cs b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/OptionSchema.cs index 1d304da1..839658db 100644 --- a/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/OptionSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/OptionSchema.cs @@ -9,8 +9,8 @@ namespace H.LowCode.MetaSchema; public class OptionSchema { - [JsonPropertyName("k")] - public string Key { get; set; } + [JsonPropertyName("l")] + public string Label { get; set; } [JsonPropertyName("v")] public string Value { get; set; } diff --git a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchema.cs b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchema.cs index ae73c9a2..b0ab4a4d 100644 --- a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchema.cs @@ -6,19 +6,20 @@ namespace H.LowCode.MetaSchema; public class ComponentFragmentSchema { /// - /// 组件类型完整限定名 + /// 组件类型名 /// [JsonPropertyName("t")] - public virtual string FullTypeName { get; set; } + public virtual string TypeName { get; set; } [JsonPropertyName("valt")] public string ValueType { get; set; } - [JsonPropertyName("ts")] - public IDictionary FullTypeOptions { get; set; } + [JsonPropertyName("attrs")] + public ComponentParameterFragmentSchema[] Attributes { get; set; } = []; - [JsonPropertyName("params")] - public IList Parameters { get; set; } = []; + [JsonPropertyName("childs")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public virtual ComponentFragmentSchema[] Childrens { get; set; } [JsonPropertyName("content")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] diff --git a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsFragmentSchema.cs b/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsFragmentSchema.cs index 7d1c8999..795f8184 100644 --- a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsFragmentSchema.cs +++ b/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsFragmentSchema.cs @@ -11,19 +11,23 @@ namespace H.LowCode.PartsMetaSchema; public class ComponentPartsFragmentSchema : ComponentFragmentSchema { /// - /// 默认组件类型完整限定名,如 "AntDesign.Input`1[System.String], AntDesign" + /// 默认组件类型名,如 "AntDesign.Input`1[System.String], AntDesign" /// [JsonPropertyName("dt")] - public string DefaultFullTypeName { get; set; } + public string DefaultTypeName { get; set; } /// - /// 组件类型完整限定名 + /// 组件类型名 /// /// - /// 组件定义中使用 DefaultFullTypeName 即可,无需保存 FullTypeName - /// 组件保存 json 文件时,强制设置 FullTypeName 为 null + /// 组件定义中使用 DefaultTypeName 即可,无需保存 TypeName + /// 组件保存 json 文件时,强制设置 TypeName 为 null /// [JsonPropertyName("t")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public override string FullTypeName { get; set; } + public override string TypeName { get; set; } + + [JsonPropertyName("childs")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public new ComponentPartsFragmentSchema[] Childrens { get; set; } } diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Host/Components/App.razor b/src/RenderEngine/H.LowCode.RenderEngine.Host/Components/App.razor index 85cab2e6..d54da998 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Host/Components/App.razor +++ b/src/RenderEngine/H.LowCode.RenderEngine.Host/Components/App.razor @@ -21,12 +21,12 @@ - + - + -- Gitee From bb068fc8523b00c06cde176474465865e7b636d0 Mon Sep 17 00:00:00 2001 From: "{iliuhai@aliyun.com}" Date: Sun, 9 Mar 2025 18:20:05 +0800 Subject: [PATCH 12/18] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20"=E6=88=91=E7=9A=84?= =?UTF-8?q?=E7=89=A9=E6=96=99"=20=E8=8F=9C=E5=8D=95,=20"=E7=94=9F=E6=80=81?= =?UTF-8?q?=E4=B8=AD=E5=BF=83"=E7=9A=84=E9=83=A8=E5=88=86=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E8=B0=83=E6=95=B4=E5=88=B0"=E6=88=91=E7=9A=84?= =?UTF-8?q?=E7=89=A9=E6=96=99"=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DesignEngineDynamicComponentBase.cs} | 4 +- .../DesignPanel/ComponentItem.razor | 2 +- .../DesignPanel/ComponentItem.razor | 2 +- .../H.LowCode.Workbench.csproj | 6 + .../Layout/WorkbenchLayout.razor | 14 ++ .../Pages/APIs/APIPartsList.razor | 25 +++ .../H.LowCode.Workbench/Pages/Ecosystem.razor | 57 +------ .../Pages/Ecosystem/AppTemplateCreate.razor | 5 - .../ComponentPartsForm.razor | 1 - .../Pages/Ecosystem/PagePartsList.razor | 151 ------------------ .../AppTemplates.razor | 2 +- .../ThemePartsList.razor | 0 .../AppCreateFromTemplate.razor | 0 .../Pages/{Apps => MyApps}/AppForm.razor | 0 .../AppPopularTemplates.razor | 0 .../H.LowCode.Workbench/Pages/MyParts.razor | 39 +++++ .../Pages/MyParts/AppPartsList.razor | 50 ++++++ .../ComponentLibraryForm.razor | 0 .../ComponentPartsList.razor | 2 +- .../ComponentLibraryList.razor | 8 +- .../Pages/MyParts/PageLibraryList.razor | 49 ++++++ .../Pages/Plugins/PluginsPartsList.razor | 49 ++++++ .../ComponentRender/ComponentRender.razor | 2 +- .../ComponentRender/FormComponentRender.razor | 2 +- .../RenderEngineDynamicComponentBase.cs} | 5 +- 25 files changed, 247 insertions(+), 228 deletions(-) rename src/DesignEngine/{H.LowCode.DesignEngine/ComponentBase/LowCodePartsDynamicComponentBase.cs => H.LowCode.DesignEngine.Abstraction/DesignEngineDynamicComponentBase.cs} (97%) create mode 100644 src/DesignEngine/H.LowCode.Workbench/Pages/APIs/APIPartsList.razor delete mode 100644 src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/AppTemplateCreate.razor delete mode 100644 src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ComponentLibraries/ComponentPartsForm.razor delete mode 100644 src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/PagePartsList.razor rename src/DesignEngine/H.LowCode.Workbench/Pages/{Ecosystem => Ecosystems}/AppTemplates.razor (97%) rename src/DesignEngine/H.LowCode.Workbench/Pages/{Ecosystem => Ecosystems}/ThemePartsList.razor (100%) rename src/DesignEngine/H.LowCode.Workbench/Pages/{Apps => MyApps}/AppCreateFromTemplate.razor (100%) rename src/DesignEngine/H.LowCode.Workbench/Pages/{Apps => MyApps}/AppForm.razor (100%) rename src/DesignEngine/H.LowCode.Workbench/Pages/{Ecosystem => MyApps}/AppPopularTemplates.razor (100%) create mode 100644 src/DesignEngine/H.LowCode.Workbench/Pages/MyParts.razor create mode 100644 src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/AppPartsList.razor rename src/DesignEngine/H.LowCode.Workbench/Pages/{Ecosystem => MyParts}/ComponentLibraries/ComponentLibraryForm.razor (100%) rename src/DesignEngine/H.LowCode.Workbench/Pages/{Ecosystem => MyParts}/ComponentLibraries/ComponentPartsList.razor (99%) rename src/DesignEngine/H.LowCode.Workbench/Pages/{Ecosystem => MyParts}/ComponentLibraryList.razor (94%) create mode 100644 src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/PageLibraryList.razor create mode 100644 src/DesignEngine/H.LowCode.Workbench/Pages/Plugins/PluginsPartsList.razor rename src/{Common/H.LowCode.ComponentBase/LowCodeDynamicComponentBase.cs => RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs} (96%) diff --git a/src/DesignEngine/H.LowCode.DesignEngine/ComponentBase/LowCodePartsDynamicComponentBase.cs b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/DesignEngineDynamicComponentBase.cs similarity index 97% rename from src/DesignEngine/H.LowCode.DesignEngine/ComponentBase/LowCodePartsDynamicComponentBase.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Abstraction/DesignEngineDynamicComponentBase.cs index d8f36bb3..60b166c5 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/ComponentBase/LowCodePartsDynamicComponentBase.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/DesignEngineDynamicComponentBase.cs @@ -8,9 +8,9 @@ using System.Reflection; using H.LowCode.ComponentBase; using H.LowCode.PartsMetaSchema; -namespace H.LowCode.DesignEngine; +namespace H.LowCode.DesignEngine.Abstraction; -public abstract class LowCodePartsDynamicComponentBase : LowCodeComponentBase +public abstract class DesignEngineDynamicComponentBase : LowCodeComponentBase { protected virtual RenderFragment RenderComponent(ComponentPartsFragmentSchema componentFragment) { diff --git a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/ComponentItem.razor b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/ComponentItem.razor index 575cb594..d5a1fea6 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/ComponentItem.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/ComponentItem.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.DesignEngine -@inherits LowCodePartsDynamicComponentBase +@inherits DesignEngineDynamicComponentBase @if (Component != null && _renderFragment != null) { diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentItem.razor b/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentItem.razor index 5ef34918..9191d302 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentItem.razor +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentItem.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.PartsDesignEngine -@inherits LowCodeDynamicComponentBase +@inherits DesignEngineDynamicComponentBase @if (Component.IsHiddenLabel == false && Component.IsContainer == false) { diff --git a/src/DesignEngine/H.LowCode.Workbench/H.LowCode.Workbench.csproj b/src/DesignEngine/H.LowCode.Workbench/H.LowCode.Workbench.csproj index bf4d876b..6712be77 100644 --- a/src/DesignEngine/H.LowCode.Workbench/H.LowCode.Workbench.csproj +++ b/src/DesignEngine/H.LowCode.Workbench/H.LowCode.Workbench.csproj @@ -30,4 +30,10 @@ + + + true + + + \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.Workbench/Layout/WorkbenchLayout.razor b/src/DesignEngine/H.LowCode.Workbench/Layout/WorkbenchLayout.razor index 72673376..da03e8fa 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Layout/WorkbenchLayout.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Layout/WorkbenchLayout.razor @@ -41,6 +41,13 @@ Key = "myapps" }, new MenuDataItem + { + Path = "/workbench/myparts", + Name = "我的物料", + Icon = "api", + Key = "myparts" + }, + new MenuDataItem { Path = "/workbench/ecosystem", Name = "生态中心", @@ -53,6 +60,13 @@ Name = "解决方案", Icon = "deployment-unit", Key = "solutions" + }, + new MenuDataItem + { + Path = "#", + Name = "文档中心", + Icon = "question-circle", + Key = "docs" } }; diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/APIs/APIPartsList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/APIs/APIPartsList.razor new file mode 100644 index 00000000..dbca81d9 --- /dev/null +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/APIs/APIPartsList.razor @@ -0,0 +1,25 @@ +@namespace H.LowCode.Workbench +@inherits LowCodeComponentBase +@layout WorkbenchLayout + +
+
+ +
+
+ + + + 查看 + + +

Card content

+ +
+ +@code { + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + } +} \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem.razor index 929ef407..6328b133 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem.razor @@ -12,62 +12,11 @@ - - @if (string.IsNullOrEmpty(LibraryId)) - { - - } - else - { - - } - - - - - - - 查看 - - -

Card content

- -
+
- - - 安装 - - -

Card content

- -
- - - 安装 - - -

Card content

- -
- - - 安装 - - -

Card content

- -
- - - 安装 - - -

Card content

- -
+
@@ -75,8 +24,6 @@ [Parameter] public string Tab { get; set; } - private string LibraryId => GetQueryValue("libId"); - private string _tabKey => Tab ?? "apps"; private void Refresh() diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/AppTemplateCreate.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/AppTemplateCreate.razor deleted file mode 100644 index ff539676..00000000 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/AppTemplateCreate.razor +++ /dev/null @@ -1,5 +0,0 @@ -@namespace H.LowCode.Workbench -@inherits LowCodeComponentBase -@layout WorkbenchLayout - -

新增模板

diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ComponentLibraries/ComponentPartsForm.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ComponentLibraries/ComponentPartsForm.razor deleted file mode 100644 index fe25f699..00000000 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ComponentLibraries/ComponentPartsForm.razor +++ /dev/null @@ -1 +0,0 @@ -@namespace H.LowCode.Workbench diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/PagePartsList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/PagePartsList.razor deleted file mode 100644 index 3e62b600..00000000 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/PagePartsList.razor +++ /dev/null @@ -1,151 +0,0 @@ -@namespace H.LowCode.Workbench -@inherits LowCodeComponentBase -@layout WorkbenchLayout - -@inject IMessageService Message -@inject ComponentState> PagePartsState - -
-
- -
-
- -
-
- - - - - - - - - @(context.PublishStatus == 1 ? "已发布" : "待发布") - - - - - - 设计 - - - 编辑 - - - 删除 - - - -
- - -
- - - - - - 待发布 - 已发布 - - - - - -
-
- -@code { - IEnumerable selectedRows; - int _total = 0; - - private bool _visible = false; - private Form _form; - private IList _pagePartsList; - private PagePartsSchema _partsSchema = new PagePartsSchema(); - - protected override async Task OnInitializedAsync() - { - await base.OnInitializedAsync(); - - _total = 50; - _pagePartsList = await PagePartsState.GetOrAddAsync(this, async () => - { - return await LoadPagePartsAsync(1, 50); - }); - } - - private async Task> LoadPagePartsAsync(int pageIndex, int pageSize) - { - IList result = []; - return result; - } - - private async Task GetPageAsync(string partsId) - { - PagePartsSchema PagePartsSchema = new(); - return PagePartsSchema; - } - - private void CreateAsync() - { - _partsSchema = new PagePartsSchema(); - _partsSchema.Id = ShortIdGenerator.Generate(); - _visible = true; - - StateHasChanged(); - } - - private async Task EditAsync(string id) - { - _partsSchema = await GetPageAsync(id); - _visible = true; - - StateHasChanged(); - } - - private async Task DeleteAsync(string partsId) - { - await Message.Success("删除成功!"); - } - - private async Task OnConfirmAsync(MouseEventArgs e) - { - var validate = _form.Validate(); - if (validate) - { - var isSuccess = await SavePagePartsSchemaAsync(); - if (isSuccess) - { - _visible = false; - _form.Submit(); - await Message.Success("保存成功!"); - _form.Reset(); - } - else - { - _visible = true; - await Message.Error("保存失败"); - } - } - else - { - _visible = true; - } - } - - private async Task OnFinishAsync() - { - _pagePartsList = await LoadPagePartsAsync(1, 50); - } - - private async Task SavePagePartsSchemaAsync() - { - //string jsonSchema = _partsSchema.ToJson(); - - return true; - } -} \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/AppTemplates.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystems/AppTemplates.razor similarity index 97% rename from src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/AppTemplates.razor rename to src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystems/AppTemplates.razor index 0f48cf6f..bcbe38cc 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/AppTemplates.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystems/AppTemplates.razor @@ -12,7 +12,7 @@
- +
diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ThemePartsList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystems/ThemePartsList.razor similarity index 100% rename from src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ThemePartsList.razor rename to src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystems/ThemePartsList.razor diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Apps/AppCreateFromTemplate.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyApps/AppCreateFromTemplate.razor similarity index 100% rename from src/DesignEngine/H.LowCode.Workbench/Pages/Apps/AppCreateFromTemplate.razor rename to src/DesignEngine/H.LowCode.Workbench/Pages/MyApps/AppCreateFromTemplate.razor diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Apps/AppForm.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyApps/AppForm.razor similarity index 100% rename from src/DesignEngine/H.LowCode.Workbench/Pages/Apps/AppForm.razor rename to src/DesignEngine/H.LowCode.Workbench/Pages/MyApps/AppForm.razor diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/AppPopularTemplates.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyApps/AppPopularTemplates.razor similarity index 100% rename from src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/AppPopularTemplates.razor rename to src/DesignEngine/H.LowCode.Workbench/Pages/MyApps/AppPopularTemplates.razor diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts.razor new file mode 100644 index 00000000..edab3e17 --- /dev/null +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts.razor @@ -0,0 +1,39 @@ +@page "/workbench/myparts/{Tab?}" +@namespace H.LowCode.Workbench +@inherits LowCodePageComponentBase +@layout WorkbenchLayout + +我的物料 - H.LowCode + + + + + + + @if (string.IsNullOrEmpty(LibraryId)) + { + + } + else + { + + } + + + + + + +@code { + [Parameter] + public string Tab { get; set; } + + private string LibraryId => GetQueryValue("libId"); + + private string _tabKey => Tab ?? "apps"; + + private void Refresh() + { + StateHasChanged(); + } +} \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/AppPartsList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/AppPartsList.razor new file mode 100644 index 00000000..ff424cf7 --- /dev/null +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/AppPartsList.razor @@ -0,0 +1,50 @@ +@namespace H.LowCode.Workbench +@inherits LowCodeComponentBase +@layout WorkbenchLayout + +@inject IMessageService Message +@inject ComponentState> AppPartsState + +
+
+ +
+
+ + + + 使用 + + +

Card content

+ +
+ + + 使用 + + +

Card content

+ +
+ +@code { + private IList _appParts; + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + + _appParts = await AppPartsState.GetOrAddAsync(this, async () => + { + return await LoadAppPartsAsync(1, 50); + }); + } + + private async Task> LoadAppPartsAsync(int pageIndex, int pageSize) + { + await Task.Delay(100); + IList result = []; + return result; + } +} \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ComponentLibraries/ComponentLibraryForm.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraries/ComponentLibraryForm.razor similarity index 100% rename from src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ComponentLibraries/ComponentLibraryForm.razor rename to src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraries/ComponentLibraryForm.razor diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ComponentLibraries/ComponentPartsList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraries/ComponentPartsList.razor similarity index 99% rename from src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ComponentLibraries/ComponentPartsList.razor rename to src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraries/ComponentPartsList.razor index 1d27edad..14638f36 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ComponentLibraries/ComponentPartsList.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraries/ComponentPartsList.razor @@ -238,7 +238,7 @@ private void GoToComponentLibraryList() { - NavigateTo("/workbench/ecosystem/componentlibraries"); + NavigateTo("/workbench/myparts/componentlibraries"); if (Refresh != null) { diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ComponentLibraryList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraryList.razor similarity index 94% rename from src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ComponentLibraryList.razor rename to src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraryList.razor index 198aa5c5..447b9bfa 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/Ecosystem/ComponentLibraryList.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraryList.razor @@ -5,7 +5,7 @@ @inject IComponentLibraryAppService ComponentLibraryAppService @inject ComponentState> ComponentLibrariesState -
+
@@ -14,10 +14,6 @@
-
- -
- @if (_componentLibraryList != null) { @foreach (var componentLibrary in _componentLibraryList) @@ -104,7 +100,7 @@ private void GoToComponentPartsList(string libraryId) { - NavigateTo($"/workbench/ecosystem/componentlibraries?libId={libraryId}"); + NavigateTo($"/workbench/myparts/componentlibraries?libId={libraryId}"); if (Refresh != null) { diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/PageLibraryList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/PageLibraryList.razor new file mode 100644 index 00000000..d7324405 --- /dev/null +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/PageLibraryList.razor @@ -0,0 +1,49 @@ +@namespace H.LowCode.Workbench +@inherits LowCodeComponentBase +@layout WorkbenchLayout + +
+
+ +
+
+ + + + 查看 + + +

Card content

+ +
+ + + 查看 + + +

Card content

+ +
+ + + 查看 + + +

Card content

+ +
+ + + 查看 + + +

Card content

+ +
+ +@code { + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + } +} \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Plugins/PluginsPartsList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/Plugins/PluginsPartsList.razor new file mode 100644 index 00000000..53b4022f --- /dev/null +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/Plugins/PluginsPartsList.razor @@ -0,0 +1,49 @@ +@namespace H.LowCode.Workbench +@inherits LowCodeComponentBase +@layout WorkbenchLayout + +
+
+ +
+
+ + + + 安装 + + +

Card content

+ +
+ + + 安装 + + +

Card content

+ +
+ + + 安装 + + +

Card content

+ +
+ + + 安装 + + +

Card content

+ +
+ +@code { + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + } +} \ No newline at end of file diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor index 5d319235..a761123f 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.Themes.AntBlazor -@inherits LowCodeDynamicComponentBase +@inherits RenderEngineDynamicComponentBase @if (Component.IsContainer) { diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor index af09a7be..a4d47e0f 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.Themes.AntBlazor -@inherits LowCodeDynamicComponentBase +@inherits RenderEngineDynamicComponentBase @if (Component.IsContainer) { diff --git a/src/Common/H.LowCode.ComponentBase/LowCodeDynamicComponentBase.cs b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs similarity index 96% rename from src/Common/H.LowCode.ComponentBase/LowCodeDynamicComponentBase.cs rename to src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs index 4592fa8c..34c79b5d 100644 --- a/src/Common/H.LowCode.ComponentBase/LowCodeDynamicComponentBase.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs @@ -5,10 +5,11 @@ using System.Linq; using System.Text; using H.LowCode.MetaSchema; using System.Reflection; +using H.LowCode.ComponentBase; -namespace H.LowCode.ComponentBase; +namespace H.LowCode.RenderEngine.Abstraction; -public abstract class LowCodeDynamicComponentBase : LowCodeComponentBase +public abstract class RenderEngineDynamicComponentBase : LowCodeComponentBase { protected virtual RenderFragment RenderComponent(ComponentFragmentSchema componentFragment) { -- Gitee From 9059d453138538ac820e0874453ae9c6ff36f3f6 Mon Sep 17 00:00:00 2001 From: "{iliuhai@aliyun.com}" Date: Sun, 9 Mar 2025 23:20:44 +0800 Subject: [PATCH 13/18] =?UTF-8?q?H.LowCode.MetaSchema=20=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E5=87=BA=20H.LowCode.MetaSchema.DesignEngine=E3=80=81H.LowCode?= =?UTF-8?q?.MetaSchema.RenderEngine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../H.LowCode.Domain/H.LowCode.Domain.csproj | 4 +- .../ComponentLibraryDomainService.cs | 2 +- .../ComponentPartsDomainService.cs | 2 +- .../IComponentLibraryDomainService.cs | 2 +- .../IComponentPartsDomainService.cs | 2 +- .../IComponentLibraryRepository.cs | 2 +- .../IComponentPartsRepository.cs | 2 +- .../ComponentLibraryRepository.cs | 2 +- .../ComponentPartsRepository.cs | 2 +- .../DesignEngineDynamicComponentBase.cs | 2 +- .../H.LowCode.DesignEngine.Abstraction.csproj | 3 +- .../_Imports.razor | 2 +- ....DesignEngine.Application.Contracts.csproj | 3 +- .../IComponentLibraryAppService.cs | 2 +- .../IComponentPartsAppService.cs | 2 +- .../ComponentLibraryAppService.cs | 2 +- .../ComponentPartsAppService.cs | 2 +- .../H.LowCode.DesignEngine.Model.csproj | 2 +- .../H.LowCode.DesignEngine.csproj | 3 +- .../Services/DragDropStateService.cs | 2 +- .../H.LowCode.DesignEngine/_Imports.razor | 2 +- .../H.LowCode.MyApp/H.LowCode.MyApp.csproj | 2 +- .../H.LowCode.PartsDesignEngine.csproj | 3 +- .../Services/DragDropStateService.cs | 2 +- .../_Imports.razor | 2 +- .../H.LowCode.Workbench.csproj | 2 +- .../Layout/WorkbenchLayout.razor | 4 +- .../Pages/APIs/APIPartsList.razor | 2 +- .../H.LowCode.Workbench/Pages/Docs.razor | 62 +++++++++++++++++++ .../H.LowCode.Workbench/_Imports.razor | 2 +- src/H.LowCode.sln | 42 +++++++------ .../LayoutComponentProvider.cs | 2 +- .../SeniorComponentProvider.cs | 2 +- .../H.LowCode.Components.AntBlazor.csproj | 1 - .../_Imports.razor | 2 +- .../ExtensionComponentProvider.cs | 2 +- .../H.LowCode.Components.Extension.csproj | 2 +- .../ExtensionPageTemplateProvider.cs | 2 +- .../_Imports.razor | 2 +- .../AppPartsSchema.cs | 2 +- .../ComponentLibrarySchema.cs | 2 +- .../ComponentPartsSchema.cs | 2 +- .../H.LowCode.MetaSchema.DesignEngine.csproj} | 0 .../PagePartsSchema.cs | 2 +- .../PartsMetaSchemaBase.cs | 2 +- .../ComponentDesignStateSchema.cs | 2 +- .../ComponentPartsEventSchema.cs | 2 +- .../ComponentPartsFragmentSchema.cs | 2 +- .../ComponentPartsPropertyGroupSchema.cs | 2 +- .../ComponentPartsPropertySchema.cs | 2 +- .../ComponentPartsStyleSchema.cs | 2 +- .../H.LowCode.MetaSchema.RenderEngine.csproj | 10 +++ .../H.LowCode.RenderEngine.Abstraction.csproj | 2 +- ....RenderEngine.Application.Contracts.csproj | 2 +- .../H.LowCode.RenderEngine.csproj | 2 +- 55 files changed, 147 insertions(+), 76 deletions(-) create mode 100644 src/DesignEngine/H.LowCode.Workbench/Pages/Docs.razor rename src/Protocol/{H.LowCode.PartsMetaSchema => H.LowCode.MetaSchema.DesignEngine}/AppPartsSchema.cs (72%) rename src/Protocol/{H.LowCode.PartsMetaSchema => H.LowCode.MetaSchema.DesignEngine}/ComponentLibrarySchema.cs (94%) rename src/Protocol/{H.LowCode.PartsMetaSchema => H.LowCode.MetaSchema.DesignEngine}/ComponentPartsSchema.cs (98%) rename src/Protocol/{H.LowCode.PartsMetaSchema/H.LowCode.PartsMetaSchema.csproj => H.LowCode.MetaSchema.DesignEngine/H.LowCode.MetaSchema.DesignEngine.csproj} (100%) rename src/Protocol/{H.LowCode.PartsMetaSchema => H.LowCode.MetaSchema.DesignEngine}/PagePartsSchema.cs (83%) rename src/Protocol/{H.LowCode.PartsMetaSchema => H.LowCode.MetaSchema.DesignEngine}/PartsMetaSchemaBase.cs (84%) rename src/Protocol/{H.LowCode.PartsMetaSchema => H.LowCode.MetaSchema.DesignEngine}/PropertySchemas/ComponentDesignStateSchema.cs (95%) rename src/Protocol/{H.LowCode.PartsMetaSchema => H.LowCode.MetaSchema.DesignEngine}/PropertySchemas/ComponentPartsEventSchema.cs (78%) rename src/Protocol/{H.LowCode.PartsMetaSchema => H.LowCode.MetaSchema.DesignEngine}/PropertySchemas/ComponentPartsFragmentSchema.cs (95%) rename src/Protocol/{H.LowCode.PartsMetaSchema => H.LowCode.MetaSchema.DesignEngine}/PropertySchemas/ComponentPartsPropertyGroupSchema.cs (89%) rename src/Protocol/{H.LowCode.PartsMetaSchema => H.LowCode.MetaSchema.DesignEngine}/PropertySchemas/ComponentPartsPropertySchema.cs (90%) rename src/Protocol/{H.LowCode.PartsMetaSchema => H.LowCode.MetaSchema.DesignEngine}/PropertySchemas/ComponentPartsStyleSchema.cs (97%) create mode 100644 src/Protocol/H.LowCode.MetaSchema.RenderEngine/H.LowCode.MetaSchema.RenderEngine.csproj diff --git a/src/Common/H.LowCode.Domain/H.LowCode.Domain.csproj b/src/Common/H.LowCode.Domain/H.LowCode.Domain.csproj index 32fa4dbf..dc3205c3 100644 --- a/src/Common/H.LowCode.Domain/H.LowCode.Domain.csproj +++ b/src/Common/H.LowCode.Domain/H.LowCode.Domain.csproj @@ -9,8 +9,8 @@ - - + + diff --git a/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentLibraryDomainService.cs b/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentLibraryDomainService.cs index db225e3b..377a8be6 100644 --- a/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentLibraryDomainService.cs +++ b/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentLibraryDomainService.cs @@ -1,6 +1,6 @@ using H.LowCode.DesignEngine.Model; using H.LowCode.Domain.Repositories; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentPartsDomainService.cs b/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentPartsDomainService.cs index 8e02f5ae..cc9a8517 100644 --- a/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentPartsDomainService.cs +++ b/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentPartsDomainService.cs @@ -1,6 +1,6 @@ using H.LowCode.DesignEngine.Model; using H.LowCode.Domain.Repositories; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentLibraryDomainService.cs b/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentLibraryDomainService.cs index 17956e21..36863e47 100644 --- a/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentLibraryDomainService.cs +++ b/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentLibraryDomainService.cs @@ -1,5 +1,5 @@ using H.LowCode.DesignEngine.Model; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentPartsDomainService.cs b/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentPartsDomainService.cs index 01105c9a..4822ea97 100644 --- a/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentPartsDomainService.cs +++ b/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentPartsDomainService.cs @@ -1,5 +1,5 @@ using H.LowCode.DesignEngine.Model; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Common/H.LowCode.Domain/PartsRepositories/IComponentLibraryRepository.cs b/src/Common/H.LowCode.Domain/PartsRepositories/IComponentLibraryRepository.cs index 7aff89e1..16e20e72 100644 --- a/src/Common/H.LowCode.Domain/PartsRepositories/IComponentLibraryRepository.cs +++ b/src/Common/H.LowCode.Domain/PartsRepositories/IComponentLibraryRepository.cs @@ -1,5 +1,5 @@ using H.LowCode.DesignEngine.Model; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Common/H.LowCode.Domain/PartsRepositories/IComponentPartsRepository.cs b/src/Common/H.LowCode.Domain/PartsRepositories/IComponentPartsRepository.cs index 4342a454..237917b7 100644 --- a/src/Common/H.LowCode.Domain/PartsRepositories/IComponentPartsRepository.cs +++ b/src/Common/H.LowCode.Domain/PartsRepositories/IComponentPartsRepository.cs @@ -1,5 +1,5 @@ using H.LowCode.DesignEngine.Model; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentLibraryRepository.cs b/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentLibraryRepository.cs index fcd5f4e9..f70a3bf7 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentLibraryRepository.cs +++ b/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentLibraryRepository.cs @@ -2,7 +2,7 @@ using H.LowCode.DesignEngine.Model; using H.LowCode.Domain.Repositories; using H.LowCode.MetaSchema; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; diff --git a/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs b/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs index e27ea7fe..ec70da52 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs +++ b/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs @@ -2,7 +2,7 @@ using H.LowCode.DesignEngine.Model; using H.LowCode.Domain.Repositories; using H.LowCode.MetaSchema; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/DesignEngineDynamicComponentBase.cs b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/DesignEngineDynamicComponentBase.cs index 60b166c5..1aaa7edd 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/DesignEngineDynamicComponentBase.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/DesignEngineDynamicComponentBase.cs @@ -6,7 +6,7 @@ using System.Text; using H.LowCode.MetaSchema; using System.Reflection; using H.LowCode.ComponentBase; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; namespace H.LowCode.DesignEngine.Abstraction; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/H.LowCode.DesignEngine.Abstraction.csproj b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/H.LowCode.DesignEngine.Abstraction.csproj index d71cba17..1eed7840 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/H.LowCode.DesignEngine.Abstraction.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/H.LowCode.DesignEngine.Abstraction.csproj @@ -14,8 +14,7 @@ - - + diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/_Imports.razor b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/_Imports.razor index 4045835d..945ec924 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/_Imports.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/_Imports.razor @@ -1,5 +1,5 @@ @using Microsoft.AspNetCore.Components.Web @using H.LowCode.ComponentBase @using H.LowCode.MetaSchema -@using H.LowCode.PartsMetaSchema +@using H.LowCode.MetaSchema.DesignEngine @using H.Util.Ids \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/H.LowCode.DesignEngine.Application.Contracts.csproj b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/H.LowCode.DesignEngine.Application.Contracts.csproj index 614ca7f1..063ac568 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/H.LowCode.DesignEngine.Application.Contracts.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/H.LowCode.DesignEngine.Application.Contracts.csproj @@ -7,8 +7,7 @@ - - + diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/PartsAppServices/IComponentLibraryAppService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/PartsAppServices/IComponentLibraryAppService.cs index f1604a4e..38b55190 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/PartsAppServices/IComponentLibraryAppService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/PartsAppServices/IComponentLibraryAppService.cs @@ -1,5 +1,5 @@ using H.LowCode.DesignEngine.Model; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/PartsAppServices/IComponentPartsAppService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/PartsAppServices/IComponentPartsAppService.cs index 6a1fe467..4d8a91cc 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/PartsAppServices/IComponentPartsAppService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/PartsAppServices/IComponentPartsAppService.cs @@ -1,5 +1,5 @@ using H.LowCode.DesignEngine.Model; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentLibraryAppService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentLibraryAppService.cs index 1fbe4376..ab8a7650 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentLibraryAppService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentLibraryAppService.cs @@ -1,7 +1,7 @@ using H.LowCode.DesignEngine.Application.Contracts; using H.LowCode.DesignEngine.Model; using H.LowCode.Domain; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentPartsAppService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentPartsAppService.cs index a81bfbde..151d3b8f 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentPartsAppService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentPartsAppService.cs @@ -1,7 +1,7 @@ using H.LowCode.DesignEngine.Application.Contracts; using H.LowCode.DesignEngine.Model; using H.LowCode.Domain; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Model/H.LowCode.DesignEngine.Model.csproj b/src/DesignEngine/H.LowCode.DesignEngine.Model/H.LowCode.DesignEngine.Model.csproj index 925ec25f..146671bc 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Model/H.LowCode.DesignEngine.Model.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine.Model/H.LowCode.DesignEngine.Model.csproj @@ -3,7 +3,7 @@ - + diff --git a/src/DesignEngine/H.LowCode.DesignEngine/H.LowCode.DesignEngine.csproj b/src/DesignEngine/H.LowCode.DesignEngine/H.LowCode.DesignEngine.csproj index 7c608107..473de4c3 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/H.LowCode.DesignEngine.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine/H.LowCode.DesignEngine.csproj @@ -18,8 +18,7 @@ - - + diff --git a/src/DesignEngine/H.LowCode.DesignEngine/Services/DragDropStateService.cs b/src/DesignEngine/H.LowCode.DesignEngine/Services/DragDropStateService.cs index aecfa7c8..dabe6057 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/Services/DragDropStateService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine/Services/DragDropStateService.cs @@ -1,5 +1,5 @@ using H.LowCode.MetaSchema; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; namespace H.LowCode.DesignEngine; diff --git a/src/DesignEngine/H.LowCode.DesignEngine/_Imports.razor b/src/DesignEngine/H.LowCode.DesignEngine/_Imports.razor index ed3c8c7d..b07811c2 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/_Imports.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/_Imports.razor @@ -14,8 +14,8 @@ @using H.LowCode.DesignEngine.Abstraction @using H.LowCode.DesignEngine.Model @using H.LowCode.DesignEngine.Application.Contracts -@using H.LowCode.PartsMetaSchema @using H.LowCode.MetaSchema +@using H.LowCode.MetaSchema.DesignEngine @using H.LowCode.Model @using H.Util.Blazor @using H.Util.Ids \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.MyApp/H.LowCode.MyApp.csproj b/src/DesignEngine/H.LowCode.MyApp/H.LowCode.MyApp.csproj index d5483e12..887e3627 100644 --- a/src/DesignEngine/H.LowCode.MyApp/H.LowCode.MyApp.csproj +++ b/src/DesignEngine/H.LowCode.MyApp/H.LowCode.MyApp.csproj @@ -23,7 +23,7 @@ - + diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/H.LowCode.PartsDesignEngine.csproj b/src/DesignEngine/H.LowCode.PartsDesignEngine/H.LowCode.PartsDesignEngine.csproj index 4b385859..40225689 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/H.LowCode.PartsDesignEngine.csproj +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/H.LowCode.PartsDesignEngine.csproj @@ -18,9 +18,8 @@ - - + diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/Services/DragDropStateService.cs b/src/DesignEngine/H.LowCode.PartsDesignEngine/Services/DragDropStateService.cs index 0c4c9753..a0df0f92 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/Services/DragDropStateService.cs +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/Services/DragDropStateService.cs @@ -1,5 +1,5 @@ using H.LowCode.MetaSchema; -using H.LowCode.PartsMetaSchema; +using H.LowCode.MetaSchema.DesignEngine; namespace H.LowCode.PartsDesignEngine; diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/_Imports.razor b/src/DesignEngine/H.LowCode.PartsDesignEngine/_Imports.razor index 7fa5e8c6..c36fede4 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/_Imports.razor +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/_Imports.razor @@ -8,7 +8,7 @@ @using H.LowCode.DesignEngine.Abstraction @using H.LowCode.DesignEngine.Application.Contracts @using H.LowCode.MetaSchema -@using H.LowCode.PartsMetaSchema +@using H.LowCode.MetaSchema.DesignEngine @using H.LowCode.Model @using H.Util.Blazor @using H.Util.Ids \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.Workbench/H.LowCode.Workbench.csproj b/src/DesignEngine/H.LowCode.Workbench/H.LowCode.Workbench.csproj index 6712be77..91065793 100644 --- a/src/DesignEngine/H.LowCode.Workbench/H.LowCode.Workbench.csproj +++ b/src/DesignEngine/H.LowCode.Workbench/H.LowCode.Workbench.csproj @@ -21,7 +21,7 @@ - + diff --git a/src/DesignEngine/H.LowCode.Workbench/Layout/WorkbenchLayout.razor b/src/DesignEngine/H.LowCode.Workbench/Layout/WorkbenchLayout.razor index da03e8fa..ea174b71 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Layout/WorkbenchLayout.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Layout/WorkbenchLayout.razor @@ -28,7 +28,7 @@ { new MenuDataItem { - Path = "/", + Path = "/workbench", Name = "工作台", Icon = "home", Key = "workbench" @@ -63,7 +63,7 @@ }, new MenuDataItem { - Path = "#", + Path = "/workbench/docs", Name = "文档中心", Icon = "question-circle", Key = "docs" diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/APIs/APIPartsList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/APIs/APIPartsList.razor index dbca81d9..21857460 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/APIs/APIPartsList.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/APIs/APIPartsList.razor @@ -4,7 +4,7 @@
- +
diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Docs.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/Docs.razor new file mode 100644 index 00000000..741d3bd4 --- /dev/null +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/Docs.razor @@ -0,0 +1,62 @@ +@page "/workbench/docs" +@namespace H.LowCode.Workbench +@inherits LowCodePageComponentBase +@layout WorkbenchLayout + +文档中心 - H.LowCode + + + +
+
+ 低代码平台 + 文档中心 +
+
+ +
+ + + 查看 + + +

Card content

+ +
+ + + 查看 + + +

Card content

+ +
+ + + 查看 + + +

Card content

+ +
+ + + 查看 + + +

Card content

+ +
+
\ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.Workbench/_Imports.razor b/src/DesignEngine/H.LowCode.Workbench/_Imports.razor index ad5ee176..caf9b932 100644 --- a/src/DesignEngine/H.LowCode.Workbench/_Imports.razor +++ b/src/DesignEngine/H.LowCode.Workbench/_Imports.razor @@ -16,7 +16,7 @@ @using H.LowCode.DesignEngine.Application.Contracts @using H.LowCode.Workbench @using H.LowCode.MetaSchema -@using H.LowCode.PartsMetaSchema +@using H.LowCode.MetaSchema.DesignEngine @using H.LowCode.Model @using H.LowCode.DesignEngine.Model @using H.Util.Blazor diff --git a/src/H.LowCode.sln b/src/H.LowCode.sln index 96d34634..09f88a0c 100644 --- a/src/H.LowCode.sln +++ b/src/H.LowCode.sln @@ -20,8 +20,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".config", ".config", "{8B2D ..\README.md = ..\README.md EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.MetaSchema", "Protocol\H.LowCode.MetaSchema\H.LowCode.MetaSchema.csproj", "{74A437A0-459A-49FB-972A-715B2DBD04D6}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Protocol", "Protocol", "{4E9BFDA3-AFC6-41F3-817C-FD9E82322BDA}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.Themes.AntBlazor", "Parts\H.LowCode.Themes.AntBlazor\H.LowCode.Themes.AntBlazor.csproj", "{7B0FC9E5-6B07-4878-919B-66307FD5E48D}" @@ -60,13 +58,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.RenderEngine.Abst EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.Model", "Common\H.LowCode.Model\H.LowCode.Model.csproj", "{D4FFEDAF-20A2-467F-BEF2-0432936F7640}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.PartsMetaSchema", "Protocol\H.LowCode.PartsMetaSchema\H.LowCode.PartsMetaSchema.csproj", "{FCC0A903-4077-4762-B6F9-33ABE73C7DAC}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.PartsDesignEngine", "DesignEngine\H.LowCode.PartsDesignEngine\H.LowCode.PartsDesignEngine.csproj", "{8C48BC1B-FD9B-4C39-929D-9458BD9B42E1}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MyApp", "MyApp", "{6EC22A1B-0027-436F-B5CF-BA388AD22B39}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PartsDesign", "PartsDesign", "{30AB2F99-B015-4F98-9439-41A23A954CDE}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PartsDesignEngine", "PartsDesignEngine", "{30AB2F99-B015-4F98-9439-41A23A954CDE}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.DesignEngine.Host.Client", "DesignEngine\H.LowCode.DesignEngine.Host.Client\H.LowCode.DesignEngine.Host.Client.csproj", "{C81282DA-2FD7-4DA4-A607-DBADD3ACD367}" EndProject @@ -98,6 +92,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.DbMigrator", "Too EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesignEngine", "DesignEngine", "{A32809CE-52C6-4E00-92D3-76903D8D9C61}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.MetaSchema", "Protocol\H.LowCode.MetaSchema\H.LowCode.MetaSchema.csproj", "{1BF619BF-4992-46CC-B831-8E3ABA9A435A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.MetaSchema.DesignEngine", "Protocol\H.LowCode.MetaSchema.DesignEngine\H.LowCode.MetaSchema.DesignEngine.csproj", "{E1C86933-B2F8-4C53-BF19-AE67A206B00A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.MetaSchema.RenderEngine", "Protocol\H.LowCode.MetaSchema.RenderEngine\H.LowCode.MetaSchema.RenderEngine.csproj", "{AFC84C58-A075-45C3-BA33-609F067B471A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -112,10 +112,6 @@ Global {9BE2FECD-B648-4B15-B394-E354F98D1B73}.Debug|Any CPU.Build.0 = Debug|Any CPU {9BE2FECD-B648-4B15-B394-E354F98D1B73}.Release|Any CPU.ActiveCfg = Release|Any CPU {9BE2FECD-B648-4B15-B394-E354F98D1B73}.Release|Any CPU.Build.0 = Release|Any CPU - {74A437A0-459A-49FB-972A-715B2DBD04D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74A437A0-459A-49FB-972A-715B2DBD04D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74A437A0-459A-49FB-972A-715B2DBD04D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74A437A0-459A-49FB-972A-715B2DBD04D6}.Release|Any CPU.Build.0 = Release|Any CPU {7B0FC9E5-6B07-4878-919B-66307FD5E48D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7B0FC9E5-6B07-4878-919B-66307FD5E48D}.Debug|Any CPU.Build.0 = Debug|Any CPU {7B0FC9E5-6B07-4878-919B-66307FD5E48D}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -168,10 +164,6 @@ Global {D4FFEDAF-20A2-467F-BEF2-0432936F7640}.Debug|Any CPU.Build.0 = Debug|Any CPU {D4FFEDAF-20A2-467F-BEF2-0432936F7640}.Release|Any CPU.ActiveCfg = Release|Any CPU {D4FFEDAF-20A2-467F-BEF2-0432936F7640}.Release|Any CPU.Build.0 = Release|Any CPU - {FCC0A903-4077-4762-B6F9-33ABE73C7DAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FCC0A903-4077-4762-B6F9-33ABE73C7DAC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FCC0A903-4077-4762-B6F9-33ABE73C7DAC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FCC0A903-4077-4762-B6F9-33ABE73C7DAC}.Release|Any CPU.Build.0 = Release|Any CPU {8C48BC1B-FD9B-4C39-929D-9458BD9B42E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8C48BC1B-FD9B-4C39-929D-9458BD9B42E1}.Debug|Any CPU.Build.0 = Debug|Any CPU {8C48BC1B-FD9B-4C39-929D-9458BD9B42E1}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -220,6 +212,18 @@ Global {F33C7AB6-CA4B-4254-9A75-D803FEDE0CB4}.Debug|Any CPU.Build.0 = Debug|Any CPU {F33C7AB6-CA4B-4254-9A75-D803FEDE0CB4}.Release|Any CPU.ActiveCfg = Release|Any CPU {F33C7AB6-CA4B-4254-9A75-D803FEDE0CB4}.Release|Any CPU.Build.0 = Release|Any CPU + {1BF619BF-4992-46CC-B831-8E3ABA9A435A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1BF619BF-4992-46CC-B831-8E3ABA9A435A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1BF619BF-4992-46CC-B831-8E3ABA9A435A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1BF619BF-4992-46CC-B831-8E3ABA9A435A}.Release|Any CPU.Build.0 = Release|Any CPU + {E1C86933-B2F8-4C53-BF19-AE67A206B00A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1C86933-B2F8-4C53-BF19-AE67A206B00A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1C86933-B2F8-4C53-BF19-AE67A206B00A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1C86933-B2F8-4C53-BF19-AE67A206B00A}.Release|Any CPU.Build.0 = Release|Any CPU + {AFC84C58-A075-45C3-BA33-609F067B471A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AFC84C58-A075-45C3-BA33-609F067B471A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AFC84C58-A075-45C3-BA33-609F067B471A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AFC84C58-A075-45C3-BA33-609F067B471A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -227,7 +231,6 @@ Global GlobalSection(NestedProjects) = preSolution {47EE6944-D5F8-46CD-A552-29A237BE87BD} = {89FE3DE3-2E58-4835-A476-CA2E309A1B3F} {9BE2FECD-B648-4B15-B394-E354F98D1B73} = {A32809CE-52C6-4E00-92D3-76903D8D9C61} - {74A437A0-459A-49FB-972A-715B2DBD04D6} = {4E9BFDA3-AFC6-41F3-817C-FD9E82322BDA} {7B0FC9E5-6B07-4878-919B-66307FD5E48D} = {4B81FABE-A4D5-4602-A83C-E2875286AA53} {B8524D2C-164A-46A1-83A3-5F47BC645B01} = {7E5B26AA-4F89-4B8C-B743-AE3F04C9DD58} {2FEAC795-B93C-4164-8A4D-92B2F26F4994} = {B8524D2C-164A-46A1-83A3-5F47BC645B01} @@ -237,7 +240,7 @@ Global {585546F6-B1F4-47CF-8BFB-5AFDA3F54E7A} = {EBBA5F8E-C292-4B80-95E9-3389F3522971} {EBBA5F8E-C292-4B80-95E9-3389F3522971} = {068DA80C-3A05-42EB-B84F-9080258FDBDA} {4B81FABE-A4D5-4602-A83C-E2875286AA53} = {068DA80C-3A05-42EB-B84F-9080258FDBDA} - {69842168-80FE-46B2-B66E-4E87B016E93D} = {6EC22A1B-0027-436F-B5CF-BA388AD22B39} + {69842168-80FE-46B2-B66E-4E87B016E93D} = {4D070ACB-8367-4889-806E-FA6EEA0D6A67} {2F7C173C-2C3C-4B8A-BBAD-852283458D87} = {7E5B26AA-4F89-4B8C-B743-AE3F04C9DD58} {240CD8ED-49F9-47E0-91B1-B170252E5437} = {89FE3DE3-2E58-4835-A476-CA2E309A1B3F} {C38DD51F-A1D3-4158-BF04-179A4C3BBEEA} = {240CD8ED-49F9-47E0-91B1-B170252E5437} @@ -245,9 +248,7 @@ Global {8490E431-5F81-4EF4-B765-FF0AC8A6EA10} = {A63C9652-517D-4BC3-B935-74D946AB0761} {9832C124-BE18-48FA-8C60-48857D9B4DA1} = {89FE3DE3-2E58-4835-A476-CA2E309A1B3F} {D4FFEDAF-20A2-467F-BEF2-0432936F7640} = {A63C9652-517D-4BC3-B935-74D946AB0761} - {FCC0A903-4077-4762-B6F9-33ABE73C7DAC} = {4E9BFDA3-AFC6-41F3-817C-FD9E82322BDA} {8C48BC1B-FD9B-4C39-929D-9458BD9B42E1} = {30AB2F99-B015-4F98-9439-41A23A954CDE} - {6EC22A1B-0027-436F-B5CF-BA388AD22B39} = {7E5B26AA-4F89-4B8C-B743-AE3F04C9DD58} {30AB2F99-B015-4F98-9439-41A23A954CDE} = {7E5B26AA-4F89-4B8C-B743-AE3F04C9DD58} {C81282DA-2FD7-4DA4-A607-DBADD3ACD367} = {7E5B26AA-4F89-4B8C-B743-AE3F04C9DD58} {3515BFA8-8D57-4E9E-903D-D74982DE27E0} = {7E5B26AA-4F89-4B8C-B743-AE3F04C9DD58} @@ -262,6 +263,9 @@ Global {50777BAC-2866-4C95-B232-D7A9458172D9} = {A63C9652-517D-4BC3-B935-74D946AB0761} {F33C7AB6-CA4B-4254-9A75-D803FEDE0CB4} = {F3ABC418-7234-4DBA-8A5A-6B286A25B8AD} {A32809CE-52C6-4E00-92D3-76903D8D9C61} = {7E5B26AA-4F89-4B8C-B743-AE3F04C9DD58} + {1BF619BF-4992-46CC-B831-8E3ABA9A435A} = {4E9BFDA3-AFC6-41F3-817C-FD9E82322BDA} + {E1C86933-B2F8-4C53-BF19-AE67A206B00A} = {4E9BFDA3-AFC6-41F3-817C-FD9E82322BDA} + {AFC84C58-A075-45C3-BA33-609F067B471A} = {4E9BFDA3-AFC6-41F3-817C-FD9E82322BDA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A8C26757-CDED-4779-94DE-C0D4929F64C2} diff --git a/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/LayoutComponentProvider.cs b/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/LayoutComponentProvider.cs index e68f1de8..893464be 100644 --- a/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/LayoutComponentProvider.cs +++ b/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/LayoutComponentProvider.cs @@ -1,7 +1,7 @@ //using H.LowCode.MetaSchema; //using H.LowCode.DesignEngine.Abstraction; //using System.Text.Json; -//using H.LowCode.PartsMetaSchema; +//using H.LowCode.MetaSchema.DesignEngine; //namespace H.LowCode.Components.AntBlazor; diff --git a/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/SeniorComponentProvider.cs b/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/SeniorComponentProvider.cs index 053c6136..24e82cc2 100644 --- a/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/SeniorComponentProvider.cs +++ b/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/SeniorComponentProvider.cs @@ -2,7 +2,7 @@ //using H.LowCode.MetaSchema; //using H.LowCode.DesignEngine.Abstraction; //using System.Text.Json; -//using H.LowCode.PartsMetaSchema; +//using H.LowCode.MetaSchema.DesignEngine; //namespace H.LowCode.Components.AntBlazor; diff --git a/src/Parts/H.LowCode.Components.AntBlazor/H.LowCode.Components.AntBlazor.csproj b/src/Parts/H.LowCode.Components.AntBlazor/H.LowCode.Components.AntBlazor.csproj index d6337eb1..4bb25a54 100644 --- a/src/Parts/H.LowCode.Components.AntBlazor/H.LowCode.Components.AntBlazor.csproj +++ b/src/Parts/H.LowCode.Components.AntBlazor/H.LowCode.Components.AntBlazor.csproj @@ -19,7 +19,6 @@ - diff --git a/src/Parts/H.LowCode.Components.AntBlazor/_Imports.razor b/src/Parts/H.LowCode.Components.AntBlazor/_Imports.razor index c99634f8..b46e8239 100644 --- a/src/Parts/H.LowCode.Components.AntBlazor/_Imports.razor +++ b/src/Parts/H.LowCode.Components.AntBlazor/_Imports.razor @@ -9,5 +9,5 @@ @using H.LowCode.DesignEngine.Abstraction @using H.LowCode.DesignEngine @using H.LowCode.MetaSchema -@using H.LowCode.PartsMetaSchema +@using H.LowCode.MetaSchema.DesignEngine @using H.Util.Blazor \ No newline at end of file diff --git a/src/Parts/H.LowCode.Components.Extension/ComponentProviders/ExtensionComponentProvider.cs b/src/Parts/H.LowCode.Components.Extension/ComponentProviders/ExtensionComponentProvider.cs index 33c20daf..cabf9a25 100644 --- a/src/Parts/H.LowCode.Components.Extension/ComponentProviders/ExtensionComponentProvider.cs +++ b/src/Parts/H.LowCode.Components.Extension/ComponentProviders/ExtensionComponentProvider.cs @@ -1,7 +1,7 @@ //using AntDesign; //using H.LowCode.DesignEngine.Abstraction; //using H.LowCode.MetaSchema; -//using H.LowCode.PartsMetaSchema; +//using H.LowCode.MetaSchema.DesignEngine; //namespace H.LowCode.Components.Extension; diff --git a/src/Parts/H.LowCode.Components.Extension/H.LowCode.Components.Extension.csproj b/src/Parts/H.LowCode.Components.Extension/H.LowCode.Components.Extension.csproj index c937c977..4b93c59a 100644 --- a/src/Parts/H.LowCode.Components.Extension/H.LowCode.Components.Extension.csproj +++ b/src/Parts/H.LowCode.Components.Extension/H.LowCode.Components.Extension.csproj @@ -17,7 +17,7 @@ - + diff --git a/src/Parts/H.LowCode.Components.Extension/PageTemplateProviders/ExtensionPageTemplateProvider.cs b/src/Parts/H.LowCode.Components.Extension/PageTemplateProviders/ExtensionPageTemplateProvider.cs index 80bcc1d8..b4232c92 100644 --- a/src/Parts/H.LowCode.Components.Extension/PageTemplateProviders/ExtensionPageTemplateProvider.cs +++ b/src/Parts/H.LowCode.Components.Extension/PageTemplateProviders/ExtensionPageTemplateProvider.cs @@ -1,7 +1,7 @@ //using H.LowCode.DesignEngine.Abstraction; //using H.LowCode.MetaSchema; //using H.LowCode.Components.AntBlazor; -//using H.LowCode.PartsMetaSchema; +//using H.LowCode.MetaSchema.DesignEngine; //namespace H.LowCode.Components.Extension; diff --git a/src/Parts/H.LowCode.Components.Extension/_Imports.razor b/src/Parts/H.LowCode.Components.Extension/_Imports.razor index b763e568..e03ccaf8 100644 --- a/src/Parts/H.LowCode.Components.Extension/_Imports.razor +++ b/src/Parts/H.LowCode.Components.Extension/_Imports.razor @@ -9,5 +9,5 @@ @using H.LowCode.DesignEngine @using H.LowCode.Components.AntBlazor @using H.LowCode.MetaSchema -@using H.LowCode.PartsMetaSchema +@using H.LowCode.MetaSchema.DesignEngine @using H.Util.Blazor \ No newline at end of file diff --git a/src/Protocol/H.LowCode.PartsMetaSchema/AppPartsSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/AppPartsSchema.cs similarity index 72% rename from src/Protocol/H.LowCode.PartsMetaSchema/AppPartsSchema.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/AppPartsSchema.cs index f160d465..db79f494 100644 --- a/src/Protocol/H.LowCode.PartsMetaSchema/AppPartsSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/AppPartsSchema.cs @@ -1,7 +1,7 @@ using H.LowCode.MetaSchema; using System.Text.Json.Serialization; -namespace H.LowCode.PartsMetaSchema; +namespace H.LowCode.MetaSchema.DesignEngine; public class AppPartsSchema : AppSchema { diff --git a/src/Protocol/H.LowCode.PartsMetaSchema/ComponentLibrarySchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentLibrarySchema.cs similarity index 94% rename from src/Protocol/H.LowCode.PartsMetaSchema/ComponentLibrarySchema.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentLibrarySchema.cs index ad4ee8c2..e21fbeac 100644 --- a/src/Protocol/H.LowCode.PartsMetaSchema/ComponentLibrarySchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentLibrarySchema.cs @@ -3,7 +3,7 @@ using H.Util.Ids; using System.ComponentModel; using System.Text.Json.Serialization; -namespace H.LowCode.PartsMetaSchema; +namespace H.LowCode.MetaSchema.DesignEngine; public class ComponentLibrarySchema : PartsMetaSchemaBase { diff --git a/src/Protocol/H.LowCode.PartsMetaSchema/ComponentPartsSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs similarity index 98% rename from src/Protocol/H.LowCode.PartsMetaSchema/ComponentPartsSchema.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs index cf0724de..c3ab6afa 100644 --- a/src/Protocol/H.LowCode.PartsMetaSchema/ComponentPartsSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs @@ -3,7 +3,7 @@ using H.Util.Ids; using System.ComponentModel; using System.Text.Json.Serialization; -namespace H.LowCode.PartsMetaSchema; +namespace H.LowCode.MetaSchema.DesignEngine; public class ComponentPartsSchema : ComponentSchema { diff --git a/src/Protocol/H.LowCode.PartsMetaSchema/H.LowCode.PartsMetaSchema.csproj b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/H.LowCode.MetaSchema.DesignEngine.csproj similarity index 100% rename from src/Protocol/H.LowCode.PartsMetaSchema/H.LowCode.PartsMetaSchema.csproj rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/H.LowCode.MetaSchema.DesignEngine.csproj diff --git a/src/Protocol/H.LowCode.PartsMetaSchema/PagePartsSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PagePartsSchema.cs similarity index 83% rename from src/Protocol/H.LowCode.PartsMetaSchema/PagePartsSchema.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/PagePartsSchema.cs index 1c5cecf4..659fcf85 100644 --- a/src/Protocol/H.LowCode.PartsMetaSchema/PagePartsSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PagePartsSchema.cs @@ -1,7 +1,7 @@ using H.LowCode.MetaSchema; using System.Text.Json.Serialization; -namespace H.LowCode.PartsMetaSchema; +namespace H.LowCode.MetaSchema.DesignEngine; public class PagePartsSchema : PageSchema { diff --git a/src/Protocol/H.LowCode.PartsMetaSchema/PartsMetaSchemaBase.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PartsMetaSchemaBase.cs similarity index 84% rename from src/Protocol/H.LowCode.PartsMetaSchema/PartsMetaSchemaBase.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/PartsMetaSchemaBase.cs index 864551ec..d7f56a15 100644 --- a/src/Protocol/H.LowCode.PartsMetaSchema/PartsMetaSchemaBase.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PartsMetaSchemaBase.cs @@ -1,6 +1,6 @@ using System; -namespace H.LowCode.PartsMetaSchema; +namespace H.LowCode.MetaSchema.DesignEngine; public abstract class PartsMetaSchemaBase { diff --git a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentDesignStateSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentDesignStateSchema.cs similarity index 95% rename from src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentDesignStateSchema.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentDesignStateSchema.cs index 1607b1fd..94ccf023 100644 --- a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentDesignStateSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentDesignStateSchema.cs @@ -5,7 +5,7 @@ using System.Text; using System.Text.Json.Serialization; using System.Threading.Tasks; -namespace H.LowCode.PartsMetaSchema; +namespace H.LowCode.MetaSchema.DesignEngine; /// /// 组件设计状态 diff --git a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsEventSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsEventSchema.cs similarity index 78% rename from src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsEventSchema.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsEventSchema.cs index f74960fa..6d270d55 100644 --- a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsEventSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsEventSchema.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.PartsMetaSchema; +namespace H.LowCode.MetaSchema.DesignEngine; public class ComponentPartsEventSchema { diff --git a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsFragmentSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsFragmentSchema.cs similarity index 95% rename from src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsFragmentSchema.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsFragmentSchema.cs index 795f8184..c98ad958 100644 --- a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsFragmentSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsFragmentSchema.cs @@ -6,7 +6,7 @@ using System.Text; using System.Text.Json.Serialization; using System.Threading.Tasks; -namespace H.LowCode.PartsMetaSchema; +namespace H.LowCode.MetaSchema.DesignEngine; public class ComponentPartsFragmentSchema : ComponentFragmentSchema { diff --git a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsPropertyGroupSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsPropertyGroupSchema.cs similarity index 89% rename from src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsPropertyGroupSchema.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsPropertyGroupSchema.cs index 36dde493..aab93a5a 100644 --- a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsPropertyGroupSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsPropertyGroupSchema.cs @@ -6,7 +6,7 @@ using System.Text; using System.Text.Json.Serialization; using System.Threading.Tasks; -namespace H.LowCode.PartsMetaSchema; +namespace H.LowCode.MetaSchema.DesignEngine; public class ComponentPartsPropertyGroupSchema : ComponentPropertyGroupSchema { diff --git a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsPropertySchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsPropertySchema.cs similarity index 90% rename from src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsPropertySchema.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsPropertySchema.cs index 72a8fafe..bce7bf6f 100644 --- a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsPropertySchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsPropertySchema.cs @@ -6,7 +6,7 @@ using System.Text; using System.Text.Json.Serialization; using System.Threading.Tasks; -namespace H.LowCode.PartsMetaSchema; +namespace H.LowCode.MetaSchema.DesignEngine; public class ComponentPartsPropertySchema : ComponentPropertySchema { diff --git a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsStyleSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsStyleSchema.cs similarity index 97% rename from src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsStyleSchema.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsStyleSchema.cs index 0bebbf8c..44376165 100644 --- a/src/Protocol/H.LowCode.PartsMetaSchema/PropertySchemas/ComponentPartsStyleSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsStyleSchema.cs @@ -5,7 +5,7 @@ using System.Text; using System.Text.Json.Serialization; using System.Threading.Tasks; -namespace H.LowCode.PartsMetaSchema; +namespace H.LowCode.MetaSchema.DesignEngine; public class ComponentPartsStyleSchema { diff --git a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/H.LowCode.MetaSchema.RenderEngine.csproj b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/H.LowCode.MetaSchema.RenderEngine.csproj new file mode 100644 index 00000000..25b31f81 --- /dev/null +++ b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/H.LowCode.MetaSchema.RenderEngine.csproj @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/H.LowCode.RenderEngine.Abstraction.csproj b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/H.LowCode.RenderEngine.Abstraction.csproj index 2c312d0d..31b067d0 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/H.LowCode.RenderEngine.Abstraction.csproj +++ b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/H.LowCode.RenderEngine.Abstraction.csproj @@ -14,7 +14,7 @@ - + diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Application.Contracts/H.LowCode.RenderEngine.Application.Contracts.csproj b/src/RenderEngine/H.LowCode.RenderEngine.Application.Contracts/H.LowCode.RenderEngine.Application.Contracts.csproj index 756fc666..6cd29471 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Application.Contracts/H.LowCode.RenderEngine.Application.Contracts.csproj +++ b/src/RenderEngine/H.LowCode.RenderEngine.Application.Contracts/H.LowCode.RenderEngine.Application.Contracts.csproj @@ -8,7 +8,7 @@ - + diff --git a/src/RenderEngine/H.LowCode.RenderEngine/H.LowCode.RenderEngine.csproj b/src/RenderEngine/H.LowCode.RenderEngine/H.LowCode.RenderEngine.csproj index fbe70d99..d087c02d 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine/H.LowCode.RenderEngine.csproj +++ b/src/RenderEngine/H.LowCode.RenderEngine/H.LowCode.RenderEngine.csproj @@ -17,7 +17,7 @@ - + -- Gitee From 3afea4a17a4d8ec003f380573f6d84b624ce9568 Mon Sep 17 00:00:00 2001 From: "{iliuhai@aliyun.com}" Date: Wed, 12 Mar 2025 00:42:39 +0800 Subject: [PATCH 14/18] =?UTF-8?q?=E5=88=86=E7=A6=BB=20DesignEngine?= =?UTF-8?q?=E3=80=81RenderEngine=20=E7=9A=84=20Domain=E3=80=81Repository?= =?UTF-8?q?=E3=80=81EntityFrameworkCode=20=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppServices/IAppApplicationService.cs | 8 +- .../AppServices/IPageAppService.cs | 6 +- .../AppServices/AppApplicationService.cs | 10 +- .../AppServices/DataSourceAppService.cs | 2 +- .../AppServices/MenuAppService.cs | 4 +- .../AppServices/PageAppService.cs | 14 +- .../DesignEngineApplicationModule.cs | 5 +- .../H.LowCode.DesignEngine.Application.csproj | 2 +- .../ComponentLibraryAppService.cs | 4 +- .../ComponentPartsAppService.cs | 2 +- .../FormDataDomainService.cs | 59 ++ .../IFormDataDomainService.cs | 2 +- .../ITableDataDomainService.cs | 2 +- .../TableDataDomainService.cs | 2 +- .../DataRepositories/IFormDataRepository.cs | 2 +- .../DataRepositories/ITableDataRepository.cs | 2 +- .../DesignEngineDomainModule.cs} | 4 +- .../Entities/EntityBase.cs | 2 +- .../Entities/FormEntity.cs | 2 +- .../Entities/TableEntity.cs | 2 +- .../H.LowCode.DesignEngine.Domain.csproj} | 1 - .../MetaDomainServices/AppDomainService.cs | 31 + .../DataSourceDomainService.cs | 4 +- .../MetaDomainServices/IAppDomainService.cs | 13 + .../IDataSourceDomainService.cs | 2 +- .../MetaDomainServices/IMenuDomainService.cs | 2 +- .../MetaDomainServices/IMetaDomainService.cs | 2 +- .../MetaDomainServices/IPageDomainService.cs | 8 +- .../MetaDomainServices/MenuDomainService.cs | 4 +- .../MetaDomainServices/MetaDomainService.cs | 2 +- .../MetaDomainServices/PageDomainService.cs | 12 +- .../MetaRepositories/IAppRepository.cs | 14 + .../MetaRepositories/IDataSourceRepository.cs | 2 +- .../MetaRepositories/IMenuRepository.cs | 2 +- .../MetaRepositories/IPageRepository.cs | 9 +- .../ComponentLibraryDomainService.cs | 4 +- .../ComponentPartsDomainService.cs | 4 +- .../IComponentLibraryDomainService.cs | 2 +- .../IComponentPartsDomainService.cs | 2 +- .../IComponentLibraryRepository.cs | 2 +- .../IComponentPartsRepository.cs | 2 +- .../DataRepositories/FormDataRepository.cs | 38 ++ .../DataRepositories/TableDataRepository.cs | 16 + .../DesignEngineEntityFrameworkCoreModule.cs} | 8 +- .../DesignEngineDbContext.cs} | 12 +- .../Extensions/BuilderExtension.cs | 2 +- .../CustomizeRelationalModelValidator.cs | 2 +- .../Extensions/MapModelCacheKeyFactory.cs | 4 +- .../QueryWithNoLockDbCommandInterceptor.cs | 2 +- .../ReadOnlySaveChangesInterceptor.cs | 2 +- .../EntityManager/DynamicEntityInfo.cs | 2 +- .../EntityManager/EntityFactory.cs | 87 +++ .../EntityManager/EntityProxyBuilder.cs | 4 +- .../EntityManager/EntityTypeManager.cs | 4 +- .../EntityManager/FieldTypeMapping.cs | 2 +- .../Extensions/EmitExtension.cs | 2 +- .../Extensions/ReflectionExtensions.cs | 2 +- ...e.DesignEngine.EntityFrameworkCore.csproj} | 2 +- .../DesignEngineHostModule.cs | 8 +- .../H.LowCode.DesignEngine.Host.csproj | 6 +- .../Base/FileRepositoryBase.cs | 2 +- .../Base/PartsFileRepositoryBase.cs | 2 +- .../DesignEngineJsonFileRepositoryModule.cs} | 10 +- ...e.DesignEngine.Repository.JsonFile.csproj} | 4 +- .../ComponentLibraryRepository.cs | 4 +- .../ComponentPartsRepository.cs | 4 +- .../Repositories/AppFileRepository.cs | 17 +- .../Repositories/DataSourceFileRepository.cs | 4 +- .../Repositories/MenuFileRepository.cs | 4 +- .../Repositories/PageFileRepository.cs | 35 +- .../Base/RemoteServiceRepositoryBase.cs | 2 +- ...ignEngineRemoteServiceRepositoryModule.cs} | 10 +- ...signEngine.Repository.RemoteService.csproj | 14 + .../AppRemoteServiceRepository.cs | 33 ++ .../DataSourceRemoteServiceRepository.cs | 4 +- .../MenuRemoteServiceRepository.cs | 4 +- .../PageRemoteServiceRepository.cs | 18 +- .../DesignPanel/DesignPanel.razor | 2 +- .../Pages/DesignPage.razor | 14 +- .../Services/DragDropStateService.cs | 6 +- .../SettingPanel/EventSetting.razor | 2 +- .../SettingPanel/PageSetting.razor | 2 +- .../SettingPanel/SettingPanel.razor | 2 +- .../H.LowCode.MyApp/Layout/MyAppLayout.razor | 8 +- .../H.LowCode.MyApp/Pages/PageManager.razor | 8 +- .../H.LowCode.MyApp/_Imports.razor | 1 + .../DesignPanel/ComponentDesignPanel.razor | 2 +- .../DesignPanel/PageDesignPanel.razor | 2 +- .../Services/DragDropStateService.cs | 6 +- .../H.LowCode.Workbench/Pages/MyApps.razor | 2 +- .../Pages/MyApps/AppForm.razor | 4 +- src/H.LowCode.sln | 84 ++- .../LayoutComponentProvider.cs | 81 --- .../SeniorComponentProvider.cs | 94 --- .../Components/LcCard.razor | 46 +- .../Components/LcCarousel.razor | 31 - .../Components/LcDescriptions.razor | 44 -- .../Components/LcFlex.razor | 74 +-- .../Components/LcGrid.razor | 46 +- .../Components/LcLayout.razor | 24 +- .../Components/LcList.razor | 90 +-- .../Components/LcTable.razor | 282 ++++----- .../Components/LcTabs.razor | 54 +- .../ExtensionComponentProvider.cs | 103 ---- .../Components/LcLakexEditor.razor | 2 +- .../ExtensionPageTemplateProvider.cs | 55 -- .../H.LowCode.Themes.AntBlazor/_Imports.razor | 1 + .../AppPartsSchema.cs | 2 +- .../ComponentPartsSchema.cs | 6 +- .../PagePartsSchema.cs | 2 +- .../ComponentPartsFragmentSchema.cs | 2 +- .../AppSchema.cs | 9 + .../ComponentSchema.cs | 21 + .../PageSchema.cs | 10 + .../ComponentFragmentSchema.cs | 11 + .../{AppSchema.cs => AppSchemaBase.cs} | 2 +- ...ponentSchema.cs => ComponentSchemaBase.cs} | 6 +- .../{PageSchema.cs => PageSchemaBase.cs} | 4 +- ...hema.cs => ComponentFragmentSchemaBase.cs} | 4 +- .../RenderEngineDynamicComponentBase.cs | 1 + .../RenderAppServices/IMetaAppService.cs | 1 + .../DataAppServices/FormDataAppService.cs | 3 +- .../DataAppServices/TableDataAppService.cs | 2 +- .../H.LowCode.RenderEngine.Application.csproj | 2 +- .../LowCodeAutoMapperProfile.cs | 2 +- .../RenderAppServices/MetaAppService.cs | 7 +- .../RenderEngineApplicationModule.cs | 4 +- .../FormDataDomainService.cs | 2 +- .../IFormDataDomainService.cs | 17 + .../ITableDataDomainService.cs | 13 + .../TableDataDomainService.cs | 16 + .../DataRepositories/IFormDataRepository.cs | 20 + .../DataRepositories/ITableDataRepository.cs | 13 + .../Entities/EntityBase.cs | 22 + .../Entities/FormEntity.cs | 15 + .../Entities/TableEntity.cs | 11 + .../H.LowCode.RenderEngine.Domain.csproj} | 6 +- .../MetaDomainServices/AppDomainService.cs | 9 +- .../DataSourceDomainService.cs | 37 ++ .../MetaDomainServices/IAppDomainService.cs | 4 +- .../IDataSourceDomainService.cs | 15 + .../MetaDomainServices/IMenuDomainService.cs | 11 + .../MetaDomainServices/IMetaDomainService.cs | 8 + .../MetaDomainServices/IPageDomainService.cs | 9 + .../MetaDomainServices/MenuDomainService.cs | 25 + .../MetaDomainServices/MetaDomainService.cs | 8 + .../MetaDomainServices/PageDomainService.cs | 20 + .../MetaRepositories/IAppRepository.cs | 4 +- .../MetaRepositories/IDataSourceRepository.cs | 10 + .../MetaRepositories/IMenuRepository.cs | 11 + .../MetaRepositories/IPageRepository.cs | 8 + .../RenderEngineDomainModule.cs | 11 + .../DataRepositories/FormDataRepository.cs | 10 +- .../DataRepositories/TableDataRepository.cs | 6 +- .../Extensions/BuilderExtension.cs | 41 ++ .../CustomizeRelationalModelValidator.cs | 49 ++ .../Extensions/MapModelCacheKeyFactory.cs | 18 + .../QueryWithNoLockDbCommandInterceptor.cs | 36 ++ .../ReadOnlySaveChangesInterceptor.cs | 41 ++ .../RenderEngineDbContext.cs | 217 +++++++ .../EntityManager/DynamicEntityInfo.cs | 70 +++ .../EntityManager/EntityFactory.cs | 4 +- .../EntityManager/EntityProxyBuilder.cs | 557 ++++++++++++++++++ .../EntityManager/EntityTypeManager.cs | 78 +++ .../EntityManager/FieldTypeMapping.cs | 46 ++ .../Extensions/EmitExtension.cs | 349 +++++++++++ .../Extensions/ReflectionExtensions.cs | 92 +++ ...de.RenderEngine.EntityFrameworkCore.csproj | 17 + .../RenderEngineEntityFrameworkCoreModule.cs | 26 + .../H.LowCode.RenderEngine.Host.csproj | 6 +- .../RenderEngineHostModule.cs | 8 +- .../Base/FileRepositoryBase.cs | 30 + ...de.RenderEngine.Repository.JsonFile.csproj | 14 + .../RenderEngineJsonFileRepositoryModule.cs | 22 + .../Repositories/AppFileRepository.cs | 51 ++ .../Repositories/DataSourceFileRepository.cs | 49 ++ .../Repositories/MenuFileRepository.cs | 85 +++ .../Repositories/PageFileRepository.cs | 27 + .../Base/RemoteServiceRepositoryBase.cs | 11 + ...nderEngine.Repository.RemoteService.csproj | 14 + ...nderEngineRemoteServiceRepositoryModule.cs | 18 + .../AppRemoteServiceRepository.cs | 9 +- .../DataSourceRemoteServiceRepository.cs | 26 + .../MenuRemoteServiceRepository.cs | 26 + .../PageRemoteServiceRepository.cs | 21 + .../H.LowCode.DbMigrator.csproj | 4 +- .../LowCodeDbMigratorModule.cs | 12 +- .../MigratorDbContextFactory.cs | 10 +- .../EntityFrameworkCoreDbSchemaMigrator.cs | 3 +- .../MigrationServices/MigratorDbContext.cs | 8 +- 190 files changed, 3322 insertions(+), 1023 deletions(-) create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/FormDataDomainService.cs rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/DataDomainServices/IFormDataDomainService.cs (90%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/DataDomainServices/ITableDataDomainService.cs (84%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/DataDomainServices/TableDataDomainService.cs (88%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/DataRepositories/IFormDataRepository.cs (91%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/DataRepositories/ITableDataRepository.cs (83%) rename src/{Common/H.LowCode.Domain/LowCodeDomainModule.cs => DesignEngine/H.LowCode.DesignEngine.Domain/DesignEngineDomainModule.cs} (65%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/Entities/EntityBase.cs (90%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/Entities/FormEntity.cs (87%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/Entities/TableEntity.cs (80%) rename src/{Common/H.LowCode.Domain/H.LowCode.Domain.csproj => DesignEngine/H.LowCode.DesignEngine.Domain/H.LowCode.DesignEngine.Domain.csproj} (79%) create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/AppDomainService.cs rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/MetaDomainServices/DataSourceDomainService.cs (93%) create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IAppDomainService.cs rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/MetaDomainServices/IDataSourceDomainService.cs (92%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/MetaDomainServices/IMenuDomainService.cs (89%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/MetaDomainServices/IMetaDomainService.cs (69%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/MetaDomainServices/IPageDomainService.cs (54%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/MetaDomainServices/MenuDomainService.cs (89%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/MetaDomainServices/MetaDomainService.cs (72%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/MetaDomainServices/PageDomainService.cs (65%) create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaRepositories/IAppRepository.cs rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/MetaRepositories/IDataSourceRepository.cs (87%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/MetaRepositories/IMenuRepository.cs (85%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/MetaRepositories/IPageRepository.cs (47%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/PartsDomainServices/ComponentLibraryDomainService.cs (92%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/PartsDomainServices/ComponentPartsDomainService.cs (93%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/PartsDomainServices/IComponentLibraryDomainService.cs (92%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/PartsDomainServices/IComponentPartsDomainService.cs (94%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/PartsRepositories/IComponentLibraryRepository.cs (89%) rename src/{Common/H.LowCode.Domain => DesignEngine/H.LowCode.DesignEngine.Domain}/PartsRepositories/IComponentPartsRepository.cs (91%) create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DataRepositories/TableDataRepository.cs rename src/{Common/H.LowCode.EntityFrameworkCore/LowCodeEntityFrameworkCoreModule.cs => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DesignEngineEntityFrameworkCoreModule.cs} (75%) rename src/{Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/LowCodeDbContext.cs => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/DesignEngineDbContext.cs} (96%) rename src/{Common/H.LowCode.EntityFrameworkCore => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore}/EntityFrameworkCore/Extensions/BuilderExtension.cs (96%) rename src/{Common/H.LowCode.EntityFrameworkCore => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore}/EntityFrameworkCore/Extensions/CustomizeRelationalModelValidator.cs (97%) rename src/{Common/H.LowCode.EntityFrameworkCore => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore}/EntityFrameworkCore/Extensions/MapModelCacheKeyFactory.cs (78%) rename src/{Common/H.LowCode.EntityFrameworkCore => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore}/EntityFrameworkCore/Extensions/QueryWithNoLockDbCommandInterceptor.cs (95%) rename src/{Common/H.LowCode.EntityFrameworkCore => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore}/EntityFrameworkCore/Extensions/ReadOnlySaveChangesInterceptor.cs (96%) rename src/{Common/H.LowCode.EntityFrameworkCore => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore}/EntityManager/DynamicEntityInfo.cs (96%) create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs rename src/{Common/H.LowCode.EntityFrameworkCore => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore}/EntityManager/EntityProxyBuilder.cs (99%) rename src/{Common/H.LowCode.EntityFrameworkCore => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore}/EntityManager/EntityTypeManager.cs (96%) rename src/{Common/H.LowCode.EntityFrameworkCore => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore}/EntityManager/FieldTypeMapping.cs (96%) rename src/{Common/H.LowCode.EntityFrameworkCore => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore}/Extensions/EmitExtension.cs (99%) rename src/{Common/H.LowCode.EntityFrameworkCore => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore}/Extensions/ReflectionExtensions.cs (97%) rename src/{Common/H.LowCode.EntityFrameworkCore/H.LowCode.EntityFrameworkCore.csproj => DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/H.LowCode.DesignEngine.EntityFrameworkCore.csproj} (82%) rename src/{Common/H.LowCode.Repository.JsonFile => DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile}/Base/FileRepositoryBase.cs (93%) rename src/{Common/H.LowCode.Repository.JsonFile => DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile}/Base/PartsFileRepositoryBase.cs (93%) rename src/{Common/H.LowCode.Repository.JsonFile/MetaJsonFileRepositoryModule.cs => DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/DesignEngineJsonFileRepositoryModule.cs} (77%) rename src/{Common/H.LowCode.Repository.RemoteService/H.LowCode.Repository.RemoteService.csproj => DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/H.LowCode.DesignEngine.Repository.JsonFile.csproj} (48%) rename src/{Common/H.LowCode.Repository.JsonFile => DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile}/PartsRepositories/ComponentLibraryRepository.cs (96%) rename src/{Common/H.LowCode.Repository.JsonFile => DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile}/PartsRepositories/ComponentPartsRepository.cs (97%) rename src/{Common/H.LowCode.Repository.JsonFile => DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile}/Repositories/AppFileRepository.cs (77%) rename src/{Common/H.LowCode.Repository.JsonFile => DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile}/Repositories/DataSourceFileRepository.cs (96%) rename src/{Common/H.LowCode.Repository.JsonFile => DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile}/Repositories/MenuFileRepository.cs (97%) rename src/{Common/H.LowCode.Repository.JsonFile => DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile}/Repositories/PageFileRepository.cs (69%) rename src/{Common/H.LowCode.Repository.RemoteService => DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService}/Base/RemoteServiceRepositoryBase.cs (74%) rename src/{Common/H.LowCode.Repository.RemoteService/MetaRemoteServiceModule.cs => DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/DesignEngineRemoteServiceRepositoryModule.cs} (66%) create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/H.LowCode.DesignEngine.Repository.RemoteService.csproj create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Repositories/AppRemoteServiceRepository.cs rename src/{Common/H.LowCode.Repository.RemoteService => DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService}/Repositories/DataSourceRemoteServiceRepository.cs (89%) rename src/{Common/H.LowCode.Repository.RemoteService => DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService}/Repositories/MenuRemoteServiceRepository.cs (88%) rename src/{Common/H.LowCode.Repository.RemoteService => DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService}/Repositories/PageRemoteServiceRepository.cs (53%) delete mode 100644 src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/LayoutComponentProvider.cs delete mode 100644 src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/SeniorComponentProvider.cs delete mode 100644 src/Parts/H.LowCode.Components.AntBlazor/Components/LcCarousel.razor delete mode 100644 src/Parts/H.LowCode.Components.AntBlazor/Components/LcDescriptions.razor delete mode 100644 src/Parts/H.LowCode.Components.Extension/ComponentProviders/ExtensionComponentProvider.cs delete mode 100644 src/Parts/H.LowCode.Components.Extension/PageTemplateProviders/ExtensionPageTemplateProvider.cs create mode 100644 src/Protocol/H.LowCode.MetaSchema.RenderEngine/AppSchema.cs create mode 100644 src/Protocol/H.LowCode.MetaSchema.RenderEngine/ComponentSchema.cs create mode 100644 src/Protocol/H.LowCode.MetaSchema.RenderEngine/PageSchema.cs create mode 100644 src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentFragmentSchema.cs rename src/Protocol/H.LowCode.MetaSchema/{AppSchema.cs => AppSchemaBase.cs} (92%) rename src/Protocol/H.LowCode.MetaSchema/{ComponentSchema.cs => ComponentSchemaBase.cs} (92%) rename src/Protocol/H.LowCode.MetaSchema/{PageSchema.cs => PageSchemaBase.cs} (86%) rename src/Protocol/H.LowCode.MetaSchema/PropertySchemas/{ComponentFragmentSchema.cs => ComponentFragmentSchemaBase.cs} (93%) rename src/{Common/H.LowCode.Domain => RenderEngine/H.LowCode.RenderEngine.Domain}/DataDomainServices/FormDataDomainService.cs (98%) create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/IFormDataDomainService.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/ITableDataDomainService.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/TableDataDomainService.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/DataRepositories/IFormDataRepository.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/DataRepositories/ITableDataRepository.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/EntityBase.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/FormEntity.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/TableEntity.cs rename src/{Common/H.LowCode.Repository.JsonFile/H.LowCode.Repository.JsonFile.csproj => RenderEngine/H.LowCode.RenderEngine.Domain/H.LowCode.RenderEngine.Domain.csproj} (48%) rename src/{Common/H.LowCode.Domain => RenderEngine/H.LowCode.RenderEngine.Domain}/MetaDomainServices/AppDomainService.cs (73%) create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/DataSourceDomainService.cs rename src/{Common/H.LowCode.Domain => RenderEngine/H.LowCode.RenderEngine.Domain}/MetaDomainServices/IAppDomainService.cs (74%) create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IDataSourceDomainService.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IMenuDomainService.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IMetaDomainService.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IPageDomainService.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/MenuDomainService.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/MetaDomainService.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/PageDomainService.cs rename src/{Common/H.LowCode.Domain => RenderEngine/H.LowCode.RenderEngine.Domain}/MetaRepositories/IAppRepository.cs (69%) create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IDataSourceRepository.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IMenuRepository.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IPageRepository.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/RenderEngineDomainModule.cs rename src/{Common/H.LowCode.EntityFrameworkCore => RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore}/DataRepositories/FormDataRepository.cs (78%) rename src/{Common/H.LowCode.EntityFrameworkCore => RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore}/DataRepositories/TableDataRepository.cs (60%) create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/CustomizeRelationalModelValidator.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/MapModelCacheKeyFactory.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/QueryWithNoLockDbCommandInterceptor.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/ReadOnlySaveChangesInterceptor.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/RenderEngineDbContext.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs rename src/{Common/H.LowCode.EntityFrameworkCore => RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore}/EntityManager/EntityFactory.cs (96%) create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/EmitExtension.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/H.LowCode.RenderEngine.EntityFrameworkCore.csproj create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/RenderEngineEntityFrameworkCoreModule.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Base/FileRepositoryBase.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/H.LowCode.RenderEngine.Repository.JsonFile.csproj create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/RenderEngineJsonFileRepositoryModule.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/AppFileRepository.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/DataSourceFileRepository.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/MenuFileRepository.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/PageFileRepository.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Base/RemoteServiceRepositoryBase.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/H.LowCode.RenderEngine.Repository.RemoteService.csproj create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/RenderEngineRemoteServiceRepositoryModule.cs rename src/{Common/H.LowCode.Repository.RemoteService => RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService}/Repositories/AppRemoteServiceRepository.cs (75%) create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/DataSourceRemoteServiceRepository.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/MenuRemoteServiceRepository.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/PageRemoteServiceRepository.cs diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/AppServices/IAppApplicationService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/AppServices/IAppApplicationService.cs index e5206177..d93e4250 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/AppServices/IAppApplicationService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/AppServices/IAppApplicationService.cs @@ -1,5 +1,5 @@ using H.LowCode.DesignEngine.Model; -using H.LowCode.MetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using Volo.Abp.Application.Services; namespace H.LowCode.DesignEngine.Application.Contracts; @@ -8,9 +8,9 @@ public interface IAppApplicationService : IApplicationService { Task> GetAppsAsync(); - Task> GetListAsync(); + Task> GetListAsync(); - Task GetByIdAsync(string appId); + Task GetByIdAsync(string appId); - Task SaveAsync(AppSchema appSchema); + Task SaveAsync(AppPartsSchema appSchema); } \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/AppServices/IPageAppService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/AppServices/IPageAppService.cs index 43096d02..58abd92d 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/AppServices/IPageAppService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application.Contracts/AppServices/IPageAppService.cs @@ -1,5 +1,5 @@ using H.LowCode.DesignEngine.Model; -using H.LowCode.MetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using Volo.Abp.Application.Services; namespace H.LowCode.DesignEngine.Application.Contracts; @@ -8,9 +8,9 @@ public interface IPageAppService : IApplicationService { Task> GetListAsync(string appId); - Task GetByIdAsync(string appId, string pageId); + Task GetByIdAsync(string appId, string pageId); - Task SaveAsync(PageSchema pageSchema); + Task SaveAsync(PagePartsSchema pageSchema); Task DeleteAsync(string appId, string pageId); } \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/AppApplicationService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/AppApplicationService.cs index 8e73bc6c..74855c4d 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/AppApplicationService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/AppApplicationService.cs @@ -1,14 +1,14 @@ using H.LowCode.Configuration; using H.LowCode.DesignEngine.Application.Contracts; using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain; -using H.LowCode.MetaSchema; +using H.LowCode.DesignEngine.Domain; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using System.Collections.Generic; using System.Text; using Volo.Abp; using Volo.Abp.Application.Services; +using H.LowCode.MetaSchema.DesignEngine; namespace H.LowCode.DesignEngine.Application; @@ -31,17 +31,17 @@ public class AppApplicationService : ApplicationService, IAppApplicationService }).ToList(); } - public async Task> GetListAsync() + public async Task> GetListAsync() { return await _domainService.GetListAsync(); } - public async Task GetByIdAsync(string appId) + public async Task GetByIdAsync(string appId) { return await _domainService.GetAsync(appId); } - public async Task SaveAsync(AppSchema appSchema) + public async Task SaveAsync(AppPartsSchema appSchema) { ArgumentNullException.ThrowIfNull(appSchema); ArgumentException.ThrowIfNullOrEmpty(appSchema.Id); diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/DataSourceAppService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/DataSourceAppService.cs index ed60b22f..a64ef25e 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/DataSourceAppService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/DataSourceAppService.cs @@ -1,6 +1,6 @@ using H.LowCode.DesignEngine.Application.Contracts; using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain; +using H.LowCode.DesignEngine.Domain; using H.LowCode.MetaSchema; using Microsoft.Extensions.DependencyInjection; using System.Collections.Generic; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/MenuAppService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/MenuAppService.cs index 1a6806dd..07c2dead 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/MenuAppService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/MenuAppService.cs @@ -1,10 +1,8 @@ using H.Extensions.System; using H.LowCode.DesignEngine.Application.Contracts; -using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain; +using H.LowCode.DesignEngine.Domain; using H.LowCode.MetaSchema; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; using System.Collections.Generic; using System.Text; using Volo.Abp; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/PageAppService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/PageAppService.cs index 0962962d..3a1ca8db 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/PageAppService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application/AppServices/PageAppService.cs @@ -1,10 +1,8 @@ -using H.Extensions.System; -using H.LowCode.DesignEngine.Application.Contracts; +using H.LowCode.DesignEngine.Application.Contracts; +using H.LowCode.DesignEngine.Domain; using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain; -using H.LowCode.MetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; using System.Collections.Generic; using System.Text; using Volo.Abp; @@ -22,12 +20,12 @@ public class PageAppService : ApplicationService, IPageAppService return await _domainService.GetListAsync(appId); } - public async Task GetByIdAsync(string appId, string pageId) + public async Task GetByIdAsync(string appId, string pageId) { - return await _domainService.GetAsync(appId, pageId); + return await _domainService.GetByIdAsync(appId, pageId); } - public async Task SaveAsync(PageSchema pageSchema) + public async Task SaveAsync(PagePartsSchema pageSchema) { ArgumentNullException.ThrowIfNull(pageSchema); ArgumentException.ThrowIfNullOrEmpty(pageSchema.Id); diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application/DesignEngineApplicationModule.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application/DesignEngineApplicationModule.cs index 5e5e9105..8b316ba5 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application/DesignEngineApplicationModule.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application/DesignEngineApplicationModule.cs @@ -1,12 +1,11 @@ using H.LowCode.Configuration; -using H.LowCode.DesignEngine.Application.Contracts; -using H.LowCode.Domain; +using H.LowCode.DesignEngine.Domain; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Modularity; namespace H.LowCode.DesignEngine.Application; -[DependsOn(typeof(LowCodeDomainModule))] +[DependsOn(typeof(DesignEngineDomainModule))] public class DesignEngineApplicationModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application/H.LowCode.DesignEngine.Application.csproj b/src/DesignEngine/H.LowCode.DesignEngine.Application/H.LowCode.DesignEngine.Application.csproj index 7fd34478..5fb8d974 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application/H.LowCode.DesignEngine.Application.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application/H.LowCode.DesignEngine.Application.csproj @@ -10,8 +10,8 @@ - + diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentLibraryAppService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentLibraryAppService.cs index ab8a7650..f7f9dfae 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentLibraryAppService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentLibraryAppService.cs @@ -1,13 +1,11 @@ using H.LowCode.DesignEngine.Application.Contracts; -using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain; +using H.LowCode.DesignEngine.Domain; using H.LowCode.MetaSchema.DesignEngine; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Text; -using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Services; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentPartsAppService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentPartsAppService.cs index 151d3b8f..eabec6e9 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentPartsAppService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Application/PartsAppServices/ComponentPartsAppService.cs @@ -1,6 +1,6 @@ using H.LowCode.DesignEngine.Application.Contracts; using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain; +using H.LowCode.DesignEngine.Domain; using H.LowCode.MetaSchema.DesignEngine; using Microsoft.Extensions.DependencyInjection; using System; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/FormDataDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/FormDataDomainService.cs new file mode 100644 index 00000000..11fd1afa --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/FormDataDomainService.cs @@ -0,0 +1,59 @@ +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.DesignEngine.Domain; + +public class FormDataDomainService : DomainService, IFormDataDomainService +{ + private IFormDataRepository _formDataRepository => LazyServiceProvider.GetRequiredService(); + private IPageDomainService _pageDomainService => LazyServiceProvider.GetRequiredService(); + + public async Task GetAsync(string appId, string pageId, string id) + { + var formPageSchema = await _pageDomainService.GetByIdAsync(appId, pageId); + if (formPageSchema == null) + throw new KeyNotFoundException($"page not found: appId={appId}, pageId={pageId}"); + + string entityName = formPageSchema.DataSource.DataSourceValue; + + if (string.IsNullOrEmpty(id) || string.Equals(id, "empty")) + { + var defaultEntity = new FormEntity() + { + Name = entityName, + Fields = formPageSchema.Components + .Where(t => t.IsContainer == false) + .ToDictionary(key => key.Name, val => val.Fragment.GetDefaultValue()) + }; + return defaultEntity; + } + + var entity = await _formDataRepository.GetAsync(entityName, id); + if (entity == null) + throw new EntityNotFoundException($"Entity {entityName} Not Found: {id}"); + + return entity; + } + + public async Task SaveAsync(FormEntity entity) + { + //if (string.IsNullOrEmpty(entity.Id)) + await _formDataRepository.AddAsync(entity); + //else + // await _formDataRepository.UpdateAsync(entity); + return true; + } + + public async Task DeleteAsync(string appId, string pageId, string id) + { + var formPageSchema = await _pageDomainService.GetByIdAsync(appId, pageId); + + return await _formDataRepository.DeleteAsync(formPageSchema.DataSource.DataSourceValue, id); + } +} diff --git a/src/Common/H.LowCode.Domain/DataDomainServices/IFormDataDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/IFormDataDomainService.cs similarity index 90% rename from src/Common/H.LowCode.Domain/DataDomainServices/IFormDataDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/IFormDataDomainService.cs index ec82071c..ab49a96b 100644 --- a/src/Common/H.LowCode.Domain/DataDomainServices/IFormDataDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/IFormDataDomainService.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public interface IFormDataDomainService : IDomainService { diff --git a/src/Common/H.LowCode.Domain/DataDomainServices/ITableDataDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/ITableDataDomainService.cs similarity index 84% rename from src/Common/H.LowCode.Domain/DataDomainServices/ITableDataDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/ITableDataDomainService.cs index 0d41de78..5c913ac0 100644 --- a/src/Common/H.LowCode.Domain/DataDomainServices/ITableDataDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/ITableDataDomainService.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public interface ITableDataDomainService : IDomainService { diff --git a/src/Common/H.LowCode.Domain/DataDomainServices/TableDataDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/TableDataDomainService.cs similarity index 88% rename from src/Common/H.LowCode.Domain/DataDomainServices/TableDataDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/TableDataDomainService.cs index 0b337bb5..f70b94b1 100644 --- a/src/Common/H.LowCode.Domain/DataDomainServices/TableDataDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/TableDataDomainService.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public class TableDataDomainService : DomainService, ITableDataDomainService { diff --git a/src/Common/H.LowCode.Domain/DataRepositories/IFormDataRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataRepositories/IFormDataRepository.cs similarity index 91% rename from src/Common/H.LowCode.Domain/DataRepositories/IFormDataRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/DataRepositories/IFormDataRepository.cs index 300e6daf..1e1b0a59 100644 --- a/src/Common/H.LowCode.Domain/DataRepositories/IFormDataRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataRepositories/IFormDataRepository.cs @@ -6,7 +6,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public interface IFormDataRepository : IRepository { diff --git a/src/Common/H.LowCode.Domain/DataRepositories/ITableDataRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataRepositories/ITableDataRepository.cs similarity index 83% rename from src/Common/H.LowCode.Domain/DataRepositories/ITableDataRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/DataRepositories/ITableDataRepository.cs index e716900d..8cf5892e 100644 --- a/src/Common/H.LowCode.Domain/DataRepositories/ITableDataRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataRepositories/ITableDataRepository.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public interface ITableDataRepository : IRepository { diff --git a/src/Common/H.LowCode.Domain/LowCodeDomainModule.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DesignEngineDomainModule.cs similarity index 65% rename from src/Common/H.LowCode.Domain/LowCodeDomainModule.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/DesignEngineDomainModule.cs index b9b6c417..3b4a1dc9 100644 --- a/src/Common/H.LowCode.Domain/LowCodeDomainModule.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DesignEngineDomainModule.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Modularity; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; -public class LowCodeDomainModule : AbpModule +public class DesignEngineDomainModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { diff --git a/src/Common/H.LowCode.Domain/Entities/EntityBase.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/EntityBase.cs similarity index 90% rename from src/Common/H.LowCode.Domain/Entities/EntityBase.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/EntityBase.cs index 78f97efc..54ef8df3 100644 --- a/src/Common/H.LowCode.Domain/Entities/EntityBase.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/EntityBase.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public abstract class EntityBase { diff --git a/src/Common/H.LowCode.Domain/Entities/FormEntity.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/FormEntity.cs similarity index 87% rename from src/Common/H.LowCode.Domain/Entities/FormEntity.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/FormEntity.cs index e8861740..17d184b7 100644 --- a/src/Common/H.LowCode.Domain/Entities/FormEntity.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/FormEntity.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public class FormEntity : EntityBase { diff --git a/src/Common/H.LowCode.Domain/Entities/TableEntity.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/TableEntity.cs similarity index 80% rename from src/Common/H.LowCode.Domain/Entities/TableEntity.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/TableEntity.cs index 17820d0a..8cba9cc8 100644 --- a/src/Common/H.LowCode.Domain/Entities/TableEntity.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/TableEntity.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; internal class TableEntity : EntityBase { diff --git a/src/Common/H.LowCode.Domain/H.LowCode.Domain.csproj b/src/DesignEngine/H.LowCode.DesignEngine.Domain/H.LowCode.DesignEngine.Domain.csproj similarity index 79% rename from src/Common/H.LowCode.Domain/H.LowCode.Domain.csproj rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/H.LowCode.DesignEngine.Domain.csproj index dc3205c3..93b09797 100644 --- a/src/Common/H.LowCode.Domain/H.LowCode.Domain.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/H.LowCode.DesignEngine.Domain.csproj @@ -10,7 +10,6 @@ - diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/AppDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/AppDomainService.cs new file mode 100644 index 00000000..eaa6ed41 --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/AppDomainService.cs @@ -0,0 +1,31 @@ +using H.LowCode.DesignEngine.Domain.Repositories; +using H.LowCode.MetaSchema; +using H.LowCode.MetaSchema.DesignEngine; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.DesignEngine.Domain; + +public class AppDomainService : DomainService, IAppDomainService +{ + private readonly IAppRepository _repository; + + public AppDomainService(IAppRepository repository) + { + _repository = repository; + } + + public async Task> GetListAsync() + { + return await _repository.GetListAsync(); + } + + public async Task GetAsync(string appId) + { + return await _repository.GetAsync(appId); + } + + public async Task SaveAsync(AppPartsSchema appSchema) + { + await _repository.SaveAsync(appSchema); + } +} \ No newline at end of file diff --git a/src/Common/H.LowCode.Domain/MetaDomainServices/DataSourceDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/DataSourceDomainService.cs similarity index 93% rename from src/Common/H.LowCode.Domain/MetaDomainServices/DataSourceDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/DataSourceDomainService.cs index 2da5ab90..4e9f4f19 100644 --- a/src/Common/H.LowCode.Domain/MetaDomainServices/DataSourceDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/DataSourceDomainService.cs @@ -1,8 +1,8 @@ -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain.Repositories; using H.LowCode.MetaSchema; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public class DataSourceDomainService : DomainService, IDataSourceDomainService { diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IAppDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IAppDomainService.cs new file mode 100644 index 00000000..bc05d929 --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IAppDomainService.cs @@ -0,0 +1,13 @@ +using H.LowCode.MetaSchema.DesignEngine; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.DesignEngine.Domain; + +public interface IAppDomainService : IDomainService +{ + Task> GetListAsync(); + + Task SaveAsync(AppPartsSchema appSchema); + + Task GetAsync(string appId); +} \ No newline at end of file diff --git a/src/Common/H.LowCode.Domain/MetaDomainServices/IDataSourceDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IDataSourceDomainService.cs similarity index 92% rename from src/Common/H.LowCode.Domain/MetaDomainServices/IDataSourceDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IDataSourceDomainService.cs index 7e6be5a2..2787ed1b 100644 --- a/src/Common/H.LowCode.Domain/MetaDomainServices/IDataSourceDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IDataSourceDomainService.cs @@ -2,7 +2,7 @@ using H.LowCode.MetaSchema; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public interface IDataSourceDomainService : IDomainService { diff --git a/src/Common/H.LowCode.Domain/MetaDomainServices/IMenuDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IMenuDomainService.cs similarity index 89% rename from src/Common/H.LowCode.Domain/MetaDomainServices/IMenuDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IMenuDomainService.cs index c3daa7f3..e8a8dab6 100644 --- a/src/Common/H.LowCode.Domain/MetaDomainServices/IMenuDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IMenuDomainService.cs @@ -1,7 +1,7 @@ using H.LowCode.MetaSchema; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public interface IMenuDomainService : IDomainService { diff --git a/src/Common/H.LowCode.Domain/MetaDomainServices/IMetaDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IMetaDomainService.cs similarity index 69% rename from src/Common/H.LowCode.Domain/MetaDomainServices/IMetaDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IMetaDomainService.cs index 23d06862..f5007b92 100644 --- a/src/Common/H.LowCode.Domain/MetaDomainServices/IMetaDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IMetaDomainService.cs @@ -1,6 +1,6 @@ using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public interface IMetaDomainService : IDomainService { diff --git a/src/Common/H.LowCode.Domain/MetaDomainServices/IPageDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IPageDomainService.cs similarity index 54% rename from src/Common/H.LowCode.Domain/MetaDomainServices/IPageDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IPageDomainService.cs index 0ac3b60f..d416cc62 100644 --- a/src/Common/H.LowCode.Domain/MetaDomainServices/IPageDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/IPageDomainService.cs @@ -1,16 +1,16 @@ using H.LowCode.DesignEngine.Model; -using H.LowCode.MetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public interface IPageDomainService : IDomainService { Task> GetListAsync(string appId); - Task GetAsync(string appId, string pageId); + Task GetByIdAsync(string appId, string pageId); - Task SaveAsync(PageSchema pageSchema); + Task SaveAsync(PagePartsSchema pageSchema); Task DeleteAsync(string appId, string pageId); } \ No newline at end of file diff --git a/src/Common/H.LowCode.Domain/MetaDomainServices/MenuDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/MenuDomainService.cs similarity index 89% rename from src/Common/H.LowCode.Domain/MetaDomainServices/MenuDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/MenuDomainService.cs index da39e5c0..73e2d6c6 100644 --- a/src/Common/H.LowCode.Domain/MetaDomainServices/MenuDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/MenuDomainService.cs @@ -1,8 +1,8 @@ -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain.Repositories; using H.LowCode.MetaSchema; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public class MenuDomainService : DomainService, IMenuDomainService { diff --git a/src/Common/H.LowCode.Domain/MetaDomainServices/MetaDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/MetaDomainService.cs similarity index 72% rename from src/Common/H.LowCode.Domain/MetaDomainServices/MetaDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/MetaDomainService.cs index d0f9aa35..605df0e6 100644 --- a/src/Common/H.LowCode.Domain/MetaDomainServices/MetaDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/MetaDomainService.cs @@ -1,6 +1,6 @@ using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public class MetaDomainService : DomainService, IMetaDomainService { diff --git a/src/Common/H.LowCode.Domain/MetaDomainServices/PageDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/PageDomainService.cs similarity index 65% rename from src/Common/H.LowCode.Domain/MetaDomainServices/PageDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/PageDomainService.cs index 31363ae5..172405e7 100644 --- a/src/Common/H.LowCode.Domain/MetaDomainServices/PageDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaDomainServices/PageDomainService.cs @@ -1,9 +1,9 @@ using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain.Repositories; -using H.LowCode.MetaSchema; +using H.LowCode.DesignEngine.Domain.Repositories; +using H.LowCode.MetaSchema.DesignEngine; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public class PageDomainService : DomainService, IPageDomainService { @@ -19,12 +19,12 @@ public class PageDomainService : DomainService, IPageDomainService return await _repository.GetListAsync(appId); } - public async Task GetAsync(string appId, string pageId) + public async Task GetByIdAsync(string appId, string pageId) { - return await _repository.GetAsync(appId, pageId); + return await _repository.GetByIdAsync(appId, pageId); } - public async Task SaveAsync(PageSchema pageSchema) + public async Task SaveAsync(PagePartsSchema pageSchema) { await _repository.SaveAsync(pageSchema); } diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaRepositories/IAppRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaRepositories/IAppRepository.cs new file mode 100644 index 00000000..f4b41808 --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaRepositories/IAppRepository.cs @@ -0,0 +1,14 @@ +using H.LowCode.MetaSchema; +using H.LowCode.MetaSchema.DesignEngine; +using Volo.Abp.Domain.Repositories; + +namespace H.LowCode.DesignEngine.Domain.Repositories; + +public interface IAppRepository +{ + Task> GetListAsync(); + + Task GetAsync(string appId); + + Task SaveAsync(AppPartsSchema appSchema); +} \ No newline at end of file diff --git a/src/Common/H.LowCode.Domain/MetaRepositories/IDataSourceRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaRepositories/IDataSourceRepository.cs similarity index 87% rename from src/Common/H.LowCode.Domain/MetaRepositories/IDataSourceRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaRepositories/IDataSourceRepository.cs index 27538f48..b74ee12f 100644 --- a/src/Common/H.LowCode.Domain/MetaRepositories/IDataSourceRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaRepositories/IDataSourceRepository.cs @@ -2,7 +2,7 @@ using H.LowCode.MetaSchema; using Volo.Abp.Domain.Repositories; -namespace H.LowCode.Domain.Repositories; +namespace H.LowCode.DesignEngine.Domain.Repositories; public interface IDataSourceRepository { diff --git a/src/Common/H.LowCode.Domain/MetaRepositories/IMenuRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaRepositories/IMenuRepository.cs similarity index 85% rename from src/Common/H.LowCode.Domain/MetaRepositories/IMenuRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaRepositories/IMenuRepository.cs index a1b10ad7..92373337 100644 --- a/src/Common/H.LowCode.Domain/MetaRepositories/IMenuRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaRepositories/IMenuRepository.cs @@ -1,7 +1,7 @@ using H.LowCode.MetaSchema; using Volo.Abp.Domain.Repositories; -namespace H.LowCode.Domain.Repositories; +namespace H.LowCode.DesignEngine.Domain.Repositories; public interface IMenuRepository { diff --git a/src/Common/H.LowCode.Domain/MetaRepositories/IPageRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaRepositories/IPageRepository.cs similarity index 47% rename from src/Common/H.LowCode.Domain/MetaRepositories/IPageRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaRepositories/IPageRepository.cs index f261ea45..60a550aa 100644 --- a/src/Common/H.LowCode.Domain/MetaRepositories/IPageRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/MetaRepositories/IPageRepository.cs @@ -1,16 +1,15 @@ using H.LowCode.DesignEngine.Model; -using H.LowCode.MetaSchema; -using Volo.Abp.Domain.Repositories; +using H.LowCode.MetaSchema.DesignEngine; -namespace H.LowCode.Domain.Repositories; +namespace H.LowCode.DesignEngine.Domain.Repositories; public interface IPageRepository { Task> GetListAsync(string appId); - Task GetAsync(string appId, string pageId); + Task SaveAsync(PagePartsSchema pageSchema); - Task SaveAsync(PageSchema pageSchema); + Task GetByIdAsync(string appId, string pageId); Task DeleteAsync(string appId, string pageId); } \ No newline at end of file diff --git a/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentLibraryDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsDomainServices/ComponentLibraryDomainService.cs similarity index 92% rename from src/Common/H.LowCode.Domain/PartsDomainServices/ComponentLibraryDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsDomainServices/ComponentLibraryDomainService.cs index 377a8be6..d56c7b53 100644 --- a/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentLibraryDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsDomainServices/ComponentLibraryDomainService.cs @@ -1,5 +1,5 @@ using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain.Repositories; using H.LowCode.MetaSchema.DesignEngine; using System; using System.Collections.Generic; @@ -8,7 +8,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public class ComponentLibraryDomainService : DomainService, IComponentLibraryDomainService { diff --git a/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentPartsDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsDomainServices/ComponentPartsDomainService.cs similarity index 93% rename from src/Common/H.LowCode.Domain/PartsDomainServices/ComponentPartsDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsDomainServices/ComponentPartsDomainService.cs index cc9a8517..53bc912e 100644 --- a/src/Common/H.LowCode.Domain/PartsDomainServices/ComponentPartsDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsDomainServices/ComponentPartsDomainService.cs @@ -1,5 +1,5 @@ using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain.Repositories; using H.LowCode.MetaSchema.DesignEngine; using System; using System.Collections.Generic; @@ -8,7 +8,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public class ComponentPartsDomainService : DomainService, IComponentPartsDomainService { diff --git a/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentLibraryDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsDomainServices/IComponentLibraryDomainService.cs similarity index 92% rename from src/Common/H.LowCode.Domain/PartsDomainServices/IComponentLibraryDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsDomainServices/IComponentLibraryDomainService.cs index 36863e47..300ae787 100644 --- a/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentLibraryDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsDomainServices/IComponentLibraryDomainService.cs @@ -7,7 +7,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public interface IComponentLibraryDomainService : IDomainService { diff --git a/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentPartsDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsDomainServices/IComponentPartsDomainService.cs similarity index 94% rename from src/Common/H.LowCode.Domain/PartsDomainServices/IComponentPartsDomainService.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsDomainServices/IComponentPartsDomainService.cs index 4822ea97..8beb6784 100644 --- a/src/Common/H.LowCode.Domain/PartsDomainServices/IComponentPartsDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsDomainServices/IComponentPartsDomainService.cs @@ -7,7 +7,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.DesignEngine.Domain; public interface IComponentPartsDomainService : IDomainService { diff --git a/src/Common/H.LowCode.Domain/PartsRepositories/IComponentLibraryRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsRepositories/IComponentLibraryRepository.cs similarity index 89% rename from src/Common/H.LowCode.Domain/PartsRepositories/IComponentLibraryRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsRepositories/IComponentLibraryRepository.cs index 16e20e72..6a191272 100644 --- a/src/Common/H.LowCode.Domain/PartsRepositories/IComponentLibraryRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsRepositories/IComponentLibraryRepository.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.Domain.Repositories; +namespace H.LowCode.DesignEngine.Domain.Repositories; public interface IComponentLibraryRepository { diff --git a/src/Common/H.LowCode.Domain/PartsRepositories/IComponentPartsRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsRepositories/IComponentPartsRepository.cs similarity index 91% rename from src/Common/H.LowCode.Domain/PartsRepositories/IComponentPartsRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsRepositories/IComponentPartsRepository.cs index 237917b7..0fd5aaa4 100644 --- a/src/Common/H.LowCode.Domain/PartsRepositories/IComponentPartsRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/PartsRepositories/IComponentPartsRepository.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.Domain.Repositories; +namespace H.LowCode.DesignEngine.Domain.Repositories; public interface IComponentPartsRepository { diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs new file mode 100644 index 00000000..159da22e --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs @@ -0,0 +1,38 @@ +using H.LowCode.DesignEngine.Domain; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace H.LowCode.DesignEngine.EntityFrameworkCore; + +public class FormDataRepository : IFormDataRepository +{ + private DesignEngineDbContext _dbContext; + public bool? IsChangeTrackingEnabled => true; + + public FormDataRepository(DesignEngineDbContext dbContext) + { + _dbContext = dbContext; + } + + public async Task AddAsync(FormEntity entity) + { + return await _dbContext.AddAsync(entity); + } + + public async Task GetAsync(string tableName, string id) + { + return await _dbContext.GetAsync(tableName, id); + } + + public Task UpdateAsync(FormEntity entity) + { + throw new NotImplementedException(); + } + + public Task DeleteAsync(string entityName, string id) + { + throw new NotImplementedException(); + } +} diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DataRepositories/TableDataRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DataRepositories/TableDataRepository.cs new file mode 100644 index 00000000..c913db0b --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DataRepositories/TableDataRepository.cs @@ -0,0 +1,16 @@ +using H.LowCode.DesignEngine.Domain; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace H.LowCode.DesignEngine.EntityFrameworkCore; + +public class TableDataRepository : ITableDataRepository +{ + public bool? IsChangeTrackingEnabled => true; + + public TableDataRepository(DesignEngineDbContext dbContext) + { + } +} diff --git a/src/Common/H.LowCode.EntityFrameworkCore/LowCodeEntityFrameworkCoreModule.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DesignEngineEntityFrameworkCoreModule.cs similarity index 75% rename from src/Common/H.LowCode.EntityFrameworkCore/LowCodeEntityFrameworkCoreModule.cs rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DesignEngineEntityFrameworkCoreModule.cs index b3275dd5..1e679f6d 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/LowCodeEntityFrameworkCoreModule.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DesignEngineEntityFrameworkCoreModule.cs @@ -1,4 +1,4 @@ -using H.LowCode.Domain; +using H.LowCode.DesignEngine.Domain; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -6,9 +6,9 @@ using Microsoft.Extensions.Options; using Volo.Abp; using Volo.Abp.Modularity; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.DesignEngine.EntityFrameworkCore; -public class LowCodeEntityFrameworkCoreModule : AbpModule +public class DesignEngineEntityFrameworkCoreModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { @@ -17,7 +17,7 @@ public class LowCodeEntityFrameworkCoreModule : AbpModule context.Services.AddScoped(typeof(EntityTypeManager)); - context.Services.AddDbContext(options => + context.Services.AddDbContext(options => { var connectionString = context.Services.GetConfiguration().GetConnectionString("Default"); options.UseSqlServer(connectionString); diff --git a/src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/LowCodeDbContext.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/DesignEngineDbContext.cs similarity index 96% rename from src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/LowCodeDbContext.cs rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/DesignEngineDbContext.cs index 110059f9..5e3cf053 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/LowCodeDbContext.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/DesignEngineDbContext.cs @@ -1,5 +1,4 @@ -using H.LowCode.Domain; -using JetBrains.Annotations; +using H.LowCode.DesignEngine.Domain; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata.Builders; @@ -9,18 +8,17 @@ using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; -using System.Threading.Tasks; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.DesignEngine.EntityFrameworkCore; -public class LowCodeDbContext : DbContext +public class DesignEngineDbContext : DbContext { public string AppId { get; private set; } - private DbContextOptions _dbOptions; + private DbContextOptions _dbOptions; private EntityTypeManager _entityTypeManager; - public LowCodeDbContext(DbContextOptions options, + public DesignEngineDbContext(DbContextOptions options, EntityTypeManager entityTypeManager) : base(options) { _dbOptions = options; diff --git a/src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs similarity index 96% rename from src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs index 9de4d3b3..5c17a6ea 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.DesignEngine.EntityFrameworkCore; public static class BuilderExtensions { diff --git a/src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/CustomizeRelationalModelValidator.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/CustomizeRelationalModelValidator.cs similarity index 97% rename from src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/CustomizeRelationalModelValidator.cs rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/CustomizeRelationalModelValidator.cs index e792965b..5c875ce4 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/CustomizeRelationalModelValidator.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/CustomizeRelationalModelValidator.cs @@ -10,7 +10,7 @@ using System.Text; using System.Threading.Tasks; using JetBrains.Annotations; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.DesignEngine.EntityFrameworkCore; /// /// 重写ModelValidator 确保表可以重复注册 diff --git a/src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/MapModelCacheKeyFactory.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/MapModelCacheKeyFactory.cs similarity index 78% rename from src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/MapModelCacheKeyFactory.cs rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/MapModelCacheKeyFactory.cs index 7e2a15a3..6615b606 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/MapModelCacheKeyFactory.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/MapModelCacheKeyFactory.cs @@ -6,13 +6,13 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.DesignEngine.EntityFrameworkCore; internal class MapModelCacheKeyFactory : IModelCacheKeyFactory { public object Create(DbContext context, bool designTime) { - var lowCodeDbContext = (LowCodeDbContext)context; + var lowCodeDbContext = (DesignEngineDbContext)context; return Tuple.Create(context.GetType(), lowCodeDbContext.AppId); } } \ No newline at end of file diff --git a/src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/QueryWithNoLockDbCommandInterceptor.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/QueryWithNoLockDbCommandInterceptor.cs similarity index 95% rename from src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/QueryWithNoLockDbCommandInterceptor.cs rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/QueryWithNoLockDbCommandInterceptor.cs index 138eb286..e163b1e7 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/QueryWithNoLockDbCommandInterceptor.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/QueryWithNoLockDbCommandInterceptor.cs @@ -7,7 +7,7 @@ using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.DesignEngine.EntityFrameworkCore; /// /// SQL执行前进行拦截,加上WITH (NOLOCK) diff --git a/src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/ReadOnlySaveChangesInterceptor.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/ReadOnlySaveChangesInterceptor.cs similarity index 96% rename from src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/ReadOnlySaveChangesInterceptor.cs rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/ReadOnlySaveChangesInterceptor.cs index 628711a8..1e231a70 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/EntityFrameworkCore/Extensions/ReadOnlySaveChangesInterceptor.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/ReadOnlySaveChangesInterceptor.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.DesignEngine.EntityFrameworkCore; public class ReadOnlySaveChangesInterceptor : SaveChangesInterceptor { diff --git a/src/Common/H.LowCode.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs similarity index 96% rename from src/Common/H.LowCode.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs index 983f93c9..6814e380 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs @@ -5,7 +5,7 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.DesignEngine.EntityFrameworkCore; public class DynamicEntityInfo { diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs new file mode 100644 index 00000000..8c9e702d --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs @@ -0,0 +1,87 @@ +using System; +using System.Linq; +using System.Reflection.Emit; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using H.LowCode.DesignEngine.Domain; + +namespace H.LowCode.DesignEngine.EntityFrameworkCore; + +public class EntityFactory +{ + private static readonly HashSet s_typeNames = new HashSet(StringComparer.OrdinalIgnoreCase); + + /// + /// 创建实体类 + /// + /// + /// + /// + /// + public static Type CreateEntityType(ModuleBuilder mb, string entityName, IEnumerable fields) + { + if (s_typeNames.Contains(entityName)) + { + entityName = entityName + "_"; + s_typeNames.Add(entityName); + } + + //定义子类,继承 EntityBase 基类 + string entityTypeName = $"{mb.Assembly.GetName().Name}.{entityName}"; + var tb = mb.DefineType(entityTypeName, typeof(EntityBase)); + + //定义属性 + foreach (var field in fields) + { + //定义属性 + tb.DefineField(field.Name, field.ClrType); + } + + var entityType = tb.CreateType(); + return entityType; + } + + /// + /// 创建实体对象 + /// + /// 实例的类型。 + /// 实体对象。 + public static T CreateInstance() where T : EntityBase + { + return (T)CreateInstance(typeof(T)); + } + + /// + /// 创建实体对象 + /// + /// 实例的类型。 + /// 实体对象。 + public static EntityBase CreateInstance(Type type) + { + if (type == null) + throw new ArgumentNullException(nameof(type)); + + ConstructorInfo ctorInfo = type.GetConstructor(Type.EmptyTypes); + Func ctor = CreateInstanceByDelegate(ctorInfo); + + return (EntityBase)ctor.Invoke(); + } + + /// + /// 基于委托创建实体对象 + /// + /// + /// + private static Func CreateInstanceByDelegate(ConstructorInfo constructor) + { + DynamicMethod dynamicMethod = new DynamicMethod("ctor", constructor.DeclaringType, Type.EmptyTypes, true); + + ILGenerator il = dynamicMethod.GetILGenerator(); + il.Emit(OpCodes.Nop); + il.Emit(OpCodes.Newobj, constructor); + il.Emit(OpCodes.Ret); + + return (Func)dynamicMethod.CreateDelegate(typeof(Func)); + } +} diff --git a/src/Common/H.LowCode.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs similarity index 99% rename from src/Common/H.LowCode.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs index 43030deb..77b3d056 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs @@ -6,9 +6,9 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; -using H.LowCode.Domain; +using H.LowCode.DesignEngine.Domain; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.DesignEngine.EntityFrameworkCore; public class EntityProxyBuilder { diff --git a/src/Common/H.LowCode.EntityFrameworkCore/EntityManager/EntityTypeManager.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs similarity index 96% rename from src/Common/H.LowCode.EntityFrameworkCore/EntityManager/EntityTypeManager.cs rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs index 01fa11df..28ca2efb 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/EntityManager/EntityTypeManager.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs @@ -5,10 +5,10 @@ using System.Reflection.Emit; using System.Reflection; using System.Text; using System.Threading.Tasks; -using H.LowCode.Domain; using System.ComponentModel.DataAnnotations; +using H.LowCode.DesignEngine.Domain; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.DesignEngine.EntityFrameworkCore; public class EntityTypeManager { diff --git a/src/Common/H.LowCode.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs similarity index 96% rename from src/Common/H.LowCode.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs index 90bca4e5..9645638e 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.DesignEngine.EntityFrameworkCore; internal class FieldTypeMapping { diff --git a/src/Common/H.LowCode.EntityFrameworkCore/Extensions/EmitExtension.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/Extensions/EmitExtension.cs similarity index 99% rename from src/Common/H.LowCode.EntityFrameworkCore/Extensions/EmitExtension.cs rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/Extensions/EmitExtension.cs index f3be8281..a961171f 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/Extensions/EmitExtension.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/Extensions/EmitExtension.cs @@ -8,7 +8,7 @@ using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.DesignEngine.EntityFrameworkCore; /// /// Emit扩展 diff --git a/src/Common/H.LowCode.EntityFrameworkCore/Extensions/ReflectionExtensions.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs similarity index 97% rename from src/Common/H.LowCode.EntityFrameworkCore/Extensions/ReflectionExtensions.cs rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs index 61db577c..467b6c76 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/Extensions/ReflectionExtensions.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs @@ -5,7 +5,7 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.DesignEngine.EntityFrameworkCore; internal static class ReflectionExtensions { diff --git a/src/Common/H.LowCode.EntityFrameworkCore/H.LowCode.EntityFrameworkCore.csproj b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/H.LowCode.DesignEngine.EntityFrameworkCore.csproj similarity index 82% rename from src/Common/H.LowCode.EntityFrameworkCore/H.LowCode.EntityFrameworkCore.csproj rename to src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/H.LowCode.DesignEngine.EntityFrameworkCore.csproj index 8e8d6e28..cd20544b 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/H.LowCode.EntityFrameworkCore.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/H.LowCode.DesignEngine.EntityFrameworkCore.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Host/DesignEngineHostModule.cs b/src/DesignEngine/H.LowCode.DesignEngine.Host/DesignEngineHostModule.cs index e96bccbe..179b8009 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Host/DesignEngineHostModule.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Host/DesignEngineHostModule.cs @@ -2,10 +2,10 @@ using H.LowCode.Components.AntBlazor; using H.LowCode.Components.Extension; using H.LowCode.DesignEngine.Application; -using H.LowCode.EntityFrameworkCore; +using H.LowCode.DesignEngine.EntityFrameworkCore; +using H.LowCode.DesignEngine.Repository.JsonFile; using H.LowCode.MyApp; using H.LowCode.PartsDesignEngine; -using H.LowCode.Repository.JsonFile; using H.LowCode.Workbench; using H.Util.Blazor; using Microsoft.OpenApi.Models; @@ -23,8 +23,8 @@ namespace H.LowCode.DesignEngine.Host; typeof(AbpSwashbuckleModule), //=====lowcode-server=====// typeof(DesignEngineApplicationModule), - typeof(LowCodeEntityFrameworkCoreModule), - typeof(MetaJsonFileRepositoryModule), + typeof(DesignEngineEntityFrameworkCoreModule), + typeof(DesignEngineJsonFileRepositoryModule), //=====lowcode-web=====// //Workbench typeof(LowCodeWorkbenchModule), diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Host/H.LowCode.DesignEngine.Host.csproj b/src/DesignEngine/H.LowCode.DesignEngine.Host/H.LowCode.DesignEngine.Host.csproj index 97e5fdc8..ec5ed595 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Host/H.LowCode.DesignEngine.Host.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine.Host/H.LowCode.DesignEngine.Host.csproj @@ -10,10 +10,10 @@ - - - + + + diff --git a/src/Common/H.LowCode.Repository.JsonFile/Base/FileRepositoryBase.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Base/FileRepositoryBase.cs similarity index 93% rename from src/Common/H.LowCode.Repository.JsonFile/Base/FileRepositoryBase.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Base/FileRepositoryBase.cs index 275348e3..c4eef644 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/Base/FileRepositoryBase.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Base/FileRepositoryBase.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.Repository.JsonFile; +namespace H.LowCode.DesignEngine.Repository.JsonFile; public abstract class FileRepositoryBase { diff --git a/src/Common/H.LowCode.Repository.JsonFile/Base/PartsFileRepositoryBase.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Base/PartsFileRepositoryBase.cs similarity index 93% rename from src/Common/H.LowCode.Repository.JsonFile/Base/PartsFileRepositoryBase.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Base/PartsFileRepositoryBase.cs index 740533af..134ee707 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/Base/PartsFileRepositoryBase.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Base/PartsFileRepositoryBase.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.Repository.JsonFile; +namespace H.LowCode.DesignEngine.Repository.JsonFile; public abstract class PartsFileRepositoryBase { diff --git a/src/Common/H.LowCode.Repository.JsonFile/MetaJsonFileRepositoryModule.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/DesignEngineJsonFileRepositoryModule.cs similarity index 77% rename from src/Common/H.LowCode.Repository.JsonFile/MetaJsonFileRepositoryModule.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/DesignEngineJsonFileRepositoryModule.cs index 094b3c61..f5708b62 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/MetaJsonFileRepositoryModule.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/DesignEngineJsonFileRepositoryModule.cs @@ -1,13 +1,13 @@ using H.LowCode.Configuration; -using H.LowCode.Domain; -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain; +using H.LowCode.DesignEngine.Domain.Repositories; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Modularity; -namespace H.LowCode.Repository.JsonFile; +namespace H.LowCode.DesignEngine.Repository.JsonFile; -[DependsOn(typeof(LowCodeDomainModule))] -public class MetaJsonFileRepositoryModule : AbpModule +[DependsOn(typeof(DesignEngineDomainModule))] +public class DesignEngineJsonFileRepositoryModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { diff --git a/src/Common/H.LowCode.Repository.RemoteService/H.LowCode.Repository.RemoteService.csproj b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/H.LowCode.DesignEngine.Repository.JsonFile.csproj similarity index 48% rename from src/Common/H.LowCode.Repository.RemoteService/H.LowCode.Repository.RemoteService.csproj rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/H.LowCode.DesignEngine.Repository.JsonFile.csproj index 14e81e50..4c08f036 100644 --- a/src/Common/H.LowCode.Repository.RemoteService/H.LowCode.Repository.RemoteService.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/H.LowCode.DesignEngine.Repository.JsonFile.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentLibraryRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/PartsRepositories/ComponentLibraryRepository.cs similarity index 96% rename from src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentLibraryRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/PartsRepositories/ComponentLibraryRepository.cs index f70a3bf7..dd05c3c5 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentLibraryRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/PartsRepositories/ComponentLibraryRepository.cs @@ -1,6 +1,6 @@ using H.LowCode.Configuration; using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain.Repositories; using H.LowCode.MetaSchema; using H.LowCode.MetaSchema.DesignEngine; using Microsoft.Extensions.Options; @@ -11,7 +11,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.Repository.JsonFile; +namespace H.LowCode.DesignEngine.Repository.JsonFile; public class ComponentLibraryRepository : PartsFileRepositoryBase, IComponentLibraryRepository { diff --git a/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs similarity index 97% rename from src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs index ec70da52..bea15b83 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/PartsRepositories/ComponentPartsRepository.cs @@ -1,6 +1,6 @@ using H.LowCode.Configuration; using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain.Repositories; using H.LowCode.MetaSchema; using H.LowCode.MetaSchema.DesignEngine; using Microsoft.Extensions.Options; @@ -10,7 +10,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.Repository.JsonFile; +namespace H.LowCode.DesignEngine.Repository.JsonFile; public class ComponentPartsRepository : PartsFileRepositoryBase, IComponentPartsRepository { diff --git a/src/Common/H.LowCode.Repository.JsonFile/Repositories/AppFileRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Repositories/AppFileRepository.cs similarity index 77% rename from src/Common/H.LowCode.Repository.JsonFile/Repositories/AppFileRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Repositories/AppFileRepository.cs index 21bbfdef..5b194064 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/Repositories/AppFileRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Repositories/AppFileRepository.cs @@ -1,11 +1,12 @@ using H.LowCode.Configuration; -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain.Repositories; using H.LowCode.MetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using Microsoft.Extensions.Options; using System.Collections.Generic; using System.Text; -namespace H.LowCode.Repository.JsonFile; +namespace H.LowCode.DesignEngine.Repository.JsonFile; public class AppFileRepository : FileRepositoryBase, IAppRepository { @@ -16,9 +17,9 @@ public class AppFileRepository : FileRepositoryBase, IAppRepository } - public async Task> GetListAsync() + public async Task> GetListAsync() { - List appSchemas = []; + List appSchemas = []; if (Directory.Exists(_metaBaseDir) == false) return appSchemas; @@ -33,14 +34,14 @@ public class AppFileRepository : FileRepositoryBase, IAppRepository continue; var appSchemaJson = ReadAllText(fileName); - var appSchema = appSchemaJson.FromJson(); + var appSchema = appSchemaJson.FromJson(); appSchemas.Add(appSchema); } return await Task.FromResult(appSchemas); } - public async Task SaveAsync(AppSchema appSchema) + public async Task SaveAsync(AppPartsSchema appSchema) { ArgumentNullException.ThrowIfNull(appSchema); ArgumentException.ThrowIfNullOrEmpty(appSchema.Id); @@ -57,12 +58,12 @@ public class AppFileRepository : FileRepositoryBase, IAppRepository await Task.CompletedTask; } - public async Task GetAsync(string appId) + public async Task GetAsync(string appId) { string fileName = string.Format(appFileName_Format, _metaBaseDir, appId, appId); var appSchemaJson = ReadAllText(fileName); - var appSchema = appSchemaJson.FromJson(); + var appSchema = appSchemaJson.FromJson(); return await Task.FromResult(appSchema); } } diff --git a/src/Common/H.LowCode.Repository.JsonFile/Repositories/DataSourceFileRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Repositories/DataSourceFileRepository.cs similarity index 96% rename from src/Common/H.LowCode.Repository.JsonFile/Repositories/DataSourceFileRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Repositories/DataSourceFileRepository.cs index 939569ea..b1e1c420 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/Repositories/DataSourceFileRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Repositories/DataSourceFileRepository.cs @@ -1,11 +1,11 @@ using H.LowCode.Configuration; -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain.Repositories; using H.LowCode.MetaSchema; using Microsoft.Extensions.Options; using System.Collections.Generic; using System.Text; -namespace H.LowCode.Repository.JsonFile; +namespace H.LowCode.DesignEngine.Repository.JsonFile; public class DataSourceFileRepository : FileRepositoryBase, IDataSourceRepository { diff --git a/src/Common/H.LowCode.Repository.JsonFile/Repositories/MenuFileRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Repositories/MenuFileRepository.cs similarity index 97% rename from src/Common/H.LowCode.Repository.JsonFile/Repositories/MenuFileRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Repositories/MenuFileRepository.cs index cebbe94f..c62a52f0 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/Repositories/MenuFileRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Repositories/MenuFileRepository.cs @@ -1,11 +1,11 @@ using H.LowCode.Configuration; -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain.Repositories; using H.LowCode.MetaSchema; using Microsoft.Extensions.Options; using System.Collections.Generic; using System.Text; -namespace H.LowCode.Repository.JsonFile; +namespace H.LowCode.DesignEngine.Repository.JsonFile; public class MenuFileRepository : FileRepositoryBase, IMenuRepository { diff --git a/src/Common/H.LowCode.Repository.JsonFile/Repositories/PageFileRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Repositories/PageFileRepository.cs similarity index 69% rename from src/Common/H.LowCode.Repository.JsonFile/Repositories/PageFileRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Repositories/PageFileRepository.cs index 400945e7..384975aa 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/Repositories/PageFileRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.JsonFile/Repositories/PageFileRepository.cs @@ -1,12 +1,11 @@ using H.LowCode.Configuration; using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain.Repositories; -using H.LowCode.MetaSchema; +using H.LowCode.DesignEngine.Domain.Repositories; +using H.LowCode.MetaSchema.DesignEngine; using Microsoft.Extensions.Options; -using System.Collections.Generic; using System.Text; -namespace H.LowCode.Repository.JsonFile; +namespace H.LowCode.DesignEngine.Repository.JsonFile; public class PageFileRepository : FileRepositoryBase, IPageRepository { @@ -29,7 +28,7 @@ public class PageFileRepository : FileRepositoryBase, IPageRepository foreach (var fileName in files) { var pageSchemaJson = ReadAllText(fileName); - var pageSchema = pageSchemaJson.FromJson(); + var pageSchema = pageSchemaJson.FromJson(); PageListModel model = new() { @@ -50,16 +49,16 @@ public class PageFileRepository : FileRepositoryBase, IPageRepository return await Task.FromResult(list); } - public async Task GetAsync(string appId, string pageId) + public Task GetByIdAsync(string appId, string pageId) { string fileName = string.Format(pageFileName_Format, _metaBaseDir, appId, pageId); var pageSchemaJson = ReadAllText(fileName); - var pageSchema = pageSchemaJson.FromJson(); - return await Task.FromResult(pageSchema); + var pageSchema = pageSchemaJson.FromJson(); + return Task.FromResult(pageSchema); } - public async Task SaveAsync(PageSchema pageSchema) + public Task SaveAsync(PagePartsSchema pageSchema) { ArgumentNullException.ThrowIfNull(pageSchema); ArgumentException.ThrowIfNullOrEmpty(pageSchema.Id); @@ -73,16 +72,26 @@ public class PageFileRepository : FileRepositoryBase, IPageRepository Directory.CreateDirectory(fileDirectory); File.WriteAllText(fileName, pageSchema.ToJson(), Encoding.UTF8); - await Task.CompletedTask; + return Task.CompletedTask; } - public async Task DeleteAsync(string appId, string pageId) + public Task GetAsync(string appId, string pageId) + { + string fileName = string.Format(pageFileName_Format, _metaBaseDir, appId, pageId); + + var pageSchemaJson = ReadAllText(fileName); + var pageSchema = pageSchemaJson.FromJson(); + + return Task.FromResult(pageSchema); + } + + public Task DeleteAsync(string appId, string pageId) { string fileName = string.Format(pageFileName_Format, _metaBaseDir, appId, pageId); if (!File.Exists(fileName)) - return; + return Task.CompletedTask; File.Delete(fileName); - await Task.CompletedTask; + return Task.CompletedTask; } } diff --git a/src/Common/H.LowCode.Repository.RemoteService/Base/RemoteServiceRepositoryBase.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Base/RemoteServiceRepositoryBase.cs similarity index 74% rename from src/Common/H.LowCode.Repository.RemoteService/Base/RemoteServiceRepositoryBase.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Base/RemoteServiceRepositoryBase.cs index 2533450e..24f34c1d 100644 --- a/src/Common/H.LowCode.Repository.RemoteService/Base/RemoteServiceRepositoryBase.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Base/RemoteServiceRepositoryBase.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.Repository.RemoteService; +namespace H.LowCode.DesignEngine.Repository.RemoteService; public abstract class RemoteServiceRepositoryBase { diff --git a/src/Common/H.LowCode.Repository.RemoteService/MetaRemoteServiceModule.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/DesignEngineRemoteServiceRepositoryModule.cs similarity index 66% rename from src/Common/H.LowCode.Repository.RemoteService/MetaRemoteServiceModule.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/DesignEngineRemoteServiceRepositoryModule.cs index 417be7a1..8d6e99d3 100644 --- a/src/Common/H.LowCode.Repository.RemoteService/MetaRemoteServiceModule.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/DesignEngineRemoteServiceRepositoryModule.cs @@ -1,12 +1,12 @@ -using H.LowCode.Domain; -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain; +using H.LowCode.DesignEngine.Domain.Repositories; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Modularity; -namespace H.LowCode.Repository.RemoteService; +namespace H.LowCode.DesignEngine.Repository.RemoteService; -[DependsOn(typeof(LowCodeDomainModule))] -public class MetaRemoteServiceModule : AbpModule +[DependsOn(typeof(DesignEngineDomainModule))] +public class DesignEngineRemoteServiceRepositoryModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/H.LowCode.DesignEngine.Repository.RemoteService.csproj b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/H.LowCode.DesignEngine.Repository.RemoteService.csproj new file mode 100644 index 00000000..4c08f036 --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/H.LowCode.DesignEngine.Repository.RemoteService.csproj @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Repositories/AppRemoteServiceRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Repositories/AppRemoteServiceRepository.cs new file mode 100644 index 00000000..a48cfc87 --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Repositories/AppRemoteServiceRepository.cs @@ -0,0 +1,33 @@ +using H.LowCode.Configuration; +using H.LowCode.DesignEngine.Domain.Repositories; +using H.LowCode.MetaSchema.DesignEngine; +using Microsoft.Extensions.Options; +using System.Collections.Generic; +using System.Text; + +namespace H.LowCode.DesignEngine.Repository.RemoteService; + +public class AppRemoteServiceRepository : RemoteServiceRepositoryBase, IAppRepository +{ + public AppRemoteServiceRepository(IOptions metaOption) + { + + } + + public bool? IsChangeTrackingEnabled => false; + + public Task GetAsync(string appId) + { + throw new NotImplementedException(); + } + + public Task> GetListAsync() + { + throw new NotImplementedException(); + } + + public Task SaveAsync(AppPartsSchema appSchema) + { + throw new NotImplementedException(); + } +} diff --git a/src/Common/H.LowCode.Repository.RemoteService/Repositories/DataSourceRemoteServiceRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Repositories/DataSourceRemoteServiceRepository.cs similarity index 89% rename from src/Common/H.LowCode.Repository.RemoteService/Repositories/DataSourceRemoteServiceRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Repositories/DataSourceRemoteServiceRepository.cs index a05bd110..a6b0d06c 100644 --- a/src/Common/H.LowCode.Repository.RemoteService/Repositories/DataSourceRemoteServiceRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Repositories/DataSourceRemoteServiceRepository.cs @@ -1,12 +1,12 @@ using H.LowCode.Configuration; using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain.Repositories; using H.LowCode.MetaSchema; using Microsoft.Extensions.Options; using System.Collections.Generic; using System.Text; -namespace H.LowCode.Repository.RemoteService; +namespace H.LowCode.DesignEngine.Repository.RemoteService; public class DataSourceRemoteServiceRepository : RemoteServiceRepositoryBase, IDataSourceRepository { diff --git a/src/Common/H.LowCode.Repository.RemoteService/Repositories/MenuRemoteServiceRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Repositories/MenuRemoteServiceRepository.cs similarity index 88% rename from src/Common/H.LowCode.Repository.RemoteService/Repositories/MenuRemoteServiceRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Repositories/MenuRemoteServiceRepository.cs index b10664b0..f9bf1df5 100644 --- a/src/Common/H.LowCode.Repository.RemoteService/Repositories/MenuRemoteServiceRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Repositories/MenuRemoteServiceRepository.cs @@ -1,11 +1,11 @@ using H.LowCode.Configuration; -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain.Repositories; using H.LowCode.MetaSchema; using Microsoft.Extensions.Options; using System.Collections.Generic; using System.Text; -namespace H.LowCode.Repository.RemoteService; +namespace H.LowCode.DesignEngine.Repository.RemoteService; public class MenuRemoteServiceRepository : RemoteServiceRepositoryBase, IMenuRepository { diff --git a/src/Common/H.LowCode.Repository.RemoteService/Repositories/PageRemoteServiceRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Repositories/PageRemoteServiceRepository.cs similarity index 53% rename from src/Common/H.LowCode.Repository.RemoteService/Repositories/PageRemoteServiceRepository.cs rename to src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Repositories/PageRemoteServiceRepository.cs index fa8983ec..7cdbaf6b 100644 --- a/src/Common/H.LowCode.Repository.RemoteService/Repositories/PageRemoteServiceRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Repository.RemoteService/Repositories/PageRemoteServiceRepository.cs @@ -1,12 +1,13 @@ using H.LowCode.Configuration; using H.LowCode.DesignEngine.Model; -using H.LowCode.Domain.Repositories; +using H.LowCode.DesignEngine.Domain.Repositories; using H.LowCode.MetaSchema; +using H.LowCode.MetaSchema.DesignEngine; using Microsoft.Extensions.Options; using System.Collections.Generic; using System.Text; -namespace H.LowCode.Repository.RemoteService; +namespace H.LowCode.DesignEngine.Repository.RemoteService; public class PageRemoteServiceRepository : RemoteServiceRepositoryBase, IPageRepository { @@ -15,22 +16,27 @@ public class PageRemoteServiceRepository : RemoteServiceRepositoryBase, IPageRep } - public async Task DeleteAsync(string appId, string pageId) + public Task> GetListAsync(string appId) { throw new NotImplementedException(); } - public async Task GetAsync(string appId, string pageId) + public Task GetByIdAsync(string appId, string pageId) { throw new NotImplementedException(); } - public async Task> GetListAsync(string appId) + public Task SaveAsync(PagePartsSchema pageSchema) { throw new NotImplementedException(); } - public async Task SaveAsync(PageSchema pageSchema) + public Task GetAsync(string appId, string pageId) + { + throw new NotImplementedException(); + } + + public Task DeleteAsync(string appId, string pageId) { throw new NotImplementedException(); } diff --git a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DesignPanel.razor b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DesignPanel.razor index 6ddc60ad..20cf676e 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DesignPanel.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/DesignPanel.razor @@ -46,7 +46,7 @@ return rootComponent; } - public async Task ReloadAsync(PageSchema pageSchema) + public async Task ReloadAsync(PagePartsSchema pageSchema) { var rootComponent = DragDropStateService.GetRootComponent(PageCascading.AppId, PageCascading.PageId); if (pageSchema != null && rootComponent != null) diff --git a/src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignPage.razor b/src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignPage.razor index 872adef1..b809861e 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignPage.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/Pages/DesignPage.razor @@ -54,7 +54,7 @@ private DesignPanel _designPanel; - private PageSchema _pageSchema; + private PagePartsSchema _pageSchema; private PageCascadingModel _pageCascadingModel; private bool _isNewPage; @@ -68,12 +68,12 @@ await base.OnInitializedAsync(); } - private async Task LoadPageSchemaAsync() + private async Task LoadPageSchemaAsync() { if (string.Equals("_new", PageId)) { _isNewPage = true; - var newPage = new PageSchema() { AppId = AppId, Name = "newpage" }; + var newPage = new PagePartsSchema() { AppId = AppId, Name = "newpage" }; PageId = newPage.Id; DragDropStateService.SetPage(AppId, newPage); @@ -93,7 +93,7 @@ private async Task SavePageSchemaAsync() { - PageSchema pageSchema = CreatePageSchema(); + PagePartsSchema pageSchema = CreatePageSchema(); if (pageSchema.Components.Count == 0) { await _message.Warning("没有任何组件,禁止保存!"); @@ -117,12 +117,12 @@ } } - private PageSchema CreatePageSchema() + private PagePartsSchema CreatePageSchema() { if (_pageSchema == null) throw new NullReferenceException(nameof(_pageSchema)); - var components = new List(); + var components = new List(); var partsComponents = DragDropStateService.GetRootComponent(_pageSchema.AppId, _pageSchema.Id).Childrens; foreach (var partsComponent in partsComponents) { @@ -134,7 +134,7 @@ return _pageSchema; } - private void SetPageCascadingModel(PageSchema pageSchema) + private void SetPageCascadingModel(PagePartsSchema pageSchema) { _pageCascadingModel.PageName = pageSchema.Name; _pageCascadingModel.PageLayout = pageSchema.PageProperty.PageLayout; diff --git a/src/DesignEngine/H.LowCode.DesignEngine/Services/DragDropStateService.cs b/src/DesignEngine/H.LowCode.DesignEngine/Services/DragDropStateService.cs index dabe6057..870f1219 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/Services/DragDropStateService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine/Services/DragDropStateService.cs @@ -25,13 +25,13 @@ internal class DragDropStateService }); } - public PageSchema GetPage(string appId, string pageId) + public PagePartsSchema GetPage(string appId, string pageId) { var stateSchema = GetStateSchema(appId, pageId); return stateSchema?.Page; } - public void SetPage(string appId, PageSchema page) + public void SetPage(string appId, PagePartsSchema page) { SetStateSchema(appId, page.Id, (stateSchema) => { stateSchema.Page = page; @@ -195,7 +195,7 @@ public class DragDropStateSchema /// public ComponentPartsSchema RootComponent { get; set; } - public PageSchema Page { get; set; } + public PagePartsSchema Page { get; set; } /// /// 最后选中对象 diff --git a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/EventSetting.razor b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/EventSetting.razor index cef57959..255c1e2a 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/EventSetting.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/EventSetting.razor @@ -52,7 +52,7 @@ @code { [Parameter] - public ComponentSchema Component { get; set; } + public ComponentPartsSchema Component { get; set; } private bool _visible; private string _selectedValue; diff --git a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PageSetting.razor b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PageSetting.razor index 2a4d294f..07ba1bf9 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PageSetting.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PageSetting.razor @@ -41,7 +41,7 @@ @code { [Parameter] - public PageSchema Page { get; set; } + public PagePartsSchema Page { get; set; } protected override async Task OnInitializedAsync() { diff --git a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/SettingPanel.razor b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/SettingPanel.razor index 17e3034c..feb4eac4 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/SettingPanel.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/SettingPanel.razor @@ -27,7 +27,7 @@ @code { [Parameter] - public PageSchema Page { get; set; } + public PagePartsSchema Page { get; set; } private ComponentPartsSchema _component { get; set; } diff --git a/src/DesignEngine/H.LowCode.MyApp/Layout/MyAppLayout.razor b/src/DesignEngine/H.LowCode.MyApp/Layout/MyAppLayout.razor index c251db00..dec7ce90 100644 --- a/src/DesignEngine/H.LowCode.MyApp/Layout/MyAppLayout.razor +++ b/src/DesignEngine/H.LowCode.MyApp/Layout/MyAppLayout.razor @@ -3,7 +3,7 @@ @inject IAppApplicationService AppApplicationService @inject ComponentState MenuDataState -@inject ComponentState AppState +@inject ComponentState AppState @@ -26,14 +26,14 @@ @code { - private AppSchema _appSchema; + private AppPartsSchema _appSchema; private MenuDataItem[] _menuDataItems; protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); - _appSchema = await AppState.GetOrAddAsync(typeof(AppSchema), async () => + _appSchema = await AppState.GetOrAddAsync(typeof(AppPartsSchema), async () => { return await GetAppSchemaAsync(AppId); }); @@ -44,7 +44,7 @@ }); } - private async Task GetAppSchemaAsync(string appId) + private async Task GetAppSchemaAsync(string appId) { return await AppApplicationService.GetByIdAsync(appId); } diff --git a/src/DesignEngine/H.LowCode.MyApp/Pages/PageManager.razor b/src/DesignEngine/H.LowCode.MyApp/Pages/PageManager.razor index 7fa7c0b6..0b4bfc3a 100644 --- a/src/DesignEngine/H.LowCode.MyApp/Pages/PageManager.razor +++ b/src/DesignEngine/H.LowCode.MyApp/Pages/PageManager.razor @@ -93,9 +93,9 @@ int _total = 0; private bool _visible; - private Form _form; + private Form _form; private IList _pageList; - private PageSchema _pageSchema = new PageSchema(); + private PagePartsSchema _pageSchema = new PagePartsSchema(); protected override async Task OnInitializedAsync() { @@ -113,14 +113,14 @@ return await PageAppService.GetListAsync(AppId); } - private async Task GetPageAsync(string pageId) + private async Task GetPageAsync(string pageId) { return await PageAppService.GetByIdAsync(AppId, pageId); } private void CreateAsync(string parentId) { - _pageSchema = new PageSchema(); + _pageSchema = new PagePartsSchema(); _pageSchema.AppId = AppId; _visible = true; diff --git a/src/DesignEngine/H.LowCode.MyApp/_Imports.razor b/src/DesignEngine/H.LowCode.MyApp/_Imports.razor index baec138a..ece2d4df 100644 --- a/src/DesignEngine/H.LowCode.MyApp/_Imports.razor +++ b/src/DesignEngine/H.LowCode.MyApp/_Imports.razor @@ -15,5 +15,6 @@ @using H.LowCode.DesignEngine.Model @using H.LowCode.DesignEngine.Application.Contracts @using H.LowCode.MetaSchema +@using H.LowCode.MetaSchema.DesignEngine @using H.Util.Blazor @using H.Util.Ids \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentDesignPanel.razor b/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentDesignPanel.razor index c867f97b..ef5a3493 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentDesignPanel.razor +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentDesignPanel.razor @@ -32,7 +32,7 @@ return rootComponent; } - public void Reload(PageSchema pageSchema) + public void Reload(PagePartsSchema pageSchema) { // if (pageSchema != null && DragDropStateService.GetRootComponent(PageCascading.AppId, PageCascading.PageId) != null) // DragDropStateService.GetRootComponent(PageCascading.AppId, PageCascading.PageId).Childrens = pageSchema.Components; diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/PageDesignPanel.razor b/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/PageDesignPanel.razor index 9d0a8c17..7bd7acd7 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/PageDesignPanel.razor +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/PageDesignPanel.razor @@ -38,7 +38,7 @@ return rootComponent; } - public void Reload(PageSchema pageSchema) + public void Reload(PagePartsSchema pageSchema) { var rootComponent = DragDropStateService.GetRootComponent(PageCascading.AppId, PageCascading.PageId); if (pageSchema != null && rootComponent != null) diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/Services/DragDropStateService.cs b/src/DesignEngine/H.LowCode.PartsDesignEngine/Services/DragDropStateService.cs index a0df0f92..e7b815f8 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/Services/DragDropStateService.cs +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/Services/DragDropStateService.cs @@ -25,13 +25,13 @@ internal class DragDropStateService }); } - public PageSchema GetPage(string appId, string pageId) + public PagePartsSchema GetPage(string appId, string pageId) { var stateSchema = GetStateSchema(appId, pageId); return stateSchema?.Page; } - public void SetPage(string appId, PageSchema page) + public void SetPage(string appId, PagePartsSchema page) { SetStateSchema(appId, page.Id, (stateSchema) => { stateSchema.Page = page; @@ -208,7 +208,7 @@ public class DragDropStateSchema /// public ComponentPartsSchema RootComponent { get; set; } - public PageSchema Page { get; set; } + public PagePartsSchema Page { get; set; } public PagePropertySchema GlobalPageProperty { get; set; } = new PagePropertySchema(); diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/MyApps.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyApps.razor index 6ce94474..d5d183d4 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/MyApps.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/MyApps.razor @@ -77,7 +77,7 @@ @code { private IList _appList; - private AppSchema _currentApp; + private AppPartsSchema _currentApp; private bool _createVisible = false; private bool _editVisible = false; diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/MyApps/AppForm.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyApps/AppForm.razor index dcb7f0e0..b2929beb 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/MyApps/AppForm.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/MyApps/AppForm.razor @@ -23,12 +23,12 @@ ValidateOnChange="true"> @code { [Parameter] - public AppSchema AppSchema { get; set; } + public AppPartsSchema AppSchema { get; set; } [Parameter] public Action OnSubmit { get; set; } - private Form _form; + private Form _form; protected override async Task OnInitializedAsync() { diff --git a/src/H.LowCode.sln b/src/H.LowCode.sln index 09f88a0c..947fa1f9 100644 --- a/src/H.LowCode.sln +++ b/src/H.LowCode.sln @@ -76,18 +76,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.Workbench", "Desi EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{F3ABC418-7234-4DBA-8A5A-6B286A25B8AD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.EntityFrameworkCore", "Common\H.LowCode.EntityFrameworkCore\H.LowCode.EntityFrameworkCore.csproj", "{A391DFA4-5A2F-4F2A-8F18-3C8CF8C14AF6}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{A63C9652-517D-4BC3-B935-74D946AB0761}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.ComponentBase", "Common\H.LowCode.ComponentBase\H.LowCode.ComponentBase.csproj", "{43C23BD6-6228-4C41-BD73-FC1508178F33}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.Domain", "Common\H.LowCode.Domain\H.LowCode.Domain.csproj", "{B5DF90B8-4AF8-45D1-96A8-E2EF2CCA5143}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.Repository.JsonFile", "Common\H.LowCode.Repository.JsonFile\H.LowCode.Repository.JsonFile.csproj", "{6E1CDA97-1596-4C6A-B00C-824EA1F100FB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.Repository.RemoteService", "Common\H.LowCode.Repository.RemoteService\H.LowCode.Repository.RemoteService.csproj", "{50777BAC-2866-4C95-B232-D7A9458172D9}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.DbMigrator", "Tools\H.LowCode.DbMigrator\H.LowCode.DbMigrator.csproj", "{F33C7AB6-CA4B-4254-9A75-D803FEDE0CB4}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DesignEngine", "DesignEngine", "{A32809CE-52C6-4E00-92D3-76903D8D9C61}" @@ -98,6 +90,22 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.MetaSchema.Design EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.MetaSchema.RenderEngine", "Protocol\H.LowCode.MetaSchema.RenderEngine\H.LowCode.MetaSchema.RenderEngine.csproj", "{AFC84C58-A075-45C3-BA33-609F067B471A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.DesignEngine.Domain", "DesignEngine\H.LowCode.DesignEngine.Domain\H.LowCode.DesignEngine.Domain.csproj", "{94346EE6-3FD9-4B41-9865-FA8600F99BC2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.RenderEngine.Domain", "RenderEngine\H.LowCode.RenderEngine.Domain\H.LowCode.RenderEngine.Domain.csproj", "{17506986-EDF2-4D77-BD9D-7C222F621CFF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.DesignEngine.Repository.JsonFile", "DesignEngine\H.LowCode.DesignEngine.Repository.JsonFile\H.LowCode.DesignEngine.Repository.JsonFile.csproj", "{B0125071-4C28-413C-B244-8D72C91A2EC0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.DesignEngine.Repository.RemoteService", "DesignEngine\H.LowCode.DesignEngine.Repository.RemoteService\H.LowCode.DesignEngine.Repository.RemoteService.csproj", "{8E27C95F-B55E-48A3-86CB-7655EAD45CC2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.DesignEngine.EntityFrameworkCore", "DesignEngine\H.LowCode.DesignEngine.EntityFrameworkCore\H.LowCode.DesignEngine.EntityFrameworkCore.csproj", "{92DECAF2-485F-490C-980C-D3F22BB55048}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.RenderEngine.EntityFrameworkCore", "RenderEngine\H.LowCode.RenderEngine.EntityFrameworkCore\H.LowCode.RenderEngine.EntityFrameworkCore.csproj", "{71A10A51-EC26-45F9-A122-BF9D9DAAD28D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.RenderEngine.Repository.JsonFile", "RenderEngine\H.LowCode.RenderEngine.Repository.JsonFile\H.LowCode.RenderEngine.Repository.JsonFile.csproj", "{0CD501D8-1151-4850-8AD4-25920EDFA781}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.RenderEngine.Repository.RemoteService", "RenderEngine\H.LowCode.RenderEngine.Repository.RemoteService\H.LowCode.RenderEngine.Repository.RemoteService.csproj", "{637464B4-18A5-4111-966E-33936516CEC8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -188,26 +196,10 @@ Global {DE9247F1-BABC-4098-A928-960E8E4EC20E}.Debug|Any CPU.Build.0 = Debug|Any CPU {DE9247F1-BABC-4098-A928-960E8E4EC20E}.Release|Any CPU.ActiveCfg = Release|Any CPU {DE9247F1-BABC-4098-A928-960E8E4EC20E}.Release|Any CPU.Build.0 = Release|Any CPU - {A391DFA4-5A2F-4F2A-8F18-3C8CF8C14AF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A391DFA4-5A2F-4F2A-8F18-3C8CF8C14AF6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A391DFA4-5A2F-4F2A-8F18-3C8CF8C14AF6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A391DFA4-5A2F-4F2A-8F18-3C8CF8C14AF6}.Release|Any CPU.Build.0 = Release|Any CPU {43C23BD6-6228-4C41-BD73-FC1508178F33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {43C23BD6-6228-4C41-BD73-FC1508178F33}.Debug|Any CPU.Build.0 = Debug|Any CPU {43C23BD6-6228-4C41-BD73-FC1508178F33}.Release|Any CPU.ActiveCfg = Release|Any CPU {43C23BD6-6228-4C41-BD73-FC1508178F33}.Release|Any CPU.Build.0 = Release|Any CPU - {B5DF90B8-4AF8-45D1-96A8-E2EF2CCA5143}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B5DF90B8-4AF8-45D1-96A8-E2EF2CCA5143}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B5DF90B8-4AF8-45D1-96A8-E2EF2CCA5143}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B5DF90B8-4AF8-45D1-96A8-E2EF2CCA5143}.Release|Any CPU.Build.0 = Release|Any CPU - {6E1CDA97-1596-4C6A-B00C-824EA1F100FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E1CDA97-1596-4C6A-B00C-824EA1F100FB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E1CDA97-1596-4C6A-B00C-824EA1F100FB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E1CDA97-1596-4C6A-B00C-824EA1F100FB}.Release|Any CPU.Build.0 = Release|Any CPU - {50777BAC-2866-4C95-B232-D7A9458172D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {50777BAC-2866-4C95-B232-D7A9458172D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {50777BAC-2866-4C95-B232-D7A9458172D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {50777BAC-2866-4C95-B232-D7A9458172D9}.Release|Any CPU.Build.0 = Release|Any CPU {F33C7AB6-CA4B-4254-9A75-D803FEDE0CB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F33C7AB6-CA4B-4254-9A75-D803FEDE0CB4}.Debug|Any CPU.Build.0 = Debug|Any CPU {F33C7AB6-CA4B-4254-9A75-D803FEDE0CB4}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -224,6 +216,38 @@ Global {AFC84C58-A075-45C3-BA33-609F067B471A}.Debug|Any CPU.Build.0 = Debug|Any CPU {AFC84C58-A075-45C3-BA33-609F067B471A}.Release|Any CPU.ActiveCfg = Release|Any CPU {AFC84C58-A075-45C3-BA33-609F067B471A}.Release|Any CPU.Build.0 = Release|Any CPU + {94346EE6-3FD9-4B41-9865-FA8600F99BC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {94346EE6-3FD9-4B41-9865-FA8600F99BC2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {94346EE6-3FD9-4B41-9865-FA8600F99BC2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {94346EE6-3FD9-4B41-9865-FA8600F99BC2}.Release|Any CPU.Build.0 = Release|Any CPU + {17506986-EDF2-4D77-BD9D-7C222F621CFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {17506986-EDF2-4D77-BD9D-7C222F621CFF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {17506986-EDF2-4D77-BD9D-7C222F621CFF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {17506986-EDF2-4D77-BD9D-7C222F621CFF}.Release|Any CPU.Build.0 = Release|Any CPU + {B0125071-4C28-413C-B244-8D72C91A2EC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0125071-4C28-413C-B244-8D72C91A2EC0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0125071-4C28-413C-B244-8D72C91A2EC0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0125071-4C28-413C-B244-8D72C91A2EC0}.Release|Any CPU.Build.0 = Release|Any CPU + {8E27C95F-B55E-48A3-86CB-7655EAD45CC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8E27C95F-B55E-48A3-86CB-7655EAD45CC2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8E27C95F-B55E-48A3-86CB-7655EAD45CC2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8E27C95F-B55E-48A3-86CB-7655EAD45CC2}.Release|Any CPU.Build.0 = Release|Any CPU + {92DECAF2-485F-490C-980C-D3F22BB55048}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {92DECAF2-485F-490C-980C-D3F22BB55048}.Debug|Any CPU.Build.0 = Debug|Any CPU + {92DECAF2-485F-490C-980C-D3F22BB55048}.Release|Any CPU.ActiveCfg = Release|Any CPU + {92DECAF2-485F-490C-980C-D3F22BB55048}.Release|Any CPU.Build.0 = Release|Any CPU + {71A10A51-EC26-45F9-A122-BF9D9DAAD28D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {71A10A51-EC26-45F9-A122-BF9D9DAAD28D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {71A10A51-EC26-45F9-A122-BF9D9DAAD28D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {71A10A51-EC26-45F9-A122-BF9D9DAAD28D}.Release|Any CPU.Build.0 = Release|Any CPU + {0CD501D8-1151-4850-8AD4-25920EDFA781}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0CD501D8-1151-4850-8AD4-25920EDFA781}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0CD501D8-1151-4850-8AD4-25920EDFA781}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0CD501D8-1151-4850-8AD4-25920EDFA781}.Release|Any CPU.Build.0 = Release|Any CPU + {637464B4-18A5-4111-966E-33936516CEC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {637464B4-18A5-4111-966E-33936516CEC8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {637464B4-18A5-4111-966E-33936516CEC8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {637464B4-18A5-4111-966E-33936516CEC8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -256,16 +280,20 @@ Global {4630AE17-4522-491A-BC9D-91BF522CBFA5} = {89FE3DE3-2E58-4835-A476-CA2E309A1B3F} {4D070ACB-8367-4889-806E-FA6EEA0D6A67} = {7E5B26AA-4F89-4B8C-B743-AE3F04C9DD58} {DE9247F1-BABC-4098-A928-960E8E4EC20E} = {4D070ACB-8367-4889-806E-FA6EEA0D6A67} - {A391DFA4-5A2F-4F2A-8F18-3C8CF8C14AF6} = {A63C9652-517D-4BC3-B935-74D946AB0761} {43C23BD6-6228-4C41-BD73-FC1508178F33} = {A63C9652-517D-4BC3-B935-74D946AB0761} - {B5DF90B8-4AF8-45D1-96A8-E2EF2CCA5143} = {A63C9652-517D-4BC3-B935-74D946AB0761} - {6E1CDA97-1596-4C6A-B00C-824EA1F100FB} = {A63C9652-517D-4BC3-B935-74D946AB0761} - {50777BAC-2866-4C95-B232-D7A9458172D9} = {A63C9652-517D-4BC3-B935-74D946AB0761} {F33C7AB6-CA4B-4254-9A75-D803FEDE0CB4} = {F3ABC418-7234-4DBA-8A5A-6B286A25B8AD} {A32809CE-52C6-4E00-92D3-76903D8D9C61} = {7E5B26AA-4F89-4B8C-B743-AE3F04C9DD58} {1BF619BF-4992-46CC-B831-8E3ABA9A435A} = {4E9BFDA3-AFC6-41F3-817C-FD9E82322BDA} {E1C86933-B2F8-4C53-BF19-AE67A206B00A} = {4E9BFDA3-AFC6-41F3-817C-FD9E82322BDA} {AFC84C58-A075-45C3-BA33-609F067B471A} = {4E9BFDA3-AFC6-41F3-817C-FD9E82322BDA} + {94346EE6-3FD9-4B41-9865-FA8600F99BC2} = {B8524D2C-164A-46A1-83A3-5F47BC645B01} + {17506986-EDF2-4D77-BD9D-7C222F621CFF} = {240CD8ED-49F9-47E0-91B1-B170252E5437} + {B0125071-4C28-413C-B244-8D72C91A2EC0} = {B8524D2C-164A-46A1-83A3-5F47BC645B01} + {8E27C95F-B55E-48A3-86CB-7655EAD45CC2} = {B8524D2C-164A-46A1-83A3-5F47BC645B01} + {92DECAF2-485F-490C-980C-D3F22BB55048} = {B8524D2C-164A-46A1-83A3-5F47BC645B01} + {71A10A51-EC26-45F9-A122-BF9D9DAAD28D} = {240CD8ED-49F9-47E0-91B1-B170252E5437} + {0CD501D8-1151-4850-8AD4-25920EDFA781} = {240CD8ED-49F9-47E0-91B1-B170252E5437} + {637464B4-18A5-4111-966E-33936516CEC8} = {240CD8ED-49F9-47E0-91B1-B170252E5437} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A8C26757-CDED-4779-94DE-C0D4929F64C2} diff --git a/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/LayoutComponentProvider.cs b/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/LayoutComponentProvider.cs deleted file mode 100644 index 893464be..00000000 --- a/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/LayoutComponentProvider.cs +++ /dev/null @@ -1,81 +0,0 @@ -//using H.LowCode.MetaSchema; -//using H.LowCode.DesignEngine.Abstraction; -//using System.Text.Json; -//using H.LowCode.MetaSchema.DesignEngine; - -//namespace H.LowCode.Components.AntBlazor; - -//public class LayoutComponentProvider : IComponentProvider -//{ -// public string Label { get; } = "布局组件"; - -// public string Name { get; } = ""; - -// public IEnumerable LoadComponents() -// { -// return []; -// } - -// public IEnumerable LoadComponent() -// { -// List components = -// [ -// new("grid"){ -// IsContainer = true, -// ComponentFragments = -// [ -// new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(LcGrid).GetFullNameWithAssemblyName() }, -// new(){ Index = 1, FragmentEnum = FragmentEnum.Parameter, Name = "Component", ValueType = ComponentValueTypeEnum.String, StringValue = "{Self}" }, -// new(){ Index = 2, FragmentEnum = FragmentEnum.Attribute, Name = "Rows", ValueType = ComponentValueTypeEnum.Integer, IntValue = 2 }, -// new(){ Index = 3, FragmentEnum = FragmentEnum.Attribute, Name = "Cols", ValueType = ComponentValueTypeEnum.Integer, IntValue = 2 } -// ], -// Property = new() -// { -// Label = "Grid 栅格" -// }, -// Style = new() -// { -// DefaultStyle = "width:100%; height: auto; background-color: #ffffff00;", -// ItemWidth = 24 -// } -// }, -// new("layout"){ -// IsContainer = true, -// ComponentFragments = -// [ -// new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(LcLayout).GetFullNameWithAssemblyName() }, -// new(){ Index = 1, FragmentEnum = FragmentEnum.Parameter, Name = "Component", ValueType = ComponentValueTypeEnum.String, StringValue = "{Self}" } -// ], -// Property = new() -// { -// Label = "Layout 布局" -// }, -// Style = new() -// { -// DefaultStyle = "width:100%; height:auto; background-color: #ffffff00;", -// ItemWidth = 24, -// ItemHeight = 150 -// } -// }, -// new("flex"){ -// IsContainer = true, -// ComponentFragments = -// [ -// new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(LcFlex).GetFullNameWithAssemblyName() }, -// new(){ Index = 1, FragmentEnum = FragmentEnum.Parameter, Name = "Component", ValueType = ComponentValueTypeEnum.String, StringValue = "{Self}" } -// ], -// Property = new() -// { -// Label = "Flex 布局" -// }, -// Style = new() -// { -// DefaultStyle = "width:100%; height:auto; background-color: #ffffff00;", -// ItemWidth = 24, -// ItemHeight = 150 -// } -// } -// ]; -// return components; -// } -//} diff --git a/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/SeniorComponentProvider.cs b/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/SeniorComponentProvider.cs deleted file mode 100644 index 24e82cc2..00000000 --- a/src/Parts/H.LowCode.Components.AntBlazor/ComponentProviders/SeniorComponentProvider.cs +++ /dev/null @@ -1,94 +0,0 @@ -//using AntDesign; -//using H.LowCode.MetaSchema; -//using H.LowCode.DesignEngine.Abstraction; -//using System.Text.Json; -//using H.LowCode.MetaSchema.DesignEngine; - -//namespace H.LowCode.Components.AntBlazor; - -//public class SeniorComponentProvider : IComponentProvider -//{ -// public string Label { get; set; } = "高级组件"; - -// public string Name { get; } = ""; - -// public IEnumerable LoadComponents() -// { -// return []; -// } - -// public IEnumerable LoadComponent() -// { -// List components = -// [ -// new("tabs"){ -// IsHiddenTitle = true, -// ComponentFragments = -// [ -// new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(LcTabs).GetFullNameWithAssemblyName() }, -// new(){ Index = 1, FragmentEnum = FragmentEnum.Parameter, Name = "Component", ValueType = ComponentValueTypeEnum.String, StringValue = "{Self}" }, -// new(){ Index = 2, FragmentEnum = FragmentEnum.Attribute, Name = "ItemCount", ValueType = ComponentValueTypeEnum.Integer, IntValue = 3 }, -// ], -// Property = new() -// { -// Label = "标签页" -// }, -// Style = new() -// { -// DefaultStyle = "background-color: #ffffff00; height: auto", -// ItemWidth = 24, -// ItemHeight = 300 -// } -// }, -// new("list"){ -// IsHiddenTitle = true, -// ComponentFragments = -// [ -// new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(AntList).GetFullNameWithAssemblyName() } -// ], -// Property = new() -// { -// Label = "List 列表", -// IsSupportDataSource = true -// } -// }, -// new("card"){ -// IsHiddenTitle = true, -// ComponentFragments = -// [ -// new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(LcCard).GetFullNameWithAssemblyName() }, -// new(){ Index = 1, FragmentEnum = FragmentEnum.Parameter, Name = "Component", ValueType = ComponentValueTypeEnum.String, StringValue = "{Self}" } -// ], -// Property = new() -// { -// Label = "卡片", -// IsSupportDataSource = true -// }, -// Style = new() -// { -// DefaultStyle = "height: auto" -// } -// }, -// new("table"){ -// IsHiddenTitle = true, -// ComponentFragments = -// [ -// new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(LcTable).GetFullNameWithAssemblyName() }, -// new(){ Index = 1, FragmentEnum = FragmentEnum.Parameter, Name = "Component", ValueType = ComponentValueTypeEnum.String, StringValue = "{Self}" } -// ], -// Property = new() -// { -// Label = "表格", -// IsSupportDataSource = true, -// ComponentValueType = ComponentValueTypeEnum.Table, -// }, -// Style = new() -// { -// DefaultStyle = "height: auto", -// ItemWidth = 24 -// } -// }, -// ]; -// return components; -// } -//} diff --git a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcCard.razor b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcCard.razor index a99fb367..8dd13f13 100644 --- a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcCard.razor +++ b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcCard.razor @@ -1,27 +1,27 @@ -@namespace H.LowCode.Components.AntBlazor -@inherits ContainerComponentBase +@* @namespace H.LowCode.Components.AntBlazor *@ +@* @inherits ContainerComponentBase *@ - - - More - - - { component.Style.DefaultStyle="min-height:90px; height:auto; background: #f4f7fa;";})"> - - +@* *@ +@* *@ +@* More *@ +@* *@ +@* *@ +@* { component.Style.DefaultStyle="min-height:90px; height:auto; background: #f4f7fa;";})"> *@ +@* *@ +@* *@ -@code { - #region override - protected override bool ShouldRender() - { - return false; - } - #endregion +@* @code { *@ +@* #region override *@ +@* protected override bool ShouldRender() *@ +@* { *@ +@* return false; *@ +@* } *@ +@* #endregion *@ - #region - private void OnTabChange() - { +@* #region *@ +@* private void OnTabChange() *@ +@* { *@ - } - #endregion -} \ No newline at end of file +@* } *@ +@* #endregion *@ +@* } *@ \ No newline at end of file diff --git a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcCarousel.razor b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcCarousel.razor deleted file mode 100644 index e47709fa..00000000 --- a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcCarousel.razor +++ /dev/null @@ -1,31 +0,0 @@ -@namespace H.LowCode.Components.AntBlazor -@inherits ContainerComponentBase - - - @for (int i = 0; i < ItemCount; i++) - { - string key = $"CarouselSlick-{i}"; - -

@key

-
- } -
- -@code { - [Parameter] - public int ItemCount { get; set; } - - #region override - protected override bool ShouldRender() - { - return false; - } - #endregion - - #region event - private void OnItemClick() - { - - } - #endregion -} \ No newline at end of file diff --git a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcDescriptions.razor b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcDescriptions.razor deleted file mode 100644 index 62a64871..00000000 --- a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcDescriptions.razor +++ /dev/null @@ -1,44 +0,0 @@ -@namespace H.LowCode.Components.AntBlazor -@inherits LowCodeComponentBase - - - @for (int i = 0; i < ItemCount; i++) - { - - @Component.Label - - } - - -@code { - [Parameter] - public ComponentPartsSchema Component { get; set; } - - [Parameter] - public int ItemCount{ get; set; } - - /// - /// 保存初始的 Component,避免跟随 Component 变化 - /// - private ComponentSchema _component; - - #region Init - protected override async Task OnInitializedAsync() - { - Init(); - - await base.OnInitializedAsync(); - } - - protected override bool ShouldRender() - { - return false; - } - - private void Init() - { - if (_component == null) - _component = Component.CopyNew(); - } - #endregion -} \ No newline at end of file diff --git a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcFlex.razor b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcFlex.razor index 26be74a4..f9862cef 100644 --- a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcFlex.razor +++ b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcFlex.razor @@ -1,37 +1,37 @@ -@namespace H.LowCode.Components.AntBlazor -@inherits LowCodeComponentBase - - - - - -@code { - [Parameter] - public ComponentPartsSchema Component{ get; set; } - - /// - /// 保存初始的 Component,避免跟随 Component 变化 - /// - private ComponentPartsSchema _component; - - private string _boxStyle = "width:100%; border-radius:6px;"; - private string _justify = "center"; - private string _align = "center"; - - #region Init - protected override async Task OnInitializedAsync() - { - Init(); - - await base.OnInitializedAsync(); - } - - private void Init() - { - if (_component == null) - _component = Component.CopyNew(); - - _component.Style.DefaultStyle = "min-height:150px; width:100%; background-color: #f4f4f4;"; - } - #endregion -} \ No newline at end of file +@* @namespace H.LowCode.Components.AntBlazor *@ +@* @inherits LowCodeComponentBase *@ + +@* *@ +@* *@ +@* *@ + +@* @code { *@ +@* [Parameter] *@ +@* public ComponentPartsSchema Component{ get; set; } *@ + +@* /// *@ +@* /// 保存初始的 Component,避免跟随 Component 变化 *@ +@* /// *@ +@* private ComponentPartsSchema _component; *@ + +@* private string _boxStyle = "width:100%; border-radius:6px;"; *@ +@* private string _justify = "center"; *@ +@* private string _align = "center"; *@ + +@* #region Init *@ +@* protected override async Task OnInitializedAsync() *@ +@* { *@ +@* Init(); *@ + +@* await base.OnInitializedAsync(); *@ +@* } *@ + +@* private void Init() *@ +@* { *@ +@* if (_component == null) *@ +@* _component = Component.CopyNew(); *@ + +@* _component.Style.DefaultStyle = "min-height:150px; width:100%; background-color: #f4f4f4;"; *@ +@* } *@ +@* #endregion *@ +@* } *@ \ No newline at end of file diff --git a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcGrid.razor b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcGrid.razor index 649a6d9e..42494ffe 100644 --- a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcGrid.razor +++ b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcGrid.razor @@ -1,26 +1,26 @@ -@namespace H.LowCode.Components.AntBlazor -@inherits ContainerComponentBase +@* @namespace H.LowCode.Components.AntBlazor *@ +@* @inherits ContainerComponentBase *@ -
- @for (int r = 0; r < Rows; r++) - { - int rr = r; - - @for (int c = 0; c < Cols; c++) - { - string key = $"gridcontainer-{rr}-{c}"; - - - - } - - } -
+@*
*@ +@* @for (int r = 0; r < Rows; r++) *@ +@* { *@ +@* int rr = r; *@ +@* *@ +@* @for (int c = 0; c < Cols; c++) *@ +@* { *@ +@* string key = $"gridcontainer-{rr}-{c}"; *@ +@* *@ +@* *@ +@* *@ +@* } *@ +@* *@ +@* } *@ +@*
*@ -@code { - [Parameter] - public int Rows { get; set; } +@* @code { *@ +@* [Parameter] *@ +@* public int Rows { get; set; } *@ - [Parameter] - public int Cols { get; set; } -} \ No newline at end of file +@* [Parameter] *@ +@* public int Cols { get; set; } *@ +@* } *@ \ No newline at end of file diff --git a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcLayout.razor b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcLayout.razor index 08803134..9e8fd4ba 100644 --- a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcLayout.razor +++ b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcLayout.razor @@ -1,15 +1,15 @@ -@namespace H.LowCode.Components.AntBlazor -@inherits ContainerComponentBase +@* @namespace H.LowCode.Components.AntBlazor *@ +@* @inherits ContainerComponentBase *@ - - - - - - - - +@* *@ +@* *@ +@* *@ +@* *@ +@* *@ +@* *@ +@* *@ +@* *@ -@code { +@* @code { *@ -} \ No newline at end of file +@* } *@ \ No newline at end of file diff --git a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcList.razor b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcList.razor index 013af3cb..5e4a9d1f 100644 --- a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcList.razor +++ b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcList.razor @@ -1,45 +1,45 @@ -@namespace H.LowCode.Components.AntBlazor -@inherits ContainerComponentBase - - - - - - @context.Title - - - - - -@code { - [Parameter] - public IList DataSource { get; set; } = new List - { - new(){ Title="Ant Design Title 1", Content = "Ant Design, a design language for background applications, is refined by Ant UED Team" }, - new(){ Title="Ant Design Title 2", Content = "Ant Design, a design language for background applications, is refined by Ant UED Team" }, - new(){ Title="Ant Design Title 3", Content = "Ant Design, a design language for background applications, is refined by Ant UED Team" } - }; - - private RenderFragment avatar = @; - - #region override - protected override bool ShouldRender() - { - return false; - } - #endregion - - #region - private void OnItemClick(string title) - { - - } - #endregion - - public class ListItem - { - public string Title { get; set; } - - public string Content{ get; set; } - } -} \ No newline at end of file +@* @namespace H.LowCode.Components.AntBlazor *@ +@* @inherits ContainerComponentBase *@ + +@* *@ +@* *@ +@* *@ +@* *@ +@* @context.Title *@ +@* *@ +@* *@ +@* *@ +@* *@ + +@* @code { *@ +@* [Parameter] *@ +@* public IList DataSource { get; set; } = new List *@ +@* { *@ +@* new(){ Title="Ant Design Title 1", Content = "Ant Design, a design language for background applications, is refined by Ant UED Team" }, *@ +@* new(){ Title="Ant Design Title 2", Content = "Ant Design, a design language for background applications, is refined by Ant UED Team" }, *@ +@* new(){ Title="Ant Design Title 3", Content = "Ant Design, a design language for background applications, is refined by Ant UED Team" } *@ +@* }; *@ + +@* private RenderFragment avatar = @; *@ + +@* #region override *@ +@* protected override bool ShouldRender() *@ +@* { *@ +@* return false; *@ +@* } *@ +@* #endregion *@ + +@* #region *@ +@* private void OnItemClick(string title) *@ +@* { *@ + +@* } *@ +@* #endregion *@ + +@* public class ListItem *@ +@* { *@ +@* public string Title { get; set; } *@ + +@* public string Content{ get; set; } *@ +@* } *@ +@* } *@ \ No newline at end of file diff --git a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcTable.razor b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcTable.razor index ff9b6455..a6b26678 100644 --- a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcTable.razor +++ b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcTable.razor @@ -1,141 +1,141 @@ -@namespace H.LowCode.Components.AntBlazor -@inherits LowCodeComponentBase - -@inject IJSRuntime JS - - - - - @if(_tableSchema.Buttons.Count == 0) - { - - - } - @foreach (var btn in _tableSchema.Buttons) - { - - } - - - - - @foreach (var key in _data?.FirstOrDefault()?.Keys.ToArray() ?? new string[0]) - { - var column = _tableSchema.Columns.FirstOrDefault(t => string.Equals(t.Name, key, StringComparison.OrdinalIgnoreCase)); - if (column != null) - { - - } - } - - - - 编辑 - - - 删除 - - - - -
- -@code { - [Parameter] - public ComponentPartsSchema Component { get; set; } - - private TablePropertySchema _tableSchema = new(); - private List> _data; - - IEnumerable> _selectedRows = []; - ITable table; - - int _pageIndex = 1; - int _pageSize = 10; - int _total = 0; - - protected override async Task OnInitializedAsync() - { - _tableSchema = GetTableSchemaAsync(); - _data = await GetTableDataAsync(1, 50); - _total = 50; - } - - public async Task OnChange(QueryModel> queryModel) - { - await Task.Delay(1); - Console.WriteLine(JsonSerializer.Serialize(queryModel)); - } - - private TablePropertySchema GetTableSchemaAsync() - { - // if (Component?.Property == null || Component.Property.TablePropertiess.IsNullOrEmpty() - // || Component.Property.TablePropertiess.Trim().Equals("[]")) - // { - // var tableSchema = new TablePropertySchema(); - // tableSchema.Columns = new List() - // { - // new() { Name = "_temp", Title = "(待添加列)" } - // }; - // return tableSchema; - // } - - // return JsonSerializer.Deserialize(Component.Property.TablePropertiess); - return null; - } - - public async Task>> GetTableDataAsync(int pageIndex, int pageSize) - { - await Task.Delay(100); - var list = new List>(); - for (int i = 0; i < 3; i++) - { - Dictionary row = new Dictionary(); - foreach (var col in _tableSchema.Columns) - { - row.Add(col.Name, string.Empty); - } - list.Add(row); - } - return list; - } - - public async Task CreateAsync() - { - await Task.Delay(100); - } - - public async Task EditAsync(Dictionary row) - { - string primaryKey = _tableSchema.Columns.FirstOrDefault(t => t.IsPrimaryKey)?.Name; - await Task.Delay(100); - } - - private async Task DeleteAsync(Dictionary row) - { - await Task.Delay(100); - } - - public async Task DeleteSelectedAsync() - { - await Task.Delay(100); - } - - public async Task ButtonActionAsync(string id) - { - await Task.Delay(100); - var btn = _tableSchema.Buttons.First(t => t.Id == id); - if (btn.ActionType == ActionTypeEnum.Blank) - { - string pageUrl = string.Empty; - if (IsDesign) - pageUrl = $"/designer/caseapp/{btn.TargetId}"; - else - pageUrl = $"/caseapp/{btn.TargetId}"; - - await JS.InvokeVoidAsync("open", pageUrl, "_blank"); - // await this.RedirectPageAsync(pageUrl); - } - } -} +@* @namespace H.LowCode.Components.AntBlazor *@ +@* @inherits LowCodeComponentBase *@ + +@* @inject IJSRuntime JS *@ + +@* *@ +@* *@ +@* *@ +@* @if(_tableSchema.Buttons.Count == 0) *@ +@* { *@ +@* *@ +@* *@ +@* } *@ +@* @foreach (var btn in _tableSchema.Buttons) *@ +@* { *@ +@* *@ +@* } *@ +@* *@ +@* *@ +@* *@ +@* *@ +@* @foreach (var key in _data?.FirstOrDefault()?.Keys.ToArray() ?? new string[0]) *@ +@* { *@ +@* var column = _tableSchema.Columns.FirstOrDefault(t => string.Equals(t.Name, key, StringComparison.OrdinalIgnoreCase)); *@ +@* if (column != null) *@ +@* { *@ +@* *@ +@* } *@ +@* } *@ +@* *@ +@* *@ +@* *@ +@* 编辑 *@ +@* *@ +@* *@ +@* 删除 *@ +@* *@ +@* *@ +@* *@ +@* *@ +@*
*@ + +@* @code { *@ +@* [Parameter] *@ +@* public ComponentPartsSchema Component { get; set; } *@ + +@* private TablePropertySchema _tableSchema = new(); *@ +@* private List> _data; *@ + +@* IEnumerable> _selectedRows = []; *@ +@* ITable table; *@ + +@* int _pageIndex = 1; *@ +@* int _pageSize = 10; *@ +@* int _total = 0; *@ + +@* protected override async Task OnInitializedAsync() *@ +@* { *@ +@* _tableSchema = GetTableSchemaAsync(); *@ +@* _data = await GetTableDataAsync(1, 50); *@ +@* _total = 50; *@ +@* } *@ + +@* public async Task OnChange(QueryModel> queryModel) *@ +@* { *@ +@* await Task.Delay(1); *@ +@* Console.WriteLine(JsonSerializer.Serialize(queryModel)); *@ +@* } *@ + +@* private TablePropertySchema GetTableSchemaAsync() *@ +@* { *@ +@* // if (Component?.Property == null || Component.Property.TablePropertiess.IsNullOrEmpty() *@ +@* // || Component.Property.TablePropertiess.Trim().Equals("[]")) *@ +@* // { *@ +@* // var tableSchema = new TablePropertySchema(); *@ +@* // tableSchema.Columns = new List() *@ +@* // { *@ +@* // new() { Name = "_temp", Title = "(待添加列)" } *@ +@* // }; *@ +@* // return tableSchema; *@ +@* // } *@ + +@* // return JsonSerializer.Deserialize(Component.Property.TablePropertiess); *@ +@* return null; *@ +@* } *@ + +@* public async Task>> GetTableDataAsync(int pageIndex, int pageSize) *@ +@* { *@ +@* await Task.Delay(100); *@ +@* var list = new List>(); *@ +@* for (int i = 0; i < 3; i++) *@ +@* { *@ +@* Dictionary row = new Dictionary(); *@ +@* foreach (var col in _tableSchema.Columns) *@ +@* { *@ +@* row.Add(col.Name, string.Empty); *@ +@* } *@ +@* list.Add(row); *@ +@* } *@ +@* return list; *@ +@* } *@ + +@* public async Task CreateAsync() *@ +@* { *@ +@* await Task.Delay(100); *@ +@* } *@ + +@* public async Task EditAsync(Dictionary row) *@ +@* { *@ +@* string primaryKey = _tableSchema.Columns.FirstOrDefault(t => t.IsPrimaryKey)?.Name; *@ +@* await Task.Delay(100); *@ +@* } *@ + +@* private async Task DeleteAsync(Dictionary row) *@ +@* { *@ +@* await Task.Delay(100); *@ +@* } *@ + +@* public async Task DeleteSelectedAsync() *@ +@* { *@ +@* await Task.Delay(100); *@ +@* } *@ + +@* public async Task ButtonActionAsync(string id) *@ +@* { *@ +@* await Task.Delay(100); *@ +@* var btn = _tableSchema.Buttons.First(t => t.Id == id); *@ +@* if (btn.ActionType == ActionTypeEnum.Blank) *@ +@* { *@ +@* string pageUrl = string.Empty; *@ +@* if (IsDesign) *@ +@* pageUrl = $"/designer/caseapp/{btn.TargetId}"; *@ +@* else *@ +@* pageUrl = $"/caseapp/{btn.TargetId}"; *@ + +@* await JS.InvokeVoidAsync("open", pageUrl, "_blank"); *@ +@* // await this.RedirectPageAsync(pageUrl); *@ +@* } *@ +@* } *@ +@* } *@ diff --git a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcTabs.razor b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcTabs.razor index 8b6c9999..51a14cff 100644 --- a/src/Parts/H.LowCode.Components.AntBlazor/Components/LcTabs.razor +++ b/src/Parts/H.LowCode.Components.AntBlazor/Components/LcTabs.razor @@ -1,33 +1,33 @@ -@namespace H.LowCode.Components.AntBlazor -@inherits ContainerComponentBase +@* @namespace H.LowCode.Components.AntBlazor *@ +@* @inherits ContainerComponentBase *@ - - @for (int i = 0; i < ItemCount; i++) - { - string key = $"tab-{i}"; - - - - } - +@* *@ +@* @for (int i = 0; i < ItemCount; i++) *@ +@* { *@ +@* string key = $"tab-{i}"; *@ +@* *@ +@* *@ +@* *@ +@* } *@ +@* *@ -@code { - [Parameter] - public int ItemCount { get; set; } +@* @code { *@ +@* [Parameter] *@ +@* public int ItemCount { get; set; } *@ - private string _activeKey { get; set; } +@* private string _activeKey { get; set; } *@ - #region override - protected override bool ShouldRender() - { - return false; - } - #endregion +@* #region override *@ +@* protected override bool ShouldRender() *@ +@* { *@ +@* return false; *@ +@* } *@ +@* #endregion *@ - #region - private void OnTabChange() - { +@* #region *@ +@* private void OnTabChange() *@ +@* { *@ - } - #endregion -} \ No newline at end of file +@* } *@ +@* #endregion *@ +@* } *@ \ No newline at end of file diff --git a/src/Parts/H.LowCode.Components.Extension/ComponentProviders/ExtensionComponentProvider.cs b/src/Parts/H.LowCode.Components.Extension/ComponentProviders/ExtensionComponentProvider.cs deleted file mode 100644 index cabf9a25..00000000 --- a/src/Parts/H.LowCode.Components.Extension/ComponentProviders/ExtensionComponentProvider.cs +++ /dev/null @@ -1,103 +0,0 @@ -//using AntDesign; -//using H.LowCode.DesignEngine.Abstraction; -//using H.LowCode.MetaSchema; -//using H.LowCode.MetaSchema.DesignEngine; - -//namespace H.LowCode.Components.Extension; - -//public class ExtensionComponentProvider : IComponentProvider -//{ -// public string Label { get; set; } = "扩展组件"; - -// public string Name { get; } = ""; - -// public IEnumerable LoadComponents() -// { -// return []; -// } - -// public IEnumerable LoadComponent() -// { -// List components = -// [ -// new("lakexeditor"){ -// IsHiddenTitle = true, -// ComponentFragments = -// [ -// new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(LcLakexEditor).GetFullNameWithAssemblyName() }, -// new(){ Index = 1, FragmentEnum = FragmentEnum.Parameter, Name = "Component", ValueType = ComponentValueTypeEnum.String, StringValue = "{Self}" } -// ], -// Property = new() -// { -// Label = "LakexEditor", -// ComponentValueType = ComponentValueTypeEnum.String -// }, -// Style = new() -// { -// DefaultStyle = "height: 100%", -// ItemWidth = 24 -// } -// }, -// new("monacoeditor"){ -// IsHiddenTitle = true, -// ComponentFragments = -// [ -// new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(LcMonacoEditor).GetFullNameWithAssemblyName() }, -// new(){ Index = 1, FragmentEnum = FragmentEnum.Parameter, Name = "Component", ValueType = ComponentValueTypeEnum.String, StringValue = "{Self}" } -// ], -// Property = new() -// { -// Label = "MonacoEditor", -// ComponentValueType = ComponentValueTypeEnum.String -// }, -// Style = new() -// { -// ItemWidth = 24, -// ItemHeight = 150, -// DefaultStyle = "height: 100%" -// } -// }, -// //new("userselect"){ -// // ComponentFragments = -// // [ -// // new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(LcUserSelect) } -// // ], -// // Property = new() -// // { -// // Title = "用户选择" -// // } -// //}, -// //new("region"){ -// // ComponentFragments = -// // [ -// // new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(LcRegion) } -// // ], -// // Property = new() -// // { -// // Title = "行政区划" -// // } -// //}, -// //new("gaodemap"){ -// // ComponentFragments = -// // [ -// // new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(LcGaodeMap) } -// // ], -// // Property = new() -// // { -// // Title = "高德地图" -// // } -// //}, -// //new("baidumap"){ -// // ComponentFragments = -// // [ -// // new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(LcBaiduMap) } -// // ], -// // Property = new() -// // { -// // Title = "百度地图" -// // } -// //} -// ]; -// return components; -// } -//} diff --git a/src/Parts/H.LowCode.Components.Extension/Components/LcLakexEditor.razor b/src/Parts/H.LowCode.Components.Extension/Components/LcLakexEditor.razor index ca69594d..b7dff9a9 100644 --- a/src/Parts/H.LowCode.Components.Extension/Components/LcLakexEditor.razor +++ b/src/Parts/H.LowCode.Components.Extension/Components/LcLakexEditor.razor @@ -20,7 +20,7 @@ /// /// 保存初始的 Component,避免跟随 Component 变化 /// - private ComponentSchema _component; + private ComponentSchemaBase _component; private Lazy> moduleTask; diff --git a/src/Parts/H.LowCode.Components.Extension/PageTemplateProviders/ExtensionPageTemplateProvider.cs b/src/Parts/H.LowCode.Components.Extension/PageTemplateProviders/ExtensionPageTemplateProvider.cs deleted file mode 100644 index b4232c92..00000000 --- a/src/Parts/H.LowCode.Components.Extension/PageTemplateProviders/ExtensionPageTemplateProvider.cs +++ /dev/null @@ -1,55 +0,0 @@ -//using H.LowCode.DesignEngine.Abstraction; -//using H.LowCode.MetaSchema; -//using H.LowCode.Components.AntBlazor; -//using H.LowCode.MetaSchema.DesignEngine; - -//namespace H.LowCode.Components.Extension; - -//public class ExtensionPageTemplateProvider : IPageTemplateProvider -//{ -// public string Label { get; set; } = "页面模板"; - -// public IEnumerable LoadPageTemplate() -// { -// List components = -// [ -// new("formtemplate"){ -// IsHiddenTitle = true, -// IsTemplate = true, -// Property = new() -// { -// Label = "基础表单", -// ComponentValueType = ComponentValueTypeEnum.None -// }, -// Style = new() -// { -// ItemWidth = 24, -// DefaultStyle = "height:100%" -// } -// }, -// new("tabletemplate"){ -// IsHiddenTitle = true, -// ComponentFragments = -// [ -// new(){ Index = 0, FragmentEnum = FragmentEnum.Component, ComponentFragmentName = typeof(LcTable).GetFullNameWithAssemblyName() } -// ], -// Property = new() -// { -// Label = "基础列表", -// ComponentValueType = ComponentValueTypeEnum.None -// }, -// Style = new() -// { -// ItemWidth = 24, -// DefaultStyle = "height:100%" -// } -// } -// ]; -// return components; -// } - -// public IEnumerable LoadPageTemplates() -// { -// return []; -// } -//} diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/_Imports.razor b/src/Parts/H.LowCode.Themes.AntBlazor/_Imports.razor index c2b0e14e..a57a1f91 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/_Imports.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/_Imports.razor @@ -9,5 +9,6 @@ @using H.LowCode.RenderEngine.Abstraction @using H.LowCode.RenderEngine.Application.Contracts @using H.LowCode.MetaSchema +@using H.LowCode.MetaSchema.RenderEngine @using H.LowCode.Model @using H.Util.Blazor \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/AppPartsSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/AppPartsSchema.cs index db79f494..58aa0af5 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/AppPartsSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/AppPartsSchema.cs @@ -3,7 +3,7 @@ using System.Text.Json.Serialization; namespace H.LowCode.MetaSchema.DesignEngine; -public class AppPartsSchema : AppSchema +public class AppPartsSchema : AppSchemaBase { } diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs index c3ab6afa..c59ac5f9 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs @@ -5,7 +5,7 @@ using System.Text.Json.Serialization; namespace H.LowCode.MetaSchema.DesignEngine; -public class ComponentPartsSchema : ComponentSchema +public class ComponentPartsSchema : ComponentSchemaBase { /// /// 组件 Name @@ -84,10 +84,10 @@ public class ComponentPartsSchema : ComponentSchema return newComponent; } - public ComponentSchema ConvertToComponentSchema() + public ComponentPartsSchema ConvertToComponentSchema() { string json = this.ToJson(); - return json.FromJson(); + return json.FromJson(); } public void RefreshState() diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PagePartsSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PagePartsSchema.cs index 659fcf85..18e9559a 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PagePartsSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PagePartsSchema.cs @@ -3,7 +3,7 @@ using System.Text.Json.Serialization; namespace H.LowCode.MetaSchema.DesignEngine; -public class PagePartsSchema : PageSchema +public class PagePartsSchema : PageSchemaBase { [JsonPropertyName("comps")] public new IList Components { get; set; } = []; diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsFragmentSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsFragmentSchema.cs index c98ad958..529af196 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsFragmentSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsFragmentSchema.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace H.LowCode.MetaSchema.DesignEngine; -public class ComponentPartsFragmentSchema : ComponentFragmentSchema +public class ComponentPartsFragmentSchema : ComponentFragmentSchemaBase { /// /// 默认组件类型名,如 "AntDesign.Input`1[System.String], AntDesign" diff --git a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/AppSchema.cs b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/AppSchema.cs new file mode 100644 index 00000000..833646e6 --- /dev/null +++ b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/AppSchema.cs @@ -0,0 +1,9 @@ +using System.ComponentModel.DataAnnotations; +using System.Text.Json.Serialization; + +namespace H.LowCode.MetaSchema; + +public class AppSchema : AppSchemaBase +{ + +} diff --git a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/ComponentSchema.cs b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/ComponentSchema.cs new file mode 100644 index 00000000..18d0c385 --- /dev/null +++ b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/ComponentSchema.cs @@ -0,0 +1,21 @@ +using H.Extensions.System; +using H.Util.Ids; +using System.Text.Json.Serialization; + +namespace H.LowCode.MetaSchema.RenderEngine; + +public class ComponentSchema : ComponentSchemaBase +{ + /// + /// 组件渲染 Fragment + /// + [JsonPropertyName("frag")] + public new ComponentFragmentSchema Fragment { get; set; } + + /// + /// + /// + [JsonPropertyName("childs")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public new ComponentSchema[] Childrens { get; set; } +} \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PageSchema.cs b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PageSchema.cs new file mode 100644 index 00000000..e07168ba --- /dev/null +++ b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PageSchema.cs @@ -0,0 +1,10 @@ +using H.Util.Ids; +using System.Text.Json.Serialization; + +namespace H.LowCode.MetaSchema.RenderEngine; + +public class PageSchema : PageSchemaBase +{ + [JsonPropertyName("comps")] + public new IList Components { get; set; } = []; +} \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentFragmentSchema.cs b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentFragmentSchema.cs new file mode 100644 index 00000000..240f63bc --- /dev/null +++ b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentFragmentSchema.cs @@ -0,0 +1,11 @@ +using System.ComponentModel; +using System.Text.Json.Serialization; + +namespace H.LowCode.MetaSchema.RenderEngine; + +public class ComponentFragmentSchema : ComponentFragmentSchemaBase +{ + [JsonPropertyName("childs")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public new ComponentFragmentSchema[] Childrens { get; set; } +} diff --git a/src/Protocol/H.LowCode.MetaSchema/AppSchema.cs b/src/Protocol/H.LowCode.MetaSchema/AppSchemaBase.cs similarity index 92% rename from src/Protocol/H.LowCode.MetaSchema/AppSchema.cs rename to src/Protocol/H.LowCode.MetaSchema/AppSchemaBase.cs index 2896a91c..d3b2d1cc 100644 --- a/src/Protocol/H.LowCode.MetaSchema/AppSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/AppSchemaBase.cs @@ -3,7 +3,7 @@ using System.Text.Json.Serialization; namespace H.LowCode.MetaSchema; -public class AppSchema : MetaSchemaBase +public abstract class AppSchemaBase : MetaSchemaBase { public string Id { get; set; } diff --git a/src/Protocol/H.LowCode.MetaSchema/ComponentSchema.cs b/src/Protocol/H.LowCode.MetaSchema/ComponentSchemaBase.cs similarity index 92% rename from src/Protocol/H.LowCode.MetaSchema/ComponentSchema.cs rename to src/Protocol/H.LowCode.MetaSchema/ComponentSchemaBase.cs index 950da13f..4d8dd4a7 100644 --- a/src/Protocol/H.LowCode.MetaSchema/ComponentSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/ComponentSchemaBase.cs @@ -4,7 +4,7 @@ using System.Text.Json.Serialization; namespace H.LowCode.MetaSchema; -public class ComponentSchema +public abstract class ComponentSchemaBase { /// /// 组件实例Id @@ -56,7 +56,7 @@ public class ComponentSchema /// 组件渲染 Fragment /// [JsonPropertyName("frag")] - public virtual ComponentFragmentSchema Fragment { get; set; } + public virtual ComponentFragmentSchemaBase Fragment { get; set; } /// /// Property 分组 @@ -82,7 +82,7 @@ public class ComponentSchema /// [JsonPropertyName("childs")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public ComponentSchema[] Childrens { get; set; } + public virtual ComponentSchemaBase[] Childrens { get; set; } [JsonPropertyName("ds")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] diff --git a/src/Protocol/H.LowCode.MetaSchema/PageSchema.cs b/src/Protocol/H.LowCode.MetaSchema/PageSchemaBase.cs similarity index 86% rename from src/Protocol/H.LowCode.MetaSchema/PageSchema.cs rename to src/Protocol/H.LowCode.MetaSchema/PageSchemaBase.cs index fc242434..e23d966f 100644 --- a/src/Protocol/H.LowCode.MetaSchema/PageSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/PageSchemaBase.cs @@ -3,7 +3,7 @@ using System.Text.Json.Serialization; namespace H.LowCode.MetaSchema; -public class PageSchema : MetaSchemaBase +public abstract class PageSchemaBase : MetaSchemaBase { [JsonPropertyName("aid")] public string AppId { get; set; } = ShortIdGenerator.Generate(); @@ -32,5 +32,5 @@ public class PageSchema : MetaSchemaBase public PageDataSourceSchema DataSource { get; set; } = new(); [JsonPropertyName("comps")] - public IList Components { get; set; } = []; + public virtual IList Components { get; set; } = []; } \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchema.cs b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchemaBase.cs similarity index 93% rename from src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchema.cs rename to src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchemaBase.cs index b0ab4a4d..522f0b9f 100644 --- a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchemaBase.cs @@ -3,7 +3,7 @@ using System.Text.Json.Serialization; namespace H.LowCode.MetaSchema; -public class ComponentFragmentSchema +public abstract class ComponentFragmentSchemaBase { /// /// 组件类型名 @@ -19,7 +19,7 @@ public class ComponentFragmentSchema [JsonPropertyName("childs")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public virtual ComponentFragmentSchema[] Childrens { get; set; } + public virtual ComponentFragmentSchemaBase[] Childrens { get; set; } [JsonPropertyName("content")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs index 34c79b5d..d1d45392 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs @@ -6,6 +6,7 @@ using System.Text; using H.LowCode.MetaSchema; using System.Reflection; using H.LowCode.ComponentBase; +using H.LowCode.MetaSchema.RenderEngine; namespace H.LowCode.RenderEngine.Abstraction; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Application.Contracts/RenderAppServices/IMetaAppService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Application.Contracts/RenderAppServices/IMetaAppService.cs index 8ac92719..0a945a1c 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Application.Contracts/RenderAppServices/IMetaAppService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Application.Contracts/RenderAppServices/IMetaAppService.cs @@ -1,4 +1,5 @@ using H.LowCode.MetaSchema; +using H.LowCode.MetaSchema.RenderEngine; using Volo.Abp.Application.Services; namespace H.LowCode.RenderEngine.Application.Contracts; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/FormDataAppService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/FormDataAppService.cs index f3e78cbe..f1ae8180 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/FormDataAppService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/FormDataAppService.cs @@ -1,11 +1,10 @@ -using H.LowCode.Domain; +using H.LowCode.RenderEngine.Domain; using H.LowCode.RenderEngine.Application.Contracts; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Text; -using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Services; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/TableDataAppService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/TableDataAppService.cs index de15f007..69f14514 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/TableDataAppService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/TableDataAppService.cs @@ -1,4 +1,4 @@ -using H.LowCode.Domain; +using H.LowCode.RenderEngine.Domain; using H.LowCode.RenderEngine.Application.Contracts; using Microsoft.Extensions.DependencyInjection; using System; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Application/H.LowCode.RenderEngine.Application.csproj b/src/RenderEngine/H.LowCode.RenderEngine.Application/H.LowCode.RenderEngine.Application.csproj index a3f63b11..896c0784 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Application/H.LowCode.RenderEngine.Application.csproj +++ b/src/RenderEngine/H.LowCode.RenderEngine.Application/H.LowCode.RenderEngine.Application.csproj @@ -11,8 +11,8 @@ - + diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Application/MapperProfiles/LowCodeAutoMapperProfile.cs b/src/RenderEngine/H.LowCode.RenderEngine.Application/MapperProfiles/LowCodeAutoMapperProfile.cs index f7b2aaba..1832e740 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Application/MapperProfiles/LowCodeAutoMapperProfile.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Application/MapperProfiles/LowCodeAutoMapperProfile.cs @@ -1,5 +1,5 @@ using AutoMapper; -using H.LowCode.Domain; +using H.LowCode.RenderEngine.Domain; using H.LowCode.RenderEngine.Application.Contracts; using System; using System.Collections.Generic; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Application/RenderAppServices/MetaAppService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Application/RenderAppServices/MetaAppService.cs index 6199abc3..d37a9119 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Application/RenderAppServices/MetaAppService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Application/RenderAppServices/MetaAppService.cs @@ -1,10 +1,9 @@ -using H.Extensions.System; -using H.LowCode.Domain; -using H.LowCode.MetaSchema; +using H.LowCode.MetaSchema; +using H.LowCode.MetaSchema.RenderEngine; using H.LowCode.RenderEngine.Application.Contracts; +using H.LowCode.RenderEngine.Domain; using Microsoft.Extensions.DependencyInjection; using System.Text; -using System.Xml.Linq; using Volo.Abp; using Volo.Abp.Application.Services; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Application/RenderEngineApplicationModule.cs b/src/RenderEngine/H.LowCode.RenderEngine.Application/RenderEngineApplicationModule.cs index eebac81f..370232e4 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Application/RenderEngineApplicationModule.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Application/RenderEngineApplicationModule.cs @@ -1,5 +1,5 @@ using H.LowCode.Configuration; -using H.LowCode.Domain; +using H.LowCode.RenderEngine.Domain; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AutoMapper; using Volo.Abp.Modularity; @@ -10,7 +10,7 @@ namespace H.LowCode.RenderEngine.Application; //abp typeof(AbpAutoMapperModule), //lowcode - typeof(LowCodeDomainModule) + typeof(RenderEngineDomainModule) )] public class RenderEngineApplicationModule : AbpModule { diff --git a/src/Common/H.LowCode.Domain/DataDomainServices/FormDataDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/FormDataDomainService.cs similarity index 98% rename from src/Common/H.LowCode.Domain/DataDomainServices/FormDataDomainService.cs rename to src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/FormDataDomainService.cs index 596b45e9..bed55668 100644 --- a/src/Common/H.LowCode.Domain/DataDomainServices/FormDataDomainService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/FormDataDomainService.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.RenderEngine.Domain; public class FormDataDomainService : DomainService, IFormDataDomainService { diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/IFormDataDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/IFormDataDomainService.cs new file mode 100644 index 00000000..9d3771e3 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/IFormDataDomainService.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.RenderEngine.Domain; + +public interface IFormDataDomainService : IDomainService +{ + Task SaveAsync(FormEntity entity); + + Task GetAsync(string appId, string pageId, string id); + + Task DeleteAsync(string appId, string pageId, string id); +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/ITableDataDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/ITableDataDomainService.cs new file mode 100644 index 00000000..e64df35e --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/ITableDataDomainService.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.RenderEngine.Domain; + +public interface ITableDataDomainService : IDomainService +{ + +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/TableDataDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/TableDataDomainService.cs new file mode 100644 index 00000000..f7f94bff --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/TableDataDomainService.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.RenderEngine.Domain; + +public class TableDataDomainService : DomainService, ITableDataDomainService +{ + public TableDataDomainService(ITableDataRepository tableDataRepository) + { + + } +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataRepositories/IFormDataRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataRepositories/IFormDataRepository.cs new file mode 100644 index 00000000..2eaa90d8 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataRepositories/IFormDataRepository.cs @@ -0,0 +1,20 @@ +using H.LowCode.MetaSchema; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; + +namespace H.LowCode.RenderEngine.Domain; + +public interface IFormDataRepository : IRepository +{ + Task AddAsync(FormEntity entity); + + Task UpdateAsync(FormEntity entity); + + Task GetAsync(string entityName, string id); + + Task DeleteAsync(string entityName, string id); +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataRepositories/ITableDataRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataRepositories/ITableDataRepository.cs new file mode 100644 index 00000000..91a2c315 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataRepositories/ITableDataRepository.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; + +namespace H.LowCode.RenderEngine.Domain; + +public interface ITableDataRepository : IRepository +{ + +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/EntityBase.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/EntityBase.cs new file mode 100644 index 00000000..698813b2 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/EntityBase.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.RenderEngine.Domain; + +public abstract class EntityBase +{ + protected EntityBase() + { + } + + public DateTime CreatedTime { get; set; } + + public string CreatedUser { get; set; } + + public DateTime ModifiedTime { get; set; } + + public string ModifiedUser { get; set; } +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/FormEntity.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/FormEntity.cs new file mode 100644 index 00000000..636a15ec --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/FormEntity.cs @@ -0,0 +1,15 @@ +using H.LowCode.MetaSchema; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.RenderEngine.Domain; + +public class FormEntity : EntityBase +{ + public string Name { get; set; } + + public Dictionary Fields { get; set; } = []; +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/TableEntity.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/TableEntity.cs new file mode 100644 index 00000000..65e5285e --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/TableEntity.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.RenderEngine.Domain; + +internal class TableEntity : EntityBase +{ +} diff --git a/src/Common/H.LowCode.Repository.JsonFile/H.LowCode.Repository.JsonFile.csproj b/src/RenderEngine/H.LowCode.RenderEngine.Domain/H.LowCode.RenderEngine.Domain.csproj similarity index 48% rename from src/Common/H.LowCode.Repository.JsonFile/H.LowCode.Repository.JsonFile.csproj rename to src/RenderEngine/H.LowCode.RenderEngine.Domain/H.LowCode.RenderEngine.Domain.csproj index 14e81e50..9be82620 100644 --- a/src/Common/H.LowCode.Repository.JsonFile/H.LowCode.Repository.JsonFile.csproj +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/H.LowCode.RenderEngine.Domain.csproj @@ -4,11 +4,11 @@ + - - - + + diff --git a/src/Common/H.LowCode.Domain/MetaDomainServices/AppDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/AppDomainService.cs similarity index 73% rename from src/Common/H.LowCode.Domain/MetaDomainServices/AppDomainService.cs rename to src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/AppDomainService.cs index bfde9bee..663f0259 100644 --- a/src/Common/H.LowCode.Domain/MetaDomainServices/AppDomainService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/AppDomainService.cs @@ -1,8 +1,8 @@ -using H.LowCode.Domain.Repositories; +using H.LowCode.RenderEngine.Domain.Repositories; using H.LowCode.MetaSchema; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.RenderEngine.Domain; public class AppDomainService : DomainService, IAppDomainService { @@ -22,9 +22,4 @@ public class AppDomainService : DomainService, IAppDomainService { return await _repository.GetAsync(appId); } - - public async Task SaveAsync(AppSchema appSchema) - { - await _repository.SaveAsync(appSchema); - } } \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/DataSourceDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/DataSourceDomainService.cs new file mode 100644 index 00000000..8f67ec74 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/DataSourceDomainService.cs @@ -0,0 +1,37 @@ +using H.LowCode.RenderEngine.Domain.Repositories; +using H.LowCode.MetaSchema; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.RenderEngine.Domain; + +public class DataSourceDomainService : DomainService, IDataSourceDomainService +{ + private readonly IDataSourceRepository _repository; + + public DataSourceDomainService(IDataSourceRepository repository) + { + _repository = repository; + } + + public async Task> GetListAsync(string appId) + { + return await _repository.GetListAsync(appId); + } + + public async Task> GetAllApisAsync(string appId) + { + var list = await GetListAsync(appId); + return list.Where(t => t.DataSourceType == ComponentDataSourceTypeEnum.API).ToList(); + } + + public IEnumerable GetAllEntities(string appId) + { + var list = GetListAsync(appId).Result; + return list.Where(t => t.DataSourceType == ComponentDataSourceTypeEnum.Table).ToList(); + } + + public async Task GetAsync(string appId, string id) + { + return await _repository.GetAsync(appId, id); + } +} \ No newline at end of file diff --git a/src/Common/H.LowCode.Domain/MetaDomainServices/IAppDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IAppDomainService.cs similarity index 74% rename from src/Common/H.LowCode.Domain/MetaDomainServices/IAppDomainService.cs rename to src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IAppDomainService.cs index 86b56a64..680440b9 100644 --- a/src/Common/H.LowCode.Domain/MetaDomainServices/IAppDomainService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IAppDomainService.cs @@ -1,13 +1,11 @@ using H.LowCode.MetaSchema; using Volo.Abp.Domain.Services; -namespace H.LowCode.Domain; +namespace H.LowCode.RenderEngine.Domain; public interface IAppDomainService : IDomainService { Task> GetListAsync(); - Task SaveAsync(AppSchema appSchema); - Task GetAsync(string appId); } \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IDataSourceDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IDataSourceDomainService.cs new file mode 100644 index 00000000..a6d34c39 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IDataSourceDomainService.cs @@ -0,0 +1,15 @@ +using H.LowCode.MetaSchema; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.RenderEngine.Domain; + +public interface IDataSourceDomainService : IDomainService +{ + Task> GetListAsync(string appId); + + Task> GetAllApisAsync(string appId); + + IEnumerable GetAllEntities(string appId); + + Task GetAsync(string appId, string id); +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IMenuDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IMenuDomainService.cs new file mode 100644 index 00000000..f7cefa54 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IMenuDomainService.cs @@ -0,0 +1,11 @@ +using H.LowCode.MetaSchema; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.RenderEngine.Domain; + +public interface IMenuDomainService : IDomainService +{ + Task GetAsync(string appId, string menuId); + + Task> GetListAsync(string appId); +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IMetaDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IMetaDomainService.cs new file mode 100644 index 00000000..667b9e4d --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IMetaDomainService.cs @@ -0,0 +1,8 @@ +using Volo.Abp.Domain.Services; + +namespace H.LowCode.RenderEngine.Domain; + +public interface IMetaDomainService : IDomainService +{ + +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IPageDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IPageDomainService.cs new file mode 100644 index 00000000..e5c982f2 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/IPageDomainService.cs @@ -0,0 +1,9 @@ +using H.LowCode.MetaSchema.RenderEngine; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.RenderEngine.Domain; + +public interface IPageDomainService : IDomainService +{ + Task GetAsync(string appId, string pageId); +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/MenuDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/MenuDomainService.cs new file mode 100644 index 00000000..eedd7e5b --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/MenuDomainService.cs @@ -0,0 +1,25 @@ +using H.LowCode.RenderEngine.Domain.Repositories; +using H.LowCode.MetaSchema; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.RenderEngine.Domain; + +public class MenuDomainService : DomainService, IMenuDomainService +{ + private readonly IMenuRepository _repository; + + public MenuDomainService(IMenuRepository repository) + { + _repository = repository; + } + + public async Task> GetListAsync(string appId) + { + return await _repository.GetListAsync(appId); + } + + public async Task GetAsync(string appId, string menuId) + { + return await _repository.GetAsync(appId, menuId); + } +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/MetaDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/MetaDomainService.cs new file mode 100644 index 00000000..83b721a2 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/MetaDomainService.cs @@ -0,0 +1,8 @@ +using Volo.Abp.Domain.Services; + +namespace H.LowCode.RenderEngine.Domain; + +public class MetaDomainService : DomainService, IMetaDomainService +{ + +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/PageDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/PageDomainService.cs new file mode 100644 index 00000000..f37aefeb --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/PageDomainService.cs @@ -0,0 +1,20 @@ +using H.LowCode.RenderEngine.Domain.Repositories; +using H.LowCode.MetaSchema.RenderEngine; +using Volo.Abp.Domain.Services; + +namespace H.LowCode.RenderEngine.Domain; + +public class PageDomainService : DomainService, IPageDomainService +{ + private readonly IPageRepository _repository; + + public PageDomainService(IPageRepository repository) + { + _repository = repository; + } + + async Task IPageDomainService.GetAsync(string appId, string pageId) + { + return await _repository.GetAsync(appId, pageId); + } +} \ No newline at end of file diff --git a/src/Common/H.LowCode.Domain/MetaRepositories/IAppRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IAppRepository.cs similarity index 69% rename from src/Common/H.LowCode.Domain/MetaRepositories/IAppRepository.cs rename to src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IAppRepository.cs index 340e6c12..8df79a10 100644 --- a/src/Common/H.LowCode.Domain/MetaRepositories/IAppRepository.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IAppRepository.cs @@ -1,13 +1,11 @@ using H.LowCode.MetaSchema; using Volo.Abp.Domain.Repositories; -namespace H.LowCode.Domain.Repositories; +namespace H.LowCode.RenderEngine.Domain.Repositories; public interface IAppRepository { Task> GetListAsync(); Task GetAsync(string appId); - - Task SaveAsync(AppSchema appSchema); } \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IDataSourceRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IDataSourceRepository.cs new file mode 100644 index 00000000..b13f2ab9 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IDataSourceRepository.cs @@ -0,0 +1,10 @@ +using H.LowCode.MetaSchema; + +namespace H.LowCode.RenderEngine.Domain.Repositories; + +public interface IDataSourceRepository +{ + Task> GetListAsync(string appId); + + Task GetAsync(string appId, string id); +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IMenuRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IMenuRepository.cs new file mode 100644 index 00000000..b7913359 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IMenuRepository.cs @@ -0,0 +1,11 @@ +using H.LowCode.MetaSchema; +using Volo.Abp.Domain.Repositories; + +namespace H.LowCode.RenderEngine.Domain.Repositories; + +public interface IMenuRepository +{ + Task GetAsync(string appId, string menuId); + + Task> GetListAsync(string appId); +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IPageRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IPageRepository.cs new file mode 100644 index 00000000..37068166 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaRepositories/IPageRepository.cs @@ -0,0 +1,8 @@ +using H.LowCode.MetaSchema.RenderEngine; + +namespace H.LowCode.RenderEngine.Domain.Repositories; + +public interface IPageRepository +{ + Task GetAsync(string appId, string pageId); +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/RenderEngineDomainModule.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/RenderEngineDomainModule.cs new file mode 100644 index 00000000..94cc6959 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/RenderEngineDomainModule.cs @@ -0,0 +1,11 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; + +namespace H.LowCode.RenderEngine.Domain; + +public class RenderEngineDomainModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + } +} diff --git a/src/Common/H.LowCode.EntityFrameworkCore/DataRepositories/FormDataRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs similarity index 78% rename from src/Common/H.LowCode.EntityFrameworkCore/DataRepositories/FormDataRepository.cs rename to src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs index 1d907213..04e15780 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/DataRepositories/FormDataRepository.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs @@ -1,5 +1,5 @@ -using H.LowCode.Domain; -using H.LowCode.MetaSchema; +using H.LowCode.MetaSchema; +using H.LowCode.RenderEngine.Domain; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; @@ -8,14 +8,14 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.RenderEngine.EntityFrameworkCore; public class FormDataRepository : IFormDataRepository { - private LowCodeDbContext _dbContext; + private RenderEngineDbContext _dbContext; public bool? IsChangeTrackingEnabled => true; - public FormDataRepository(LowCodeDbContext dbContext) + public FormDataRepository(RenderEngineDbContext dbContext) { _dbContext = dbContext; } diff --git a/src/Common/H.LowCode.EntityFrameworkCore/DataRepositories/TableDataRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/TableDataRepository.cs similarity index 60% rename from src/Common/H.LowCode.EntityFrameworkCore/DataRepositories/TableDataRepository.cs rename to src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/TableDataRepository.cs index 5448e16c..ea711dc5 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/DataRepositories/TableDataRepository.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/TableDataRepository.cs @@ -1,17 +1,17 @@ -using H.LowCode.Domain; +using H.LowCode.RenderEngine.Domain; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.RenderEngine.EntityFrameworkCore; public class TableDataRepository : ITableDataRepository { public bool? IsChangeTrackingEnabled => true; - public TableDataRepository(LowCodeDbContext dbContext) + public TableDataRepository(RenderEngineDbContext dbContext) { } } diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs new file mode 100644 index 00000000..d7802524 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs @@ -0,0 +1,41 @@ +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using Microsoft.EntityFrameworkCore.Metadata; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.RenderEngine.EntityFrameworkCore; + +public static class BuilderExtensions +{ + public static EntityTypeBuilder IsReadOnly(this EntityTypeBuilder builder) + { + ArgumentNullException.ThrowIfNull(builder, nameof(builder)); + var metadata = builder.Metadata; + metadata.AddAnnotation("Custom:ReadOnly", false); + return builder; + } + + public static EntityTypeBuilder IsReadOnly(this EntityTypeBuilder builder, bool readOnly = true) + { + ArgumentNullException.ThrowIfNull(builder, nameof(builder)); + var metadata = builder.Metadata; + var props = metadata.GetProperties(); + + foreach (var prop in props) + { + prop.SetAfterSaveBehavior(readOnly ? PropertySaveBehavior.Throw : PropertySaveBehavior.Save); + } + + return builder; + } + + public static PropertyBuilder IsReadOnly(this PropertyBuilder prop, bool readOnly = true) + { + ArgumentNullException.ThrowIfNull(prop, nameof(prop)); + prop.Metadata.SetAfterSaveBehavior(readOnly ? PropertySaveBehavior.Throw : PropertySaveBehavior.Save); + return prop; + } +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/CustomizeRelationalModelValidator.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/CustomizeRelationalModelValidator.cs new file mode 100644 index 00000000..c266032c --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/CustomizeRelationalModelValidator.cs @@ -0,0 +1,49 @@ +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.SqlServer.Infrastructure.Internal; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JetBrains.Annotations; + +namespace H.LowCode.RenderEngine.EntityFrameworkCore; + +/// +/// 重写ModelValidator 确保表可以重复注册 +/// +#pragma warning disable EF1001 // Internal EF Core API usage. +internal class CustomizeRelationalModelValidator : SqlServerModelValidator +#pragma warning restore EF1001 // Internal EF Core API usage. +{ + /// + /// Creates a new instance of . + /// + /// Parameter object containing dependencies for this service. + /// Parameter object containing relational dependencies for this service. + public CustomizeRelationalModelValidator( + ModelValidatorDependencies dependencies, RelationalModelValidatorDependencies relationalDependencies) + : base(dependencies, relationalDependencies) + { + } + + /// + /// Validates the mapping/configuration of shared tables in the model. + /// + /// The model to validate. + /// The logger to use. + protected override void ValidateSharedTableCompatibility( + IModel model, IDiagnosticsLogger logger) + { + + } + + protected override void ValidateClrInheritance( + [NotNull] IModel model, [NotNull] IDiagnosticsLogger logger) + { + + } +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/MapModelCacheKeyFactory.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/MapModelCacheKeyFactory.cs new file mode 100644 index 00000000..f3a1c4cd --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/MapModelCacheKeyFactory.cs @@ -0,0 +1,18 @@ +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.RenderEngine.EntityFrameworkCore; + +internal class MapModelCacheKeyFactory : IModelCacheKeyFactory +{ + public object Create(DbContext context, bool designTime) + { + var lowCodeDbContext = (RenderEngineDbContext)context; + return Tuple.Create(context.GetType(), lowCodeDbContext.AppId); + } +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/QueryWithNoLockDbCommandInterceptor.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/QueryWithNoLockDbCommandInterceptor.cs new file mode 100644 index 00000000..d2e7ff8f --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/QueryWithNoLockDbCommandInterceptor.cs @@ -0,0 +1,36 @@ +using Microsoft.EntityFrameworkCore.Diagnostics; +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace H.LowCode.RenderEngine.EntityFrameworkCore; + +/// +/// SQL执行前进行拦截,加上WITH (NOLOCK) +/// +internal class QueryWithNoLockDbCommandInterceptor : DbCommandInterceptor +{ + private static readonly Regex TableAliasRegex = + new Regex(@"(?(FROM|JOIN) \[[a-zA-Z]\w*\] AS \[[a-zA-Z]\w*\](?! WITH \(NOLOCK\)))", + RegexOptions.Multiline | RegexOptions.Compiled | RegexOptions.IgnoreCase); + + /// + /// 执行sql前进行拦截并修改sql为支持WITH (NOLOCK) + /// + /// + /// + /// + /// + public override InterceptionResult ReaderExecuting(DbCommand command, CommandEventData eventData, InterceptionResult result) + { + command.CommandText = TableAliasRegex.Replace( + command.CommandText, + "${tableAlias} WITH (NOLOCK)" + ); + return result; + } +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/ReadOnlySaveChangesInterceptor.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/ReadOnlySaveChangesInterceptor.cs new file mode 100644 index 00000000..a17be3e1 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/ReadOnlySaveChangesInterceptor.cs @@ -0,0 +1,41 @@ +using Microsoft.EntityFrameworkCore.Diagnostics; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.RenderEngine.EntityFrameworkCore; + +public class ReadOnlySaveChangesInterceptor : SaveChangesInterceptor +{ + private void DetectReadOnly(DbContext context) + { + foreach (var entry in context.ChangeTracker.Entries().Where(e => IsReadOnly(context, e.Entity) && (e.State == EntityState.Deleted || e.State == EntityState.Modified || e.State == EntityState.Added))) + { + throw new InvalidOperationException($"Entity {entry.Entity.GetType()} is marked as read-only."); + } + } + + private bool IsReadOnly(DbContext context, object entity) + { + if (context.Entry(entity).Metadata.FindAnnotation("Custom:ReadOnly")?.Value is bool readOnly) + { + return readOnly; + } + return false; + } + + public override InterceptionResult SavingChanges(DbContextEventData eventData, InterceptionResult result) + { + DetectReadOnly(eventData.Context); + return base.SavingChanges(eventData, result); + } + + public override ValueTask> SavingChangesAsync(DbContextEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) + { + DetectReadOnly(eventData.Context); + return base.SavingChangesAsync(eventData, result, cancellationToken); + } +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/RenderEngineDbContext.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/RenderEngineDbContext.cs new file mode 100644 index 00000000..32768ddd --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/RenderEngineDbContext.cs @@ -0,0 +1,217 @@ +using H.LowCode.RenderEngine.Domain; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata.Builders; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; + +namespace H.LowCode.RenderEngine.EntityFrameworkCore; + +public class RenderEngineDbContext : DbContext +{ + public string AppId { get; private set; } + + private DbContextOptions _dbOptions; + private EntityTypeManager _entityTypeManager; + + public RenderEngineDbContext(DbContextOptions options, + EntityTypeManager entityTypeManager) : base(options) + { + _dbOptions = options; + _entityTypeManager = entityTypeManager; + } + + public async Task AddAsync(FormEntity formEntity) + { + var entityType = GetEntityType(formEntity.Name); + dynamic entity = Activator.CreateInstance(entityType); + + foreach (var field in formEntity.Fields) + { + var propertyInfoName = entityType.GetProperty(field.Key); + propertyInfoName.SetValue(entity, field.Value); + } + + Add(entity); + await SaveChangesAsync(); + return true; + } + + public async Task UpdateAsync(FormEntity formEntity) + { + var entityType = GetEntityType(formEntity.Name); + dynamic entity = Activator.CreateInstance(entityType); + + foreach (var field in formEntity.Fields) + { + var propertyInfoName = entityType.GetProperty(field.Key); + propertyInfoName.SetValue(entity, field.Value); + } + + Update(entity); + await SaveChangesAsync(); + return true; + } + + public async Task GetAsync(string tableName, string id) + { + var entityType = GetEntityType(tableName); + var entity = await FindAsync(entityType, id); + if (entity == null) + return null; + + FormEntity formEntity = new FormEntity(); + foreach (var property in entityType.GetProperties()) + { + var propertyValue = property.GetValue(entity); + formEntity.Fields[property.Name] = propertyValue; + } + return formEntity; + } + + public int SaveChangesAsync(FormEntity formEntity) + { + var entityType = GetEntityType(formEntity.Name); + + var entries = ChangeTracker.Entries().Where(e => e.Entity.GetType() == entityType); + foreach (var entry in entries) + { + if (entry.State == EntityState.Deleted) + { + // 这里可以添加删除逻辑,比如从数据库中实际删除记录 + } + else if (entry.State == EntityState.Modified) + { + // 这里可以添加更新逻辑,比如更新数据库中的记录 + } + else if (entry.State == EntityState.Added) + { + // 这里可以添加插入逻辑,比如插入新记录到数据库 + } + } + + return base.SaveChanges(); + } + + public Type GetEntityType(string tableName) + { + var entityTypes = this.Model.GetEntityTypes(); + var entityType = entityTypes.FirstOrDefault(t => t.ClrType.Name == tableName); + if (entityType == null) + throw new ArgumentException($"Entity type '{tableName}' not found."); + return entityType.ClrType; + } + + /// + /// + /// + /// + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.AddInterceptors(new ReadOnlySaveChangesInterceptor()); + + //设置连接字符串 + //optionsBuilder.UseSqlServer(""); + + //注册EFcore拦截器,对需要With(NoLock)查询linq进行拦截修改Sql语句 + optionsBuilder.AddInterceptors(new QueryWithNoLockDbCommandInterceptor()); + //表重复注册 + optionsBuilder.ReplaceService(); + //Linq查询扩展 + //optionsBuilder.ReplaceService(); + + //Entity Attributes填充 + //optionsBuilder.ReplaceService(); + //实体中不可空类型支持 + //optionsBuilder.ReplaceService(); + + base.OnConfiguring(optionsBuilder); + } + + /// + /// + /// + /// + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + var dynamicEntities = _entityTypeManager.LoadDynamicEntities(); + for (var i = 0; i < dynamicEntities.Count(); i++) + { + var dynamicEntity = dynamicEntities[i]; + + //表映射 + var entityBuilder = modelBuilder.Entity(dynamicEntity.EntityType) + .ToTable(dynamicEntity.EntityName); + //属性映射 + ConfigureProperties(entityBuilder, dynamicEntity, dynamicEntity.EntityType); + //主键 + entityBuilder.HasKey(dynamicEntity.PrimaryKey); + //逻辑删除过滤 + if (dynamicEntity.EnableSoftDelete) + { + modelBuilder.Entity(dynamicEntity.EntityType, entityBuilder => + { + entityBuilder.HasQueryFilter(SoftDeleteQueryFilterExpression(dynamicEntity.EntityType)); + }); + } + } + + base.OnModelCreating(modelBuilder); + } + + private void ConfigureProperties(EntityTypeBuilder entityBuilder, DynamicEntityInfo dynamicEntity, Type entityType) + { + foreach (var field in dynamicEntity.Fields) + { + if(field.Name == dynamicEntity.PrimaryKey) + { + field.MaxLength = 50; + field.IsUnicode = false; + field.IsNullable = false; + } + + //映射字段 + PropertyBuilder propertyBuilder = entityBuilder.Property(field.ClrType, field.Name); + + //映射字段类型 + if (field.ClrType == typeof(string)) + { + propertyBuilder.HasMaxLength(field.MaxLength ?? 50); + propertyBuilder.IsUnicode(field.IsUnicode ?? true); + } + else if (field.ClrType == typeof(int)) + { + propertyBuilder.HasMaxLength(field.MaxLength ?? 10); + } + else if (field.ClrType == typeof(decimal)) + { + propertyBuilder.HasPrecision(field.Precision ?? 12, field.Scale ?? 2); + } + + if (field.DefaultValue != null) + propertyBuilder.HasDefaultValue(field.DefaultValue); + + if (!field.IsNullable) + propertyBuilder.IsRequired(); + + if (!string.IsNullOrEmpty(field.Comment)) + propertyBuilder.HasComment(field.Comment); + } + } + + /// + /// 逻辑删除过滤 + /// + /// + /// + private LambdaExpression SoftDeleteQueryFilterExpression(Type entityClrType) + { + var parameter = Expression.Parameter(entityClrType, "entity"); + var member = Expression.Property(parameter, "IsDeleted"); + var body = Expression.Equal(member, Expression.Constant(0)); + return Expression.Lambda(body, parameter); + } +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs new file mode 100644 index 00000000..51eef449 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.RenderEngine.EntityFrameworkCore; + +public class DynamicEntityInfo +{ + public string EntityName { get; set; } + + public string PrimaryKey { get; set; } + + public Type EntityType { get; set; } + + public bool EnableSoftDelete { get; set; } + + public IEnumerable Fields { get; set; } +} + +public class DynamicEntityField +{ + public string Name { get; set; } + + /// + /// 字段类型 (CLR 类型) + /// + public Type ClrType { get; set; } + + /// + /// 最大长度 + /// + /// 仅string类型字段有效 + public int? MaxLength { get; set; } + + /// + /// 是否 Unicode 字符 + /// + /// 仅string类型字段有效 + public bool? IsUnicode { get; set; } + + /// + /// 精度(最大长度) + /// + /// 仅decimal类型字段有效 + public int? Precision { get; set; } + + /// + /// 范围(小数位数) + /// + /// 仅decimal类型字段有效 + public int? Scale { get; set; } + + /// + /// 是否可空 + /// + public bool IsNullable { get; set; } + + /// + /// 默认值 + /// + public object DefaultValue { get; set; } + + /// + /// 字段注释 + /// + public string Comment { get; set; } +} \ No newline at end of file diff --git a/src/Common/H.LowCode.EntityFrameworkCore/EntityManager/EntityFactory.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs similarity index 96% rename from src/Common/H.LowCode.EntityFrameworkCore/EntityManager/EntityFactory.cs rename to src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs index d3640dda..d06681e8 100644 --- a/src/Common/H.LowCode.EntityFrameworkCore/EntityManager/EntityFactory.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs @@ -5,9 +5,9 @@ using System.Reflection.Emit; using System.Reflection; using System.Text; using System.Threading.Tasks; -using H.LowCode.Domain; +using H.LowCode.RenderEngine.Domain; -namespace H.LowCode.EntityFrameworkCore; +namespace H.LowCode.RenderEngine.EntityFrameworkCore; public class EntityFactory { diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs new file mode 100644 index 00000000..edfa819f --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs @@ -0,0 +1,557 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Emit; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; +using H.LowCode.RenderEngine.Domain; + +namespace H.LowCode.RenderEngine.EntityFrameworkCore; + +public class EntityProxyBuilder +{ + private readonly Type _targeType; + private readonly TypeBuilder _typeBuilder; + private readonly IEnumerable _virtualProperties; + private ILGenerator _typeInitGenerator; + private static readonly TypeCache s_typeCache; + private static readonly object[] s_emptyArgs = new object[0]; + private static readonly string s_memberPrefix = "__"; + + static EntityProxyBuilder() + { + s_typeCache = new TypeCache(); + } + + private FieldBuilder _fieldBuilder; + + + /// + /// 初始化 类的新实例。 + /// + public EntityProxyBuilder(Type targeType, TypeBuilder typeBuilder, IEnumerable virtualProperties) + { + this._targeType = targeType; + this._typeBuilder = typeBuilder; + this._virtualProperties = virtualProperties; + } + + public Type Build() + { + this.DeclareType(); + + this.DeclareFieldsAndStaticConstructorHeader(); + + //重写所有的虚属性 + foreach (PropertyInfo propertyInfo in this._virtualProperties) + this.DeclareProperty(propertyInfo); + + this.DeclareFieldsAndStaticConstructorFooder(); + + return this._typeBuilder.CreateTypeInfo(); + } + + /// + /// 定义类型。 + /// + private void DeclareType() + { + //[Serializable] 可序列化标记。 + CustomAttributeBuilder serializableAttributeBuilder = new CustomAttributeBuilder(s_typeCache.SerializableAttributeConstructorInfo, s_emptyArgs); + this._typeBuilder.SetCustomAttribute(serializableAttributeBuilder); + if (this._targeType != typeof(EntityBase)) + { + //自定义实体不能直接得到实体的名称。 + //[XmlRoot("MyEntity")] Xml序列化标记。 + //TODO + CustomAttributeBuilder xmlRootAttributeBuilder = new CustomAttributeBuilder(s_typeCache.XmlRootAttributeConstructorInfo, new object[] { "EntityNameCache.GetEntityName(this._targeType)" }); + this._typeBuilder.SetCustomAttribute(xmlRootAttributeBuilder); + } + } + + /// + /// 定义字段和构造函数。 + /// + private void DeclareFieldsAndStaticConstructorHeader() + { + MethodInfo getEntityFieldInfoMethodInfo = s_typeCache.GetEntityFieldInfoMethodInfo; + + //定义 Dictionary 字段,用于缓存实体本身定义的字段。 + this._fieldBuilder = this._typeBuilder.DefineField(s_memberPrefix + "dictionary", getEntityFieldInfoMethodInfo.ReturnType, FieldAttributes.Private | FieldAttributes.SpecialName | FieldAttributes.Static | FieldAttributes.InitOnly); + + //静态构造函数。 + ConstructorBuilder constructorBuilder = this._typeBuilder.DefineTypeInitializer(); + this._typeInitGenerator = constructorBuilder.GetILGenerator(); + + this._typeInitGenerator.DeclareLocal(typeof(string)); //FieldName + //TODO + //this._typeInitGenerator.DeclareLocal(typeof(EntityFieldInfo)); + + //初始化默静态字段 __dictionary = new Dictionary(StringComparer.OrdinalIgnoreCase); + PropertyInfo ordinalIgnoreCasePropertyInfo = typeof(StringComparer).GetProperty("OrdinalIgnoreCase"); + + this._typeInitGenerator.Emit(OpCodes.Call, ordinalIgnoreCasePropertyInfo.GetMethod); + ConstructorInfo constructorInfo = getEntityFieldInfoMethodInfo.ReturnType.GetConstructor(new Type[] { typeof(StringComparer) }); + this._typeInitGenerator.Emit(OpCodes.Newobj, constructorInfo); + this._typeInitGenerator.Emit(OpCodes.Stsfld, this._fieldBuilder); + + //重写抽象方法:Dictionary GetEntityFieldInfo() + MethodBuilder getEntityFieldInfoMethodBuilder = this._typeBuilder.DefineMethod(getEntityFieldInfoMethodInfo.Name, MethodAttributes.Virtual | MethodAttributes.Family | MethodAttributes.HideBySig, getEntityFieldInfoMethodInfo.ReturnType, Type.EmptyTypes); + ILGenerator getEntityFieldInfoGenerator = getEntityFieldInfoMethodBuilder.GetILGenerator(); + //直接返回静态字段 + getEntityFieldInfoGenerator.Emit(OpCodes.Ldsfld, this._fieldBuilder); + getEntityFieldInfoGenerator.Emit(OpCodes.Ret); + } + + private void DeclareFieldsAndStaticConstructorFooder() + { + this._typeInitGenerator.Emit(OpCodes.Ret); + } + + /// + /// 定义属性。 + /// + private void DeclareProperty(PropertyInfo propertyInfo) + { + //获取属性在数据库对应的字段。 + //TODO + //EntityColumnAttribute entityColumnAttribute = propertyInfo.GetMyAttribute(); + //string fieldName = entityColumnAttribute == null || string.IsNullOrEmpty(entityColumnAttribute.ColumnName) ? propertyInfo.Name : entityColumnAttribute.ColumnName; + string fieldName = string.Empty; + + PropertyBuilder propertyBuilder = this._typeBuilder.DefineProperty(propertyInfo.Name, PropertyAttributes.None, propertyInfo.PropertyType, Type.EmptyTypes); + + this.BuildGetMethod(propertyInfo, propertyBuilder); + + this.BuidSetMethod(propertyInfo, fieldName, propertyBuilder); + + MethodBuilder staticGetMathodBuilder = this.BuildStaticGetMethod(propertyInfo); + + MethodBuilder staticSetMathodBuilder = this.BuildStaticSetMethod(propertyInfo, propertyBuilder); + + MethodBuilder setNoChangeMathodBuilder = BuildSetValueNoChange(propertyInfo); + + MethodBuilder staticSetNoChangeMathodBuilder = this.BuildStaticSetValueNoChange(propertyInfo, setNoChangeMathodBuilder); + + this.BuildPropertyStaticConstructor(propertyInfo, fieldName, staticSetMathodBuilder, staticSetNoChangeMathodBuilder, staticGetMathodBuilder); + + } + + + private void BuildPropertyStaticConstructor(PropertyInfo propertyInfo, string fieldName, MethodBuilder staticSetMathodBuilder, MethodBuilder staticSetNoChangeMathodBuilder, MethodBuilder staticGetMathodBuilder) + { + #region 静态构造函数 + + //生成该属性的实体信息 + _typeInitGenerator.Emit(OpCodes.Ldstr, fieldName); //这里要使用别名; + + // 这里就是入栈啊,由于代码规范,我需要在这里写这句废话。 + // 之后是字符串入栈啊。 + _typeInitGenerator.Emit(OpCodes.Stloc_0); + _typeInitGenerator.Emit(OpCodes.Ldsfld, this._fieldBuilder); + + // 其实以下几行,就是为了完成一个new操作。 + // 然后把参数传递给类型的构造函数。 + // new EntityFieldInfo(); + _typeInitGenerator.Emit(OpCodes.Ldloc_0); + _typeInitGenerator.Emit(OpCodes.Newobj, s_typeCache.EntityFieldInfoCconstructorInfo); + _typeInitGenerator.Emit(OpCodes.Stloc_1); + _typeInitGenerator.Emit(OpCodes.Ldloc_1); + + //这里就是入栈一个字符串名称啊。 + //EntityFieldInfo.FieldName + _typeInitGenerator.Emit(OpCodes.Ldloc_0); + _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.FieldNameFieldInfo); + + + this.BuildEnumDescriptionColumnName(propertyInfo); + + this.BuildFieldType(propertyInfo); + + this.BuildSetValueAction(staticSetMathodBuilder); + + this.BuildSetValueNoChangeAction(staticSetNoChangeMathodBuilder); + + this.BuildEntityInfoGetValueFun(staticGetMathodBuilder); + + this.BuildOtherField(); + + #endregion + } + + + #region Build EntityFieldInfo + + private void BuildSetValueNoChangeAction(MethodBuilder staticSetNoChangeMathodBuilder) + { + //EntityFieldInfo.SetValueNoChangeAction + _typeInitGenerator.Emit(OpCodes.Ldloc_1); + _typeInitGenerator.Emit(OpCodes.Ldnull); + _typeInitGenerator.Emit(OpCodes.Ldftn, staticSetNoChangeMathodBuilder); + _typeInitGenerator.Emit(OpCodes.Newobj, s_typeCache.ActionConstructorInfo); + _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.SetValueNoChangeActionFieldInfo); + } + + private void BuildSetValueAction(MethodBuilder staticSetMathodBuilder) + { + //EntityFieldInfo.SetValueAction + _typeInitGenerator.Emit(OpCodes.Ldloc_1); + _typeInitGenerator.Emit(OpCodes.Ldnull); + _typeInitGenerator.Emit(OpCodes.Ldftn, staticSetMathodBuilder); + _typeInitGenerator.Emit(OpCodes.Newobj, s_typeCache.ActionConstructorInfo); + _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.SetValueActionFieldInfo); + } + + private void BuildFieldType(PropertyInfo propertyInfo) + { + //EntityFieldInfo.FieldType + _typeInitGenerator.Emit(OpCodes.Ldloc_1); + _typeInitGenerator.Emit(OpCodes.Ldtoken, propertyInfo.PropertyType); + _typeInitGenerator.Emit(OpCodes.Call, s_typeCache.GetTypeFromHandleMethodInfo); + _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.FieldTypeFieldInfo); + } + + private void BuildEnumDescriptionColumnName(PropertyInfo propertyInfo) + { + //EntityFieldInfo.EnumDescriptionColumnName + //就是为了实现以上写法 + //TODO + //EnumColumnAttribute enumColumnAttribute = propertyInfo.GetMyAttribute(); + //if (enumColumnAttribute != null) + //{ + // string descriptionColumnName = enumColumnAttribute.DescriptionColumnName; + + // //这里就是为了得到一个等于啊 + // //EnumDescriptionColumnName = "OfficePhone", + // _typeInitGenerator.Emit(OpCodes.Ldloc_1); + // //压入字符串 + // _typeInitGenerator.Emit(OpCodes.Ldstr, descriptionColumnName); + // _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.EnumDescriptionColumnNameFieldInfo); + + // if (enumColumnAttribute.TargetType != null) + // { + // //这里也是为了得到一个等于,Emit就是这么蛋疼。 + // //EnumDescriptionColumnType = typeof(UserKind), + // _typeInitGenerator.Emit(OpCodes.Ldloc_1); + // _typeInitGenerator.Emit(OpCodes.Ldtoken, enumColumnAttribute.TargetType); + // //调用方法 + // _typeInitGenerator.Emit(OpCodes.Call, s_typeCache.GetTypeFromHandleMethodInfo); + // _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.EnumDescriptionColumnTypeFieldInfo); + + // } + //} + } + + private void BuildEntityInfoGetValueFun(MethodBuilder staticGetMathodBuilder) + { + //EntityFieldInfo.GetValueFunc + _typeInitGenerator.Emit(OpCodes.Ldloc_1); + _typeInitGenerator.Emit(OpCodes.Ldnull); + _typeInitGenerator.Emit(OpCodes.Ldftn, staticGetMathodBuilder); + _typeInitGenerator.Emit(OpCodes.Newobj, s_typeCache.FuncConstructorInfo); + _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.GetValueFuncFieldInfo); + } + + private void BuildOtherField() + { + //EntityFieldInfo.JsonIgnore + _typeInitGenerator.Emit(OpCodes.Ldloc_1); + _typeInitGenerator.Emit(OpCodes.Ldc_I4_0); + _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.JsonIgnoreFieldInfo); + + //EntityFieldInfo.IsVirtual + _typeInitGenerator.Emit(OpCodes.Ldloc_1); + _typeInitGenerator.Emit(OpCodes.Ldc_I4_1); + _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.IsVirtualFieldInfo); + + _typeInitGenerator.Emit(OpCodes.Ldloc_1); + _typeInitGenerator.Emit(OpCodes.Callvirt, s_typeCache.DictionaryAddMethodInfo); + } + + #endregion + + #region Build PropertyInfo + + private MethodBuilder BuildStaticSetValueNoChange(PropertyInfo propertyInfo, MethodBuilder setNoChangeMathodBuilder) + { + #region static setValueNoChage + + //生成设置属性值的静态方法(不会修改属性的的状态。): + /* Demo: + private static void __SetUserCodeNoChange(object entity, object value) + { + ((MyUser)entity).__SetUserCodeNoChange(value); + } + */ + + //定义一个方法 + MethodBuilder staticSetNoChangeMathodBuilder = this._typeBuilder.DefineMethod(s_memberPrefix + "Set" + propertyInfo.Name + "NoChange", MethodAttributes.Static | MethodAttributes.Private | MethodAttributes.SpecialName | MethodAttributes.HideBySig, null, new Type[] { typeof(object), typeof(object) }); + + //定义两个参数 + staticSetNoChangeMathodBuilder.DefineParameter(1, ParameterAttributes.None, "entity"); + staticSetNoChangeMathodBuilder.DefineParameter(2, ParameterAttributes.None, "value"); + + //得到il代码 + ILGenerator staticSetNoChangeMethodGenerator = staticSetNoChangeMathodBuilder.GetILGenerator(); + staticSetNoChangeMethodGenerator.Emit(OpCodes.Ldarg_0); + staticSetNoChangeMethodGenerator.Emit(OpCodes.Castclass, this._typeBuilder); + staticSetNoChangeMethodGenerator.Emit(OpCodes.Ldarg_1); + //如栈后调用方法 + staticSetNoChangeMethodGenerator.Emit(OpCodes.Call, setNoChangeMathodBuilder); + staticSetNoChangeMethodGenerator.Emit(OpCodes.Ret); + + #endregion + + return staticSetNoChangeMathodBuilder; + } + + private MethodBuilder BuildSetValueNoChange(PropertyInfo propertyInfo) + { + #region setValueNoChange + + //生成设置属性值的方法(不会修改属性的的状态。): + /* Demo: + private void __SetUserCodeNoChange(object value) + { + base.UserCode = (string)value; + } + */ + MethodBuilder setNoChangeMathodBuilder = this._typeBuilder.DefineMethod(s_memberPrefix + "Set" + propertyInfo.Name + "NoChange", MethodAttributes.Private | MethodAttributes.SpecialName | MethodAttributes.HideBySig, null, new Type[] { typeof(object) }); + setNoChangeMathodBuilder.DefineParameter(1, ParameterAttributes.None, "value"); + + //生成方法,没什么好说的。 + ILGenerator setNoChangeMethodGenerator = setNoChangeMathodBuilder.GetILGenerator(); + setNoChangeMethodGenerator.Emit(OpCodes.Ldarg_0); + setNoChangeMethodGenerator.Emit(OpCodes.Ldarg_1); + + //判断是否值类型 + if (propertyInfo.PropertyType.IsValueType) + { + //如果是值类型,需要装箱。。。 + setNoChangeMethodGenerator.Emit(OpCodes.Unbox_Any, propertyInfo.PropertyType); + } + else + { + //非值类型,做次类型转换 + setNoChangeMethodGenerator.Emit(OpCodes.Castclass, propertyInfo.PropertyType); + } + + //调用Set方法 + setNoChangeMethodGenerator.Emit(OpCodes.Call, propertyInfo.SetMethod); + + //这是设置函数返回值。 + setNoChangeMethodGenerator.Emit(OpCodes.Ret); + + #endregion + + return setNoChangeMathodBuilder; + } + + private MethodBuilder BuildStaticSetMethod(PropertyInfo propertyInfo, PropertyBuilder propertyBuilder) + { + #region SetValue + + //生成设置属性值的静态方法: + /* Demo: + private static void __SetUserCode(object entity, object value) + { + ((MyUser)entity).UserCode = (string)value; + } + */ + MethodBuilder staticSetMathodBuilder = this._typeBuilder.DefineMethod(s_memberPrefix + "Set" + propertyInfo.Name, MethodAttributes.Static | MethodAttributes.Private | MethodAttributes.SpecialName | MethodAttributes.HideBySig, null, new Type[] { typeof(object), typeof(object) }); + + //定义两个参数,entity, value + staticSetMathodBuilder.DefineParameter(1, ParameterAttributes.None, "entity"); + staticSetMathodBuilder.DefineParameter(2, ParameterAttributes.None, "value"); + + //生成方法IL代码 + ILGenerator staticSetMethodGenerator = staticSetMathodBuilder.GetILGenerator(); + + staticSetMethodGenerator.Emit(OpCodes.Ldarg_0); + staticSetMethodGenerator.Emit(OpCodes.Castclass, this._typeBuilder); + staticSetMethodGenerator.Emit(OpCodes.Ldarg_1); + + //值类型则做装箱,非值类型则做类型转换 + if (propertyInfo.PropertyType.IsValueType) + staticSetMethodGenerator.Emit(OpCodes.Unbox_Any, propertyInfo.PropertyType); + else + staticSetMethodGenerator.Emit(OpCodes.Castclass, propertyInfo.PropertyType); + //调用方法 + staticSetMethodGenerator.Emit(OpCodes.Call, propertyBuilder.SetMethod); + //设置返回值 + staticSetMethodGenerator.Emit(OpCodes.Ret); + + #endregion + + return staticSetMathodBuilder; + } + + private void BuildGetMethod(PropertyInfo propertyInfo, PropertyBuilder propertyBuilder) + { + #region override get method + + MethodBuilder getMathodBuilder = this._typeBuilder.DefineMethod(propertyInfo.GetMethod.Name, MethodAttributes.Virtual | MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, propertyInfo.PropertyType, Type.EmptyTypes); + + ILGenerator getMethodGenerator = getMathodBuilder.GetILGenerator(); + + getMethodGenerator.Emit(OpCodes.Ldarg_0); + getMethodGenerator.Emit(OpCodes.Call, propertyInfo.GetMethod); + getMethodGenerator.Emit(OpCodes.Ret); + + propertyBuilder.SetGetMethod(getMathodBuilder); + + #endregion + } + + private MethodBuilder BuildStaticGetMethod(PropertyInfo propertyInfo) + { + #region GetValue + + //生成获取属性值的静态方法: + /* Demo: + private static Guid __GetUserCode(object entity) + { + return ((MyUser)entity).UserCode; + } + */ + MethodBuilder staticGetMathodBuilder = this._typeBuilder.DefineMethod(s_memberPrefix + "Get" + propertyInfo.Name, MethodAttributes.Static | MethodAttributes.Private | MethodAttributes.SpecialName | MethodAttributes.HideBySig, typeof(object), new Type[] { typeof(object) }); + //定义参数 + staticGetMathodBuilder.DefineParameter(1, ParameterAttributes.None, "entity"); + //生成方法IL代码 + ILGenerator staticGetMethodGenerator = staticGetMathodBuilder.GetILGenerator(); + //定义类型 + staticGetMethodGenerator.DeclareLocal(this._targeType); + staticGetMethodGenerator.Emit(OpCodes.Ldarg_0); + + //类型转换后调用方法 + staticGetMethodGenerator.Emit(OpCodes.Castclass, this._targeType); + staticGetMethodGenerator.Emit(OpCodes.Callvirt, propertyInfo.GetMethod); + + if (propertyInfo.PropertyType.IsValueType) + staticGetMethodGenerator.Emit(OpCodes.Box, propertyInfo.PropertyType); + + //入栈,设置返回值 + staticGetMethodGenerator.Emit(OpCodes.Stloc_0); + staticGetMethodGenerator.Emit(OpCodes.Ldloc_0); + staticGetMethodGenerator.Emit(OpCodes.Ret); + + #endregion + + return staticGetMathodBuilder; + } + + private void BuidSetMethod(PropertyInfo propertyInfo, string fieldName, PropertyBuilder propertyBuilder) + { + #region override set method + + MethodBuilder setMathodBuilder = this._typeBuilder.DefineMethod(propertyInfo.SetMethod.Name, MethodAttributes.Virtual | MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, null, new Type[] { propertyInfo.PropertyType }); + + ILGenerator setMethodGenerator = setMathodBuilder.GetILGenerator(); + + setMethodGenerator.Emit(OpCodes.Ldarg_0); + setMethodGenerator.Emit(OpCodes.Ldarg_1); + setMethodGenerator.Emit(OpCodes.Call, propertyInfo.SetMethod); + + setMethodGenerator.Emit(OpCodes.Ldarg_0); + setMethodGenerator.Emit(OpCodes.Ldstr, fieldName); + //设置字段变更 + setMethodGenerator.Emit(OpCodes.Call, s_typeCache.SetFieldChangedMethodInfo); + setMethodGenerator.Emit(OpCodes.Ret); + propertyBuilder.SetSetMethod(setMathodBuilder); + + #endregion + } + + #endregion + + #region 反射过程中使用的缓存类 + + /// + /// 在反射过程中需要使用的的类型。 + /// + private class TypeCache + { + public FieldInfo FieldNameFieldInfo; + + public FieldInfo FieldTypeFieldInfo; + + public FieldInfo SetValueActionFieldInfo; + + public FieldInfo SetValueNoChangeActionFieldInfo; + + public FieldInfo GetValueFuncFieldInfo; + + public FieldInfo JsonIgnoreFieldInfo; + + public FieldInfo IsVirtualFieldInfo; + + //实体枚举值 + public FieldInfo EnumDescriptionColumnNameFieldInfo; + + public FieldInfo EnumDescriptionColumnTypeFieldInfo; + + public MethodInfo GetTypeFromHandleMethodInfo; + + public MethodInfo GetEntityFieldInfoMethodInfo; + + public MethodInfo SetFieldChangedMethodInfo; + + public MethodInfo DictionaryAddMethodInfo; + + public ConstructorInfo EntityFieldInfoCconstructorInfo; + + public ConstructorInfo ActionConstructorInfo; + + public ConstructorInfo FuncConstructorInfo; + + public ConstructorInfo SerializableAttributeConstructorInfo; + + public ConstructorInfo XmlRootAttributeConstructorInfo; + + public TypeCache() + { + //TODO + Type entityFieldInfoType = null;//typeof(EntityFieldInfo); + + FieldNameFieldInfo = entityFieldInfoType.GetField("FieldName"); + + FieldTypeFieldInfo = entityFieldInfoType.GetField("FieldType"); + + SetValueActionFieldInfo = entityFieldInfoType.GetField("SetValueAction"); + + SetValueNoChangeActionFieldInfo = entityFieldInfoType.GetField("SetValueNoChangeAction"); + + GetValueFuncFieldInfo = entityFieldInfoType.GetField("GetValueFunc"); + + JsonIgnoreFieldInfo = entityFieldInfoType.GetField("JsonIgnore"); + + IsVirtualFieldInfo = entityFieldInfoType.GetField("IsVirtual"); + + EnumDescriptionColumnNameFieldInfo = entityFieldInfoType.GetField("EnumDescriptionColumnName"); + + EnumDescriptionColumnTypeFieldInfo = entityFieldInfoType.GetField("EnumDescriptionColumnType"); + + GetTypeFromHandleMethodInfo = typeof(System.Type).GetMethod("GetTypeFromHandle", new Type[] { typeof(RuntimeTypeHandle) }); + + GetEntityFieldInfoMethodInfo = typeof(EntityBase).GetMethod("GetEntityFieldInfo", BindingFlags.Instance | BindingFlags.NonPublic, null, Type.EmptyTypes, null); + + SetFieldChangedMethodInfo = typeof(EntityBase).GetMethod("SetFieldChanged", BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(string) }, null); + + DictionaryAddMethodInfo = GetEntityFieldInfoMethodInfo.ReturnType.GetMethod("Add"); + + EntityFieldInfoCconstructorInfo = entityFieldInfoType.GetConstructor(Type.EmptyTypes); + + ActionConstructorInfo = typeof(Action).GetConstructor(new Type[] { typeof(object), typeof(IntPtr) }); + + FuncConstructorInfo = typeof(Func).GetConstructor(new Type[] { typeof(object), typeof(IntPtr) }); + + SerializableAttributeConstructorInfo = typeof(SerializableAttribute).GetConstructor(Type.EmptyTypes); + + XmlRootAttributeConstructorInfo = typeof(XmlRootAttribute).GetConstructor(new Type[] { typeof(string) }); + + } + } + #endregion +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs new file mode 100644 index 00000000..868ecdde --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Emit; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using H.LowCode.RenderEngine.Domain; +using System.ComponentModel.DataAnnotations; + +namespace H.LowCode.RenderEngine.EntityFrameworkCore; + +public class EntityTypeManager +{ + private static AssemblyBuilder _dynamicAssembly; + private static ModuleBuilder _dynamicModule; + private const string _dynamicAssemblyName = "H.LowCode.DynamicEntity"; + private const string _dynamicModuleName = "DynamicModule"; + + private static List _dynamicEntities = []; + + private IDataSourceDomainService _dataSourceDomainService; + + public EntityTypeManager(IDataSourceDomainService dataSourceDomainService) + { + _dataSourceDomainService = dataSourceDomainService; + } + + public IReadOnlyList LoadDynamicEntities() + { + InitDynamicAssembly(); + + if(_dynamicEntities.Count > 0) + return _dynamicEntities; + + var entities = _dataSourceDomainService.GetAllEntities("caseapp"); + foreach (var entity in entities) + { + var fields = entity.TableFields.Select(f => new DynamicEntityField() + { + Name = f.Name, + ClrType = FieldTypeMapping.GetFieldType(f.Type, f.IsNullable), + IsNullable = f.IsNullable + }); + + var primaryField = entity.TableFields.FirstOrDefault(t => t.IsPrimaryKey); + if (primaryField == null) + throw new ValidationException("primary is required"); + + //创建实体类 + var entityType = EntityFactory.CreateEntityType(_dynamicModule, entity.Name, fields); + + var dynamicEntity = new DynamicEntityInfo() + { + EntityName = entity.Name, + EntityType = entityType, + PrimaryKey = primaryField.Name, + EnableSoftDelete = entity.EnableSoftDelete, + Fields = fields + }; + _dynamicEntities.Add(dynamicEntity); + return _dynamicEntities; + } + return _dynamicEntities; + } + + private static void InitDynamicAssembly() + { + if (_dynamicAssembly == null) + { + AssemblyName dynamicAssemblyName = new AssemblyName(_dynamicAssemblyName); + //dynamicAssemblyName.Version = new Version(1, 0, 0, 1); + + _dynamicAssembly = AssemblyBuilder.DefineDynamicAssembly(dynamicAssemblyName, AssemblyBuilderAccess.Run); + _dynamicModule = _dynamicAssembly.DefineDynamicModule(_dynamicModuleName); + } + } +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs new file mode 100644 index 00000000..ca8374ae --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.RenderEngine.EntityFrameworkCore; + +internal class FieldTypeMapping +{ + public static Type GetFieldType(string fieldType, bool isNullable) + { + string type = fieldType.ToLower(); + if (fieldType != "char" && fieldType != "varchar") + type = $"{type}{(isNullable ? "?" : string.Empty)}"; + switch (type) + { + case "char": + case "varchar": + return typeof(string); + case "bool": + return typeof(bool); + case "bool?": + return typeof(bool?); + case "int": + return typeof(int); + case "int?": + return typeof(int?); + case "long": + return typeof(long); + case "long?": + return typeof(long?); + case "decimal": + return typeof(decimal); + case "decimal?": + return typeof(decimal?); + case "datetime": + return typeof(DateTime); + case "datetime?": + return typeof(DateTime?); + default: + throw new NotSupportedException($"not support type: {type}"); + } + } +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/EmitExtension.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/EmitExtension.cs new file mode 100644 index 00000000..52ebe61e --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/EmitExtension.cs @@ -0,0 +1,349 @@ +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Emit; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.RenderEngine.EntityFrameworkCore; + +/// +/// Emit扩展 +/// +internal static class EmitExtension +{ + #region Assembly, Module + /// + /// 创建一个可运行的动态程序集 + /// + /// 程序集名称 + /// + /// 动态程序集 + /// assemblyName为空 + [NotNull] + public static AssemblyBuilder CreateDynamicAssembly([NotNull] string assemblyName, + [NotNull] AssemblyCreateOptions options) + { + if (string.IsNullOrEmpty(assemblyName)) + throw new ArgumentNullException(nameof(assemblyName)); + if (options == null) + throw new ArgumentNullException(nameof(options)); + + var assemblyNameObj = new AssemblyName(assemblyName); + + if (options.StrongName) + { + assemblyNameObj.SetPublicKey(options.PublicKey); + } + + var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyNameObj, AssemblyBuilderAccess.Run); + + // 设置程序集的内部可见 + if (options.InternalsVisibleTo != null && options.InternalsVisibleTo.Length > 0) + { + var constructorInfo = typeof(InternalsVisibleToAttribute).GetConstructor(new[] { typeof(string) }); + + // InternalsVisibleToAttribute类型一定会有一个构造函数接收1个字符串 + if (constructorInfo != null) + { + var customAttributeBuilder = new CustomAttributeBuilder(constructorInfo, + options.InternalsVisibleTo.OfType().ToArray()); + assemblyBuilder.SetCustomAttribute(customAttributeBuilder); + } + } + + return assemblyBuilder; + } + + /// + /// 为动态程序集创建一个模块 + /// + /// 动态程序集 + /// 模块名 + /// 动态程序集中的模块 + /// assemblyBuilder或moduleName为空 + [NotNull] + public static ModuleBuilder CreateModule([NotNull] this AssemblyBuilder assemblyBuilder, + [NotNull] string moduleName) + { + if (assemblyBuilder == null) + throw new ArgumentNullException(nameof(assemblyBuilder)); + + if (string.IsNullOrEmpty(moduleName)) + throw new ArgumentNullException(nameof(moduleName)); + + var moduleBuilder = assemblyBuilder.DefineDynamicModule(moduleName); + return moduleBuilder; + } + #endregion + + #region Type + /// + /// 为动态程序集创建一个类型,继承指定基类,实现一些接口 + /// + /// + /// + /// + /// + /// + /// moduleBuilder或typeName或baseType为空时 + [NotNull] + public static TypeBuilder DefineType([NotNull] this ModuleBuilder moduleBuilder, + [NotNull] string typeName, + [NotNull] Type baseType, + [CanBeNull][ItemNotNull] IEnumerable interfaceTypes = null) + { + if (moduleBuilder == null) + throw new ArgumentNullException(nameof(moduleBuilder)); + if (string.IsNullOrEmpty(typeName)) + throw new ArgumentNullException(nameof(typeName)); + if (baseType == null) + throw new ArgumentNullException(nameof(baseType)); + + var typeAttributes = TypeAttributes.Public | TypeAttributes.Class; + var typeBuilder = moduleBuilder.DefineType(typeName, typeAttributes, baseType); + + // 实现接口 + if (interfaceTypes != null) + { + foreach (var interfaceType in interfaceTypes) + { + typeBuilder.AddInterfaceImplementation(interfaceType); + } + } + + return typeBuilder; + } + #endregion + + #region Properties + /// + /// 为类型创建一个自动属性 + /// + /// + /// + /// + /// + /// typeBuilder或propertyName或propertyType为空 + [NotNull] + public static PropertyBuilder DefineField([NotNull] this TypeBuilder typeBuilder, + [NotNull] string propertyName, + [NotNull] Type propertyType) + { + if (typeBuilder == null) + throw new ArgumentNullException(nameof(typeBuilder)); + if (string.IsNullOrEmpty(propertyName)) + throw new ArgumentNullException(nameof(propertyName)); + if (propertyType == null) + throw new ArgumentNullException(nameof(propertyType)); + + // c# + // private type _field; + var fieldBuilder = typeBuilder.DefineField(GetBackgroundFieldName(propertyName), propertyType, + FieldAttributes.Private); + // [CompilerGenerated] + fieldBuilder.AddCustomAttribute(typeof(CompilerGeneratedAttribute)); + + // c# + // public type get_field() {} + var getMethodBuilder = typeBuilder.DefineMethod("get_" + propertyName, + MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName, propertyType, + Type.EmptyTypes); + var getIL = getMethodBuilder.GetILGenerator(); + + // c# + // return _field; + getIL.Emit(OpCodes.Ldarg_0); + getIL.Emit(OpCodes.Ldfld, fieldBuilder); + getIL.Emit(OpCodes.Ret); + + // c# + // public void set_field(type value) {} + var setMethodBuilder = typeBuilder.DefineMethod("set_" + propertyName, + MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName, null, + new[] { propertyType }); + var setIL = setMethodBuilder.GetILGenerator(); + + // c# + // _field = value; + setIL.Emit(OpCodes.Ldarg_0); + setIL.Emit(OpCodes.Ldarg_1); + setIL.Emit(OpCodes.Stfld, fieldBuilder); + setIL.Emit(OpCodes.Ret); + + // define property + // property = get + set + var propertyBuilder = typeBuilder.DefineProperty(propertyName, PropertyAttributes.None, propertyType, null); + + propertyBuilder.SetGetMethod(getMethodBuilder); + propertyBuilder.SetSetMethod(setMethodBuilder); + + return propertyBuilder; + } + + /// + /// 产生自动属性的后台字段 + /// + private static string GetBackgroundFieldName(string propertyName) + { + return $"<{propertyName}>k__BackingField"; + } + #endregion + + #region Attributes + // /// + // /// 向动态类型增加一个Attribute标记(只支持带有无参数构造函数的Attribute类型) + // /// + // /// 动态类型 + // /// Attribute类型 + // /// + // /// typeBuilder或attributeType为空 + // public static AssemblyBuilder AddCustomAttribute([NotNull] this AssemblyBuilder assemblyBuilder, + // [NotNull] Type attributeType) + // { + // if (assemblyBuilder == null) + // throw new ArgumentNullException(nameof(assemblyBuilder)); + // + // assemblyBuilder.SetCustomAttribute(CreateCustomAttribute(attributeType)); + // + // return assemblyBuilder; + // } + + /// + /// 向动态类型增加一个Attribute标记(只支持带有无参数构造函数的Attribute类型) + /// + /// 动态类型 + /// Attribute类型 + /// + /// typeBuilder或attributeType为空 + public static TypeBuilder AddCustomAttribute([NotNull] this TypeBuilder typeBuilder, + [NotNull] Type attributeType) + { + if (typeBuilder == null) + throw new ArgumentNullException(nameof(typeBuilder)); + + typeBuilder.SetCustomAttribute(CreateCustomAttribute(attributeType)); + + return typeBuilder; + } + + /// + /// 向属性增加一个Attribute标记(只支持带有无参数构造函数的Attribute类型) + /// + /// 动态属性 + /// Attribute类型 + /// + /// propertyBuilder或attributeType为空 + public static PropertyBuilder AddCustomAttribute([NotNull] this PropertyBuilder propertyBuilder, + [NotNull] Type attributeType) + { + if (propertyBuilder == null) + throw new ArgumentNullException(nameof(propertyBuilder)); + + propertyBuilder.SetCustomAttribute(CreateCustomAttribute(attributeType)); + + return propertyBuilder; + } + + /// + /// 向字段增加一个Attribute标记(只支持带有无参数构造函数的Attribute类型) + /// + /// 动态字段 + /// Attribute类型 + /// + /// fieldBuilder或attributeType为空 + public static FieldBuilder AddCustomAttribute([NotNull] this FieldBuilder fieldBuilder, + [NotNull] Type attributeType) + { + if (fieldBuilder == null) + throw new ArgumentNullException(nameof(fieldBuilder)); + + fieldBuilder.SetCustomAttribute(CreateCustomAttribute(attributeType)); + + return fieldBuilder; + } + + private static CustomAttributeBuilder CreateCustomAttribute([NotNull] Type attributeType) + { + if (attributeType == null) + throw new ArgumentNullException(nameof(attributeType)); + + var constructorInfo = attributeType.GetConstructor(Type.EmptyTypes); + if (constructorInfo == null) + throw new InvalidOperationException($"类型[{attributeType.Name}]没有无参数的构造函数"); + + return new CustomAttributeBuilder(constructorInfo, new object[0]); + } + #endregion + + #region Delegates + + /// + /// 获取类型的无参数构造函数委托 + /// + public static ObjectActivatorDelegate GetActivatorProxyFunc([NotNull] this Type type, + [CanBeNull] DelegateMethodCreateOptions options = null) + { + if (type == null) + throw new ArgumentNullException(nameof(type)); + + var constructorInfo = type.GetConstructor(Type.EmptyTypes); + if (constructorInfo == null) + throw new InvalidOperationException($"类型[{type.Name}]没有无参数的构造函数"); + + var method = + options?.BelongModule == null + ? new DynamicMethod("Create" + type.Name, type, Type.EmptyTypes) + : new DynamicMethod("Create" + type.Name, type, Type.EmptyTypes, options.BelongModule); + + var ilGenerator = method.GetILGenerator(); + + ilGenerator.Emit(OpCodes.Newobj, constructorInfo); + ilGenerator.Emit(OpCodes.Ret); + + return (ObjectActivatorDelegate)method.CreateDelegate(typeof(ObjectActivatorDelegate)); + } + + #endregion +} + +/// +/// 程序集创建参数 +/// +internal class AssemblyCreateOptions +{ + /// + /// 是否需要程序集强名称 + /// + public bool StrongName { get; set; } + + /// + /// 程序集强名称的PublicKey + /// + public byte[] PublicKey { get; set; } + + /// + /// 程序集内部可见的设置 + /// + public string[] InternalsVisibleTo { get; set; } +} + +/// +/// 代理方法创建参数 +/// +internal class DelegateMethodCreateOptions +{ + /// + /// 方法归属的模块 + /// 如果方法访问了私有的类型或方法,归属模块尤其重要。 + /// 不设置或归属模块不正确,会导致无法访问私有类型或成员的问题。 + /// + public Module BelongModule { get; set; } +} + +internal delegate object ObjectActivatorDelegate(); +internal delegate object GetValueDelegate(object obj); +internal delegate void SetValueDelegate(object obj, object value); \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs new file mode 100644 index 00000000..135a5447 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.RenderEngine.EntityFrameworkCore; + +internal static class ReflectionExtensions +{ + /// + /// 得到一个实际的类型(排除Nullable类型的影响)。 + /// + /// + /// + /// 比如:int? 最后将得到int. + /// + /// + public static Type GetRealType(this Type type) + { + if (type == null) + throw new ArgumentNullException(nameof(type)); + + if (type.IsGenericType) + return Nullable.GetUnderlyingType(type) ?? type; + else + return type; + } + + public static bool IsSimpleType(this Type type) + { + if (type == null) + throw new ArgumentNullException(nameof(type)); + + return type.IsPrimitive + || type == typeof(string) + || type == typeof(DateTime) + || type == typeof(decimal) + || type == typeof(Guid) + || type.IsEnum; + } + + + public static bool IsNullableType(this Type type) + { + if (type == null) + throw new ArgumentNullException(nameof(type)); + + return type.IsGenericType + && type.IsGenericTypeDefinition == false + && type.GetGenericTypeDefinition() == typeof(Nullable<>); + } + + + public static bool HasReturn(this MethodInfo m) + { + return m.ReturnType != typeof(void); + } + + /// + /// 判断type是否继承或者实现generic + /// 泛型处理 + /// + /// + /// + /// + public static bool HasImplemented(this Type type, Type generic) + { + if (type == null) throw new ArgumentNullException(nameof(type)); + if (generic == null) throw new ArgumentNullException(nameof(generic)); + + //接口。 + var isTheRawGenericType = type.GetInterfaces().Any(IsTheRawGenericType); + if (isTheRawGenericType) return true; + + //类型。 + while (type != null && type != typeof(object)) + { + isTheRawGenericType = IsTheRawGenericType(type); + if (isTheRawGenericType) return true; + type = type.BaseType; + } + + // 没有找到任何匹配的接口或类型。 + return false; + + //某个类型是否是指定的原始接口。 + bool IsTheRawGenericType(Type test) + => generic == (test.IsGenericType ? test.GetGenericTypeDefinition() : test); + } +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/H.LowCode.RenderEngine.EntityFrameworkCore.csproj b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/H.LowCode.RenderEngine.EntityFrameworkCore.csproj new file mode 100644 index 00000000..6feade28 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/H.LowCode.RenderEngine.EntityFrameworkCore.csproj @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/RenderEngineEntityFrameworkCoreModule.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/RenderEngineEntityFrameworkCoreModule.cs new file mode 100644 index 00000000..09438bf0 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/RenderEngineEntityFrameworkCoreModule.cs @@ -0,0 +1,26 @@ +using H.LowCode.RenderEngine.Domain; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp; +using Volo.Abp.Modularity; + +namespace H.LowCode.RenderEngine.EntityFrameworkCore; + +public class RenderEngineEntityFrameworkCoreModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddScoped(); + context.Services.AddScoped(); + + context.Services.AddScoped(typeof(EntityTypeManager)); + + context.Services.AddDbContext(options => + { + var connectionString = context.Services.GetConfiguration().GetConnectionString("Default"); + options.UseSqlServer(connectionString); + }); + } +} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Host/H.LowCode.RenderEngine.Host.csproj b/src/RenderEngine/H.LowCode.RenderEngine.Host/H.LowCode.RenderEngine.Host.csproj index a7acbf10..93f5e043 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Host/H.LowCode.RenderEngine.Host.csproj +++ b/src/RenderEngine/H.LowCode.RenderEngine.Host/H.LowCode.RenderEngine.Host.csproj @@ -15,10 +15,10 @@ - - - + + + diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Host/RenderEngineHostModule.cs b/src/RenderEngine/H.LowCode.RenderEngine.Host/RenderEngineHostModule.cs index 752a0922..37d528c8 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Host/RenderEngineHostModule.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Host/RenderEngineHostModule.cs @@ -1,9 +1,9 @@ using H.LowCode.ComponentBase; using H.LowCode.Components.AntBlazor; using H.LowCode.Components.Extension; -using H.LowCode.EntityFrameworkCore; using H.LowCode.RenderEngine.Application; -using H.LowCode.Repository.JsonFile; +using H.LowCode.RenderEngine.EntityFrameworkCore; +using H.LowCode.RenderEngine.Repository.JsonFile; using H.LowCode.Themes.AntBlazor; using H.Util.Blazor; using Microsoft.OpenApi.Models; @@ -22,8 +22,8 @@ namespace H.LowCode.RenderEngine.Host; typeof(AbpSwashbuckleModule), //=====lowcode-server=====// typeof(RenderEngineApplicationModule), - typeof(LowCodeEntityFrameworkCoreModule), - typeof(MetaJsonFileRepositoryModule), + typeof(RenderEngineEntityFrameworkCoreModule), + typeof(RenderEngineJsonFileRepositoryModule), //=====lowcode-web=====// //RenderEngine typeof(RenderEngineModule), diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Base/FileRepositoryBase.cs b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Base/FileRepositoryBase.cs new file mode 100644 index 00000000..3602e10f --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Base/FileRepositoryBase.cs @@ -0,0 +1,30 @@ +using H.LowCode.Configuration; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.RenderEngine.Repository.JsonFile; + +public abstract class FileRepositoryBase +{ + public bool? IsChangeTrackingEnabled { get; set; } + + protected static string _metaBaseDir; + + public FileRepositoryBase(IOptions metaOption) + { + _metaBaseDir = metaOption.Value.AppsFilePath; + IsChangeTrackingEnabled = false; + } + + protected static string ReadAllText(string fileName) + { + if (!File.Exists(fileName)) + throw new FileNotFoundException(fileName); + + return File.ReadAllText(fileName, Encoding.UTF8); + } +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/H.LowCode.RenderEngine.Repository.JsonFile.csproj b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/H.LowCode.RenderEngine.Repository.JsonFile.csproj new file mode 100644 index 00000000..15163eee --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/H.LowCode.RenderEngine.Repository.JsonFile.csproj @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/RenderEngineJsonFileRepositoryModule.cs b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/RenderEngineJsonFileRepositoryModule.cs new file mode 100644 index 00000000..684f3d45 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/RenderEngineJsonFileRepositoryModule.cs @@ -0,0 +1,22 @@ +using H.LowCode.Configuration; +using H.LowCode.RenderEngine.Domain; +using H.LowCode.RenderEngine.Domain.Repositories; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; + +namespace H.LowCode.RenderEngine.Repository.JsonFile; + +[DependsOn(typeof(RenderEngineDomainModule))] +public class RenderEngineJsonFileRepositoryModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddScoped(); + context.Services.AddScoped(); + context.Services.AddScoped(); + context.Services.AddScoped(); + + var configuration = context.Services.GetConfiguration(); + context.Services.Configure(configuration.GetSection(MetaOption.SectionName)); + } +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/AppFileRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/AppFileRepository.cs new file mode 100644 index 00000000..d8bc2291 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/AppFileRepository.cs @@ -0,0 +1,51 @@ +using H.LowCode.Configuration; +using H.LowCode.RenderEngine.Domain.Repositories; +using H.LowCode.MetaSchema; +using Microsoft.Extensions.Options; +using System.Collections.Generic; +using System.Text; + +namespace H.LowCode.RenderEngine.Repository.JsonFile; + +public class AppFileRepository : FileRepositoryBase, IAppRepository +{ + private static string appFileName_Format = @"{0}\{1}\{2}.json"; + + public AppFileRepository(IOptions metaOption) : base(metaOption) + { + + } + + public async Task> GetListAsync() + { + List appSchemas = []; + + if (Directory.Exists(_metaBaseDir) == false) + return appSchemas; + + var directories = Directory.GetDirectories(_metaBaseDir); + foreach (var directory in directories) + { + DirectoryInfo dirInfo = new(directory); + var fileName = string.Format(appFileName_Format, _metaBaseDir, dirInfo.Name, dirInfo.Name); + + if (!File.Exists(fileName)) + continue; + + var appSchemaJson = ReadAllText(fileName); + var appSchema = appSchemaJson.FromJson(); + appSchemas.Add(appSchema); + } + + return await Task.FromResult(appSchemas); + } + + public async Task GetAsync(string appId) + { + string fileName = string.Format(appFileName_Format, _metaBaseDir, appId, appId); + + var appSchemaJson = ReadAllText(fileName); + var appSchema = appSchemaJson.FromJson(); + return await Task.FromResult(appSchema); + } +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/DataSourceFileRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/DataSourceFileRepository.cs new file mode 100644 index 00000000..22bea1c3 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/DataSourceFileRepository.cs @@ -0,0 +1,49 @@ +using H.LowCode.Configuration; +using H.LowCode.RenderEngine.Domain.Repositories; +using H.LowCode.MetaSchema; +using Microsoft.Extensions.Options; +using System.Collections.Generic; +using System.Text; + +namespace H.LowCode.RenderEngine.Repository.JsonFile; + +public class DataSourceFileRepository : FileRepositoryBase, IDataSourceRepository +{ + private static string dataSourceName_Format = @"{0}\{1}\datasource\{2}.json"; + + public DataSourceFileRepository(IOptions metaOption) : base(metaOption) + { + } + + public async Task> GetListAsync(string appId) + { + List list = []; + + var dataSourceFolder = Path.Combine(_metaBaseDir, appId, "datasource"); + if (!Directory.Exists(dataSourceFolder)) + return list; + + var files = Directory.GetFiles(dataSourceFolder); + foreach (var fileName in files) + { + var dataSourceSchemaJson = ReadAllText(fileName); + var dataSourceSchema = dataSourceSchemaJson.FromJson(); + + list.Add(dataSourceSchema); + } + + //排序 + list = list.OrderBy(t => t.Order).ToList(); + + return await Task.FromResult(list); + } + + public async Task GetAsync(string appId, string id) + { + string fileName = string.Format(dataSourceName_Format, _metaBaseDir, appId, id); + + var dataSourceSchemaJson = ReadAllText(fileName); + var dataSource = dataSourceSchemaJson.FromJson(); + return await Task.FromResult(dataSource); + } +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/MenuFileRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/MenuFileRepository.cs new file mode 100644 index 00000000..50dfb4b5 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/MenuFileRepository.cs @@ -0,0 +1,85 @@ +using H.LowCode.Configuration; +using H.LowCode.RenderEngine.Domain.Repositories; +using H.LowCode.MetaSchema; +using Microsoft.Extensions.Options; +using System.Collections.Generic; +using System.Text; + +namespace H.LowCode.RenderEngine.Repository.JsonFile; + +public class MenuFileRepository : FileRepositoryBase, IMenuRepository +{ + private static string menuFileName_Format = @"{0}\{1}\menu\{2}.json"; + + public MenuFileRepository(IOptions metaOption) : base(metaOption) + { + + } + + public async Task GetAsync(string appId, string menuId) + { + var fileName = string.Format(menuFileName_Format, _metaBaseDir, appId, menuId); + if (!File.Exists(fileName)) + return null; + + var menuSchemaJson = ReadAllText(fileName); + var menuSchema = menuSchemaJson.FromJson(); + + return await Task.FromResult(menuSchema); + } + + public async Task> GetListAsync(string appId) + { + IList list = []; + + var menuFolder = Path.Combine(_metaBaseDir, appId, "menu"); + if (!Directory.Exists(menuFolder)) + return list; + + var files = Directory.GetFiles(menuFolder); + foreach (var fileName in files) + { + var menuSchemaJson = ReadAllText(fileName); + var menuSchema = menuSchemaJson.FromJson(); + + list.Add(menuSchema); + } + + list = BuildTreeMenus(list); + + return await Task.FromResult(list); + } + + private static IList BuildTreeMenus(IList menus) + { + var treeMenus = new List(); + + var menuDic = new Dictionary(); + foreach (var m in menus) + { + if (!menuDic.ContainsKey(m.Id)) + menuDic[m.Id] = m; + } + + foreach (var menu in menus) + { + if (menu.ParentId.IsNullOrEmpty()) + treeMenus.Add(menu); + else + { + if (menuDic.TryGetValue(menu.ParentId, out var parentMenu)) + { + parentMenu.Childrens.Add(menu); + parentMenu.Childrens = parentMenu.Childrens.OrderBy(t => t.Order).ToList(); + } + else + throw new KeyNotFoundException($"ParentId not found: {menu.ParentId}"); + } + } + + //排序 + treeMenus = treeMenus.OrderBy(t => t.Order).ToList(); + + return treeMenus; + } +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/PageFileRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/PageFileRepository.cs new file mode 100644 index 00000000..188d470e --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.JsonFile/Repositories/PageFileRepository.cs @@ -0,0 +1,27 @@ +using H.LowCode.Configuration; +using H.LowCode.RenderEngine.Domain.Repositories; +using H.LowCode.MetaSchema.RenderEngine; +using Microsoft.Extensions.Options; +using System.Text; + +namespace H.LowCode.RenderEngine.Repository.JsonFile; + +public class PageFileRepository : FileRepositoryBase, IPageRepository +{ + private static string pageFileName_Format = @"{0}\{1}\page\{2}.json"; + + public PageFileRepository(IOptions metaOption) : base(metaOption) + { + + } + + public Task GetAsync(string appId, string pageId) + { + string fileName = string.Format(pageFileName_Format, _metaBaseDir, appId, pageId); + + var pageSchemaJson = ReadAllText(fileName); + var pageSchema = pageSchemaJson.FromJson(); + + return Task.FromResult(pageSchema); + } +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Base/RemoteServiceRepositoryBase.cs b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Base/RemoteServiceRepositoryBase.cs new file mode 100644 index 00000000..34a8e1ed --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Base/RemoteServiceRepositoryBase.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.RenderEngine.Repository.RemoteService; + +public abstract class RemoteServiceRepositoryBase +{ +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/H.LowCode.RenderEngine.Repository.RemoteService.csproj b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/H.LowCode.RenderEngine.Repository.RemoteService.csproj new file mode 100644 index 00000000..b2c56a6d --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/H.LowCode.RenderEngine.Repository.RemoteService.csproj @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/RenderEngineRemoteServiceRepositoryModule.cs b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/RenderEngineRemoteServiceRepositoryModule.cs new file mode 100644 index 00000000..4ec0df8e --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/RenderEngineRemoteServiceRepositoryModule.cs @@ -0,0 +1,18 @@ +using H.LowCode.RenderEngine.Domain; +using H.LowCode.RenderEngine.Domain.Repositories; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; + +namespace H.LowCode.RenderEngine.Repository.RemoteService; + +[DependsOn(typeof(RenderEngineDomainModule))] +public class RenderEngineRemoteServiceRepositoryModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddScoped(); + context.Services.AddScoped(); + context.Services.AddScoped(); + context.Services.AddScoped(); + } +} diff --git a/src/Common/H.LowCode.Repository.RemoteService/Repositories/AppRemoteServiceRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/AppRemoteServiceRepository.cs similarity index 75% rename from src/Common/H.LowCode.Repository.RemoteService/Repositories/AppRemoteServiceRepository.cs rename to src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/AppRemoteServiceRepository.cs index fd464d14..416c435e 100644 --- a/src/Common/H.LowCode.Repository.RemoteService/Repositories/AppRemoteServiceRepository.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/AppRemoteServiceRepository.cs @@ -1,11 +1,11 @@ using H.LowCode.Configuration; -using H.LowCode.Domain.Repositories; using H.LowCode.MetaSchema; +using H.LowCode.RenderEngine.Domain.Repositories; using Microsoft.Extensions.Options; using System.Collections.Generic; using System.Text; -namespace H.LowCode.Repository.RemoteService; +namespace H.LowCode.RenderEngine.Repository.RemoteService; public class AppRemoteServiceRepository : RemoteServiceRepositoryBase, IAppRepository { @@ -25,9 +25,4 @@ public class AppRemoteServiceRepository : RemoteServiceRepositoryBase, IAppRepos { throw new NotImplementedException(); } - - public async Task SaveAsync(AppSchema appSchema) - { - throw new NotImplementedException(); - } } diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/DataSourceRemoteServiceRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/DataSourceRemoteServiceRepository.cs new file mode 100644 index 00000000..b328381d --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/DataSourceRemoteServiceRepository.cs @@ -0,0 +1,26 @@ +using H.LowCode.Configuration; +using H.LowCode.RenderEngine.Domain.Repositories; +using H.LowCode.MetaSchema; +using Microsoft.Extensions.Options; +using System.Collections.Generic; +using System.Text; + +namespace H.LowCode.RenderEngine.Repository.RemoteService; + +public class DataSourceRemoteServiceRepository : RemoteServiceRepositoryBase, IDataSourceRepository +{ + public DataSourceRemoteServiceRepository(IOptions metaOption) + { + + } + + public Task GetAsync(string appId, string id) + { + throw new NotImplementedException(); + } + + public Task> GetListAsync(string appId) + { + throw new NotImplementedException(); + } +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/MenuRemoteServiceRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/MenuRemoteServiceRepository.cs new file mode 100644 index 00000000..d39ed27b --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/MenuRemoteServiceRepository.cs @@ -0,0 +1,26 @@ +using H.LowCode.Configuration; +using H.LowCode.RenderEngine.Domain.Repositories; +using H.LowCode.MetaSchema; +using Microsoft.Extensions.Options; +using System.Collections.Generic; +using System.Text; + +namespace H.LowCode.RenderEngine.Repository.RemoteService; + +public class MenuRemoteServiceRepository : RemoteServiceRepositoryBase, IMenuRepository +{ + public MenuRemoteServiceRepository(IOptions metaOption) + { + + } + + public async Task GetAsync(string appId, string menuId) + { + throw new NotImplementedException(); + } + + public async Task> GetListAsync(string appId) + { + throw new NotImplementedException(); + } +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/PageRemoteServiceRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/PageRemoteServiceRepository.cs new file mode 100644 index 00000000..41be228f --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Repository.RemoteService/Repositories/PageRemoteServiceRepository.cs @@ -0,0 +1,21 @@ +using H.LowCode.Configuration; +using H.LowCode.RenderEngine.Domain.Repositories; +using Microsoft.Extensions.Options; +using System.Collections.Generic; +using System.Text; +using H.LowCode.MetaSchema.RenderEngine; + +namespace H.LowCode.RenderEngine.Repository.RemoteService; + +public class PageRemoteServiceRepository : RemoteServiceRepositoryBase, IPageRepository +{ + public PageRemoteServiceRepository(IOptions metaOption) + { + + } + + public Task GetAsync(string appId, string pageId) + { + throw new NotImplementedException(); + } +} diff --git a/src/Tools/H.LowCode.DbMigrator/H.LowCode.DbMigrator.csproj b/src/Tools/H.LowCode.DbMigrator/H.LowCode.DbMigrator.csproj index 117bbc39..a991d83f 100644 --- a/src/Tools/H.LowCode.DbMigrator/H.LowCode.DbMigrator.csproj +++ b/src/Tools/H.LowCode.DbMigrator/H.LowCode.DbMigrator.csproj @@ -25,8 +25,8 @@ - - + + diff --git a/src/Tools/H.LowCode.DbMigrator/LowCodeDbMigratorModule.cs b/src/Tools/H.LowCode.DbMigrator/LowCodeDbMigratorModule.cs index 1955facd..fada74e7 100644 --- a/src/Tools/H.LowCode.DbMigrator/LowCodeDbMigratorModule.cs +++ b/src/Tools/H.LowCode.DbMigrator/LowCodeDbMigratorModule.cs @@ -1,5 +1,5 @@ -using H.LowCode.EntityFrameworkCore; -using H.LowCode.Repository.JsonFile; +using H.LowCode.DesignEngine.EntityFrameworkCore; +using H.LowCode.DesignEngine.Repository.JsonFile; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -9,8 +9,8 @@ using Volo.Abp.Modularity; namespace H.LowCode.DbMigrator; [DependsOn( - typeof(MetaJsonFileRepositoryModule), - typeof(LowCodeEntityFrameworkCoreModule) + typeof(DesignEngineJsonFileRepositoryModule), + typeof(DesignEngineEntityFrameworkCoreModule) )] public class LowCodeDbMigratorModule : AbpModule { @@ -20,11 +20,11 @@ public class LowCodeDbMigratorModule : AbpModule context.Services.AddTransient(); - //使用 MigratorDbContext 而不是 LowCodeDbContext 的原因为需要指定迁移程序集,但又不想在 LowCodeDbContext 中指定迁移程序集。 + //使用 MigratorDbContext 而不是 DesignEngineDbContext 的原因为需要指定迁移程序集,但又不想在 DesignEngineDbContext 中指定迁移程序集。 context.Services.AddDbContext(options => { var connectionString = context.Services.GetConfiguration().GetConnectionString("Default"); - string migrationAssembly = typeof(LowCodeEntityFrameworkCoreModule).Namespace; + string migrationAssembly = typeof(DesignEngineEntityFrameworkCoreModule).Namespace; options.UseSqlServer(connectionString, b => b.MigrationsAssembly(migrationAssembly)); }); } diff --git a/src/Tools/H.LowCode.DbMigrator/MigrationGenerator/MigratorDbContextFactory.cs b/src/Tools/H.LowCode.DbMigrator/MigrationGenerator/MigratorDbContextFactory.cs index 1e342690..b5c9b67c 100644 --- a/src/Tools/H.LowCode.DbMigrator/MigrationGenerator/MigratorDbContextFactory.cs +++ b/src/Tools/H.LowCode.DbMigrator/MigrationGenerator/MigratorDbContextFactory.cs @@ -6,9 +6,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using H.LowCode.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; -using H.LowCode.Repository.JsonFile; +using H.LowCode.DesignEngine.EntityFrameworkCore; +using H.LowCode.DesignEngine.Repository.JsonFile; namespace H.LowCode.DbMigrator; @@ -25,15 +25,15 @@ public class MigratorDbContextFactory : IDesignTimeDbContextFactory() + var builder = new DbContextOptionsBuilder() .UseSqlServer(configuration.GetConnectionString("Default"), b => b.MigrationsAssembly(migrationAssembly)); var services = new ServiceCollection(); services.AddApplication(); - services.AddApplication(); + services.AddApplication(); var serviceProvider = services.BuildServiceProvider(); EntityTypeManager entityTypeManager = serviceProvider.GetService(); diff --git a/src/Tools/H.LowCode.DbMigrator/MigrationServices/EntityFrameworkCoreDbSchemaMigrator.cs b/src/Tools/H.LowCode.DbMigrator/MigrationServices/EntityFrameworkCoreDbSchemaMigrator.cs index 77b7fb52..39085eae 100644 --- a/src/Tools/H.LowCode.DbMigrator/MigrationServices/EntityFrameworkCoreDbSchemaMigrator.cs +++ b/src/Tools/H.LowCode.DbMigrator/MigrationServices/EntityFrameworkCoreDbSchemaMigrator.cs @@ -1,5 +1,4 @@ -using H.LowCode.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; diff --git a/src/Tools/H.LowCode.DbMigrator/MigrationServices/MigratorDbContext.cs b/src/Tools/H.LowCode.DbMigrator/MigrationServices/MigratorDbContext.cs index dc83d117..1cccf4d7 100644 --- a/src/Tools/H.LowCode.DbMigrator/MigrationServices/MigratorDbContext.cs +++ b/src/Tools/H.LowCode.DbMigrator/MigrationServices/MigratorDbContext.cs @@ -1,4 +1,4 @@ -using H.LowCode.EntityFrameworkCore; +using H.LowCode.DesignEngine.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; @@ -10,12 +10,12 @@ namespace H.LowCode.DbMigrator; /// /// 用于迁移数据库 -/// 说明: 直接使用 LowCodeDbContext 会在 LowCodeDbContext 所在项目(即"H.LowCode.EntityFrameworkCore")中找 Migrations 文件夹下的迁移文件 +/// 说明: 直接使用 DesignEngineDbContext 会在 DesignEngineDbContext 所在项目(即"H.LowCode.EntityFrameworkCore")中找 Migrations 文件夹下的迁移文件 /// 由于迁移文件是在"H.LowCode.DbMigrator"项目中生成的, 所以在 "H.LowCode.DbMigrator" 中重新定义一个 DbContext /// -public class MigratorDbContext : LowCodeDbContext +public class MigratorDbContext : DesignEngineDbContext { - public MigratorDbContext(DbContextOptions options, + public MigratorDbContext(DbContextOptions options, EntityTypeManager entityTypeManager) : base(options, entityTypeManager) { } -- Gitee From 74b4002a421b1a1f8646fde9514c6455b2ac451a Mon Sep 17 00:00:00 2001 From: "{iliuhai@aliyun.com}" Date: Wed, 12 Mar 2025 22:01:35 +0800 Subject: [PATCH 15/18] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20H.LowCode.Entity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CascadingModels/AppCascadingModel.cs | 4 +- .../CascadingModels/PageCascadingModel.cs | 2 +- .../H.LowCode.Entity/Base}/EntityBase.cs | 2 +- .../H.LowCode.Entity/Base}/FormEntity.cs | 5 +- .../H.LowCode.Entity/Base}/TableEntity.cs | 2 +- .../EntityManager/DynamicEntityInfo.cs | 2 +- .../EntityManager/EntityFactory.cs | 3 +- .../EntityManager/EntityProxyBuilder.cs | 3 +- .../EntityManager/FieldTypeMapping.cs | 4 +- .../Extensions/EmitExtension.cs | 54 +- .../Extensions/ReflectionExtensions.cs | 2 +- .../H.LowCode.Entity.csproj} | 0 .../FormDataDomainService.cs | 3 +- .../IFormDataDomainService.cs | 3 +- .../DataRepositories/IFormDataRepository.cs | 2 +- .../Entities/FormEntity.cs | 15 - .../H.LowCode.DesignEngine.Domain.csproj | 1 + .../DataRepositories/FormDataRepository.cs | 1 + .../DesignEngineDbContext.cs | 1 + .../Extensions/BuilderExtension.cs | 41 -- .../EntityManager/EntityTypeManager.cs | 1 + .../EntityManager/FieldTypeMapping.cs | 46 -- ...de.DesignEngine.EntityFrameworkCore.csproj | 1 + .../H.LowCode.DesignEngine.csproj | 1 - .../H.LowCode.DesignEngine/_Imports.razor | 1 - .../H.LowCode.PartsDesignEngine.csproj | 1 - .../_Imports.razor | 1 - .../H.LowCode.Workbench.csproj | 1 - .../H.LowCode.Workbench/_Imports.razor | 1 - src/H.LowCode.sln | 14 +- .../H.LowCode.Components.AntBlazor.csproj | 1 - .../H.LowCode.Themes.AntBlazor.csproj | 1 - .../H.LowCode.Themes.AntBlazor/_Imports.razor | 1 - .../DataAppServices/FormDataAppService.cs | 1 + .../LowCodeAutoMapperProfile.cs | 2 +- .../FormDataDomainService.cs | 3 +- .../IFormDataDomainService.cs | 3 +- .../DataRepositories/IFormDataRepository.cs | 2 +- .../Entities/EntityBase.cs | 22 - .../Entities/TableEntity.cs | 11 - .../H.LowCode.RenderEngine.Domain.csproj | 1 + .../DataRepositories/FormDataRepository.cs | 3 +- .../Extensions/BuilderExtension.cs | 41 -- .../RenderEngineDbContext.cs | 3 +- .../EntityManager/DynamicEntityInfo.cs | 70 --- .../EntityManager/EntityFactory.cs | 88 --- .../EntityManager/EntityProxyBuilder.cs | 557 ------------------ .../EntityManager/EntityTypeManager.cs | 3 +- .../Extensions/EmitExtension.cs | 349 ----------- .../Extensions/ReflectionExtensions.cs | 92 --- ...de.RenderEngine.EntityFrameworkCore.csproj | 1 + .../H.LowCode.RenderEngine.csproj | 1 - .../H.LowCode.RenderEngine/_Imports.razor | 3 +- 53 files changed, 66 insertions(+), 1411 deletions(-) rename src/Common/{H.LowCode.Model => H.LowCode.ComponentBase}/CascadingModels/AppCascadingModel.cs (65%) rename src/Common/{H.LowCode.Model => H.LowCode.ComponentBase}/CascadingModels/PageCascadingModel.cs (91%) rename src/{DesignEngine/H.LowCode.DesignEngine.Domain/Entities => Common/H.LowCode.Entity/Base}/EntityBase.cs (90%) rename src/{RenderEngine/H.LowCode.RenderEngine.Domain/Entities => Common/H.LowCode.Entity/Base}/FormEntity.cs (74%) rename src/{DesignEngine/H.LowCode.DesignEngine.Domain/Entities => Common/H.LowCode.Entity/Base}/TableEntity.cs (80%) rename src/{DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore => Common/H.LowCode.Entity}/EntityManager/DynamicEntityInfo.cs (96%) rename src/{DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore => Common/H.LowCode.Entity}/EntityManager/EntityFactory.cs (96%) rename src/{DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore => Common/H.LowCode.Entity}/EntityManager/EntityProxyBuilder.cs (99%) rename src/{RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore => Common/H.LowCode.Entity}/EntityManager/FieldTypeMapping.cs (93%) rename src/{DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore => Common/H.LowCode.Entity}/Extensions/EmitExtension.cs (84%) rename src/{DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore => Common/H.LowCode.Entity}/Extensions/ReflectionExtensions.cs (97%) rename src/Common/{H.LowCode.Model/H.LowCode.Model.csproj => H.LowCode.Entity/H.LowCode.Entity.csproj} (100%) delete mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/FormEntity.cs delete mode 100644 src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs delete mode 100644 src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs delete mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/EntityBase.cs delete mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/TableEntity.cs delete mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs delete mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs delete mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs delete mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs delete mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/EmitExtension.cs delete mode 100644 src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs diff --git a/src/Common/H.LowCode.Model/CascadingModels/AppCascadingModel.cs b/src/Common/H.LowCode.ComponentBase/CascadingModels/AppCascadingModel.cs similarity index 65% rename from src/Common/H.LowCode.Model/CascadingModels/AppCascadingModel.cs rename to src/Common/H.LowCode.ComponentBase/CascadingModels/AppCascadingModel.cs index 0564bab2..35fad617 100644 --- a/src/Common/H.LowCode.Model/CascadingModels/AppCascadingModel.cs +++ b/src/Common/H.LowCode.ComponentBase/CascadingModels/AppCascadingModel.cs @@ -4,8 +4,8 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.Model; +namespace H.LowCode.ComponentBase; -internal class AppCascadingModel +public class AppCascadingModel { } diff --git a/src/Common/H.LowCode.Model/CascadingModels/PageCascadingModel.cs b/src/Common/H.LowCode.ComponentBase/CascadingModels/PageCascadingModel.cs similarity index 91% rename from src/Common/H.LowCode.Model/CascadingModels/PageCascadingModel.cs rename to src/Common/H.LowCode.ComponentBase/CascadingModels/PageCascadingModel.cs index ab121cd4..5dabc132 100644 --- a/src/Common/H.LowCode.Model/CascadingModels/PageCascadingModel.cs +++ b/src/Common/H.LowCode.ComponentBase/CascadingModels/PageCascadingModel.cs @@ -1,7 +1,7 @@ using System; using System.Text.Json.Serialization; -namespace H.LowCode.Model; +namespace H.LowCode.ComponentBase; public class PageCascadingModel { diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/EntityBase.cs b/src/Common/H.LowCode.Entity/Base/EntityBase.cs similarity index 90% rename from src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/EntityBase.cs rename to src/Common/H.LowCode.Entity/Base/EntityBase.cs index 54ef8df3..74b94a11 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/EntityBase.cs +++ b/src/Common/H.LowCode.Entity/Base/EntityBase.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.DesignEngine.Domain; +namespace H.LowCode.Entity; public abstract class EntityBase { diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/FormEntity.cs b/src/Common/H.LowCode.Entity/Base/FormEntity.cs similarity index 74% rename from src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/FormEntity.cs rename to src/Common/H.LowCode.Entity/Base/FormEntity.cs index 636a15ec..da42010e 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/FormEntity.cs +++ b/src/Common/H.LowCode.Entity/Base/FormEntity.cs @@ -1,11 +1,10 @@ -using H.LowCode.MetaSchema; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.RenderEngine.Domain; +namespace H.LowCode.Entity; public class FormEntity : EntityBase { diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/TableEntity.cs b/src/Common/H.LowCode.Entity/Base/TableEntity.cs similarity index 80% rename from src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/TableEntity.cs rename to src/Common/H.LowCode.Entity/Base/TableEntity.cs index 8cba9cc8..6b4bedba 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/TableEntity.cs +++ b/src/Common/H.LowCode.Entity/Base/TableEntity.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.DesignEngine.Domain; +namespace H.LowCode.Entity; internal class TableEntity : EntityBase { diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs b/src/Common/H.LowCode.Entity/EntityManager/DynamicEntityInfo.cs similarity index 96% rename from src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs rename to src/Common/H.LowCode.Entity/EntityManager/DynamicEntityInfo.cs index 6814e380..b23ad8c7 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs +++ b/src/Common/H.LowCode.Entity/EntityManager/DynamicEntityInfo.cs @@ -5,7 +5,7 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.DesignEngine.EntityFrameworkCore; +namespace H.LowCode.Entity; public class DynamicEntityInfo { diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs b/src/Common/H.LowCode.Entity/EntityManager/EntityFactory.cs similarity index 96% rename from src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs rename to src/Common/H.LowCode.Entity/EntityManager/EntityFactory.cs index 8c9e702d..7ea3da76 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs +++ b/src/Common/H.LowCode.Entity/EntityManager/EntityFactory.cs @@ -4,9 +4,8 @@ using System.Reflection.Emit; using System.Reflection; using System.Text; using System.Threading.Tasks; -using H.LowCode.DesignEngine.Domain; -namespace H.LowCode.DesignEngine.EntityFrameworkCore; +namespace H.LowCode.Entity; public class EntityFactory { diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs b/src/Common/H.LowCode.Entity/EntityManager/EntityProxyBuilder.cs similarity index 99% rename from src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs rename to src/Common/H.LowCode.Entity/EntityManager/EntityProxyBuilder.cs index 77b3d056..f5729206 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs +++ b/src/Common/H.LowCode.Entity/EntityManager/EntityProxyBuilder.cs @@ -6,9 +6,8 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization; -using H.LowCode.DesignEngine.Domain; -namespace H.LowCode.DesignEngine.EntityFrameworkCore; +namespace H.LowCode.Entity; public class EntityProxyBuilder { diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs b/src/Common/H.LowCode.Entity/EntityManager/FieldTypeMapping.cs similarity index 93% rename from src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs rename to src/Common/H.LowCode.Entity/EntityManager/FieldTypeMapping.cs index ca8374ae..a0414232 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs +++ b/src/Common/H.LowCode.Entity/EntityManager/FieldTypeMapping.cs @@ -5,9 +5,9 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.RenderEngine.EntityFrameworkCore; +namespace H.LowCode.Entity; -internal class FieldTypeMapping +public class FieldTypeMapping { public static Type GetFieldType(string fieldType, bool isNullable) { diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/Extensions/EmitExtension.cs b/src/Common/H.LowCode.Entity/Extensions/EmitExtension.cs similarity index 84% rename from src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/Extensions/EmitExtension.cs rename to src/Common/H.LowCode.Entity/Extensions/EmitExtension.cs index a961171f..29fc59e1 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/Extensions/EmitExtension.cs +++ b/src/Common/H.LowCode.Entity/Extensions/EmitExtension.cs @@ -1,5 +1,4 @@ -using JetBrains.Annotations; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Reflection.Emit; @@ -8,7 +7,7 @@ using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.DesignEngine.EntityFrameworkCore; +namespace System.Reflection.Emit; /// /// Emit扩展 @@ -22,10 +21,8 @@ internal static class EmitExtension /// 程序集名称 /// /// 动态程序集 - /// assemblyName为空 - [NotNull] - public static AssemblyBuilder CreateDynamicAssembly([NotNull] string assemblyName, - [NotNull] AssemblyCreateOptions options) + public static AssemblyBuilder CreateDynamicAssembly(string assemblyName, + AssemblyCreateOptions options) { if (string.IsNullOrEmpty(assemblyName)) throw new ArgumentNullException(nameof(assemblyName)); @@ -64,10 +61,8 @@ internal static class EmitExtension /// 动态程序集 /// 模块名 /// 动态程序集中的模块 - /// assemblyBuilder或moduleName为空 - [NotNull] - public static ModuleBuilder CreateModule([NotNull] this AssemblyBuilder assemblyBuilder, - [NotNull] string moduleName) + public static ModuleBuilder CreateModule(this AssemblyBuilder assemblyBuilder, + string moduleName) { if (assemblyBuilder == null) throw new ArgumentNullException(nameof(assemblyBuilder)); @@ -89,12 +84,8 @@ internal static class EmitExtension /// /// /// - /// moduleBuilder或typeName或baseType为空时 - [NotNull] - public static TypeBuilder DefineType([NotNull] this ModuleBuilder moduleBuilder, - [NotNull] string typeName, - [NotNull] Type baseType, - [CanBeNull][ItemNotNull] IEnumerable interfaceTypes = null) + public static TypeBuilder DefineType(this ModuleBuilder moduleBuilder, + string typeName, Type baseType, IEnumerable interfaceTypes = null) { if (moduleBuilder == null) throw new ArgumentNullException(nameof(moduleBuilder)); @@ -127,11 +118,9 @@ internal static class EmitExtension /// /// /// - /// typeBuilder或propertyName或propertyType为空 - [NotNull] - public static PropertyBuilder DefineField([NotNull] this TypeBuilder typeBuilder, - [NotNull] string propertyName, - [NotNull] Type propertyType) + public static PropertyBuilder DefineField(this TypeBuilder typeBuilder, + string propertyName, + Type propertyType) { if (typeBuilder == null) throw new ArgumentNullException(nameof(typeBuilder)); @@ -218,9 +207,8 @@ internal static class EmitExtension /// 动态类型 /// Attribute类型 /// - /// typeBuilder或attributeType为空 - public static TypeBuilder AddCustomAttribute([NotNull] this TypeBuilder typeBuilder, - [NotNull] Type attributeType) + public static TypeBuilder AddCustomAttribute(this TypeBuilder typeBuilder, + Type attributeType) { if (typeBuilder == null) throw new ArgumentNullException(nameof(typeBuilder)); @@ -236,9 +224,8 @@ internal static class EmitExtension /// 动态属性 /// Attribute类型 /// - /// propertyBuilder或attributeType为空 - public static PropertyBuilder AddCustomAttribute([NotNull] this PropertyBuilder propertyBuilder, - [NotNull] Type attributeType) + public static PropertyBuilder AddCustomAttribute(this PropertyBuilder propertyBuilder, + Type attributeType) { if (propertyBuilder == null) throw new ArgumentNullException(nameof(propertyBuilder)); @@ -254,9 +241,8 @@ internal static class EmitExtension /// 动态字段 /// Attribute类型 /// - /// fieldBuilder或attributeType为空 - public static FieldBuilder AddCustomAttribute([NotNull] this FieldBuilder fieldBuilder, - [NotNull] Type attributeType) + public static FieldBuilder AddCustomAttribute(this FieldBuilder fieldBuilder, + Type attributeType) { if (fieldBuilder == null) throw new ArgumentNullException(nameof(fieldBuilder)); @@ -266,7 +252,7 @@ internal static class EmitExtension return fieldBuilder; } - private static CustomAttributeBuilder CreateCustomAttribute([NotNull] Type attributeType) + private static CustomAttributeBuilder CreateCustomAttribute(Type attributeType) { if (attributeType == null) throw new ArgumentNullException(nameof(attributeType)); @@ -284,8 +270,8 @@ internal static class EmitExtension /// /// 获取类型的无参数构造函数委托 /// - public static ObjectActivatorDelegate GetActivatorProxyFunc([NotNull] this Type type, - [CanBeNull] DelegateMethodCreateOptions options = null) + public static ObjectActivatorDelegate GetActivatorProxyFunc(this Type type, + DelegateMethodCreateOptions options = null) { if (type == null) throw new ArgumentNullException(nameof(type)); diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs b/src/Common/H.LowCode.Entity/Extensions/ReflectionExtensions.cs similarity index 97% rename from src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs rename to src/Common/H.LowCode.Entity/Extensions/ReflectionExtensions.cs index 467b6c76..7627877f 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs +++ b/src/Common/H.LowCode.Entity/Extensions/ReflectionExtensions.cs @@ -5,7 +5,7 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.DesignEngine.EntityFrameworkCore; +namespace System.Reflection; internal static class ReflectionExtensions { diff --git a/src/Common/H.LowCode.Model/H.LowCode.Model.csproj b/src/Common/H.LowCode.Entity/H.LowCode.Entity.csproj similarity index 100% rename from src/Common/H.LowCode.Model/H.LowCode.Model.csproj rename to src/Common/H.LowCode.Entity/H.LowCode.Entity.csproj diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/FormDataDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/FormDataDomainService.cs index 11fd1afa..c15b8adf 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/FormDataDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/FormDataDomainService.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.DependencyInjection; +using H.LowCode.Entity; +using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/IFormDataDomainService.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/IFormDataDomainService.cs index ab49a96b..f241bd0c 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/IFormDataDomainService.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataDomainServices/IFormDataDomainService.cs @@ -1,4 +1,5 @@ -using System; +using H.LowCode.Entity; +using System; using System.Collections.Generic; using System.Linq; using System.Text; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataRepositories/IFormDataRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataRepositories/IFormDataRepository.cs index 1e1b0a59..a70e261a 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataRepositories/IFormDataRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/DataRepositories/IFormDataRepository.cs @@ -1,4 +1,4 @@ -using H.LowCode.MetaSchema; +using H.LowCode.Entity; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/FormEntity.cs b/src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/FormEntity.cs deleted file mode 100644 index 17d184b7..00000000 --- a/src/DesignEngine/H.LowCode.DesignEngine.Domain/Entities/FormEntity.cs +++ /dev/null @@ -1,15 +0,0 @@ -using H.LowCode.MetaSchema; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace H.LowCode.DesignEngine.Domain; - -public class FormEntity : EntityBase -{ - public string Name { get; set; } - - public Dictionary Fields { get; set; } = []; -} \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Domain/H.LowCode.DesignEngine.Domain.csproj b/src/DesignEngine/H.LowCode.DesignEngine.Domain/H.LowCode.DesignEngine.Domain.csproj index 93b09797..c5e8d2cf 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Domain/H.LowCode.DesignEngine.Domain.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine.Domain/H.LowCode.DesignEngine.Domain.csproj @@ -8,6 +8,7 @@ + diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs index 159da22e..8c1a0cdf 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs @@ -1,4 +1,5 @@ using H.LowCode.DesignEngine.Domain; +using H.LowCode.Entity; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/DesignEngineDbContext.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/DesignEngineDbContext.cs index 5e3cf053..98cd6118 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/DesignEngineDbContext.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/DesignEngineDbContext.cs @@ -1,4 +1,5 @@ using H.LowCode.DesignEngine.Domain; +using H.LowCode.Entity; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata.Builders; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs deleted file mode 100644 index 5c17a6ea..00000000 --- a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using Microsoft.EntityFrameworkCore.Metadata; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace H.LowCode.DesignEngine.EntityFrameworkCore; - -public static class BuilderExtensions -{ - public static EntityTypeBuilder IsReadOnly(this EntityTypeBuilder builder) - { - ArgumentNullException.ThrowIfNull(builder, nameof(builder)); - var metadata = builder.Metadata; - metadata.AddAnnotation("Custom:ReadOnly", false); - return builder; - } - - public static EntityTypeBuilder IsReadOnly(this EntityTypeBuilder builder, bool readOnly = true) - { - ArgumentNullException.ThrowIfNull(builder, nameof(builder)); - var metadata = builder.Metadata; - var props = metadata.GetProperties(); - - foreach (var prop in props) - { - prop.SetAfterSaveBehavior(readOnly ? PropertySaveBehavior.Throw : PropertySaveBehavior.Save); - } - - return builder; - } - - public static PropertyBuilder IsReadOnly(this PropertyBuilder prop, bool readOnly = true) - { - ArgumentNullException.ThrowIfNull(prop, nameof(prop)); - prop.Metadata.SetAfterSaveBehavior(readOnly ? PropertySaveBehavior.Throw : PropertySaveBehavior.Save); - return prop; - } -} \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs index 28ca2efb..31fbc6f3 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs @@ -6,6 +6,7 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; using System.ComponentModel.DataAnnotations; +using H.LowCode.Entity; using H.LowCode.DesignEngine.Domain; namespace H.LowCode.DesignEngine.EntityFrameworkCore; diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs deleted file mode 100644 index 9645638e..00000000 --- a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/EntityManager/FieldTypeMapping.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace H.LowCode.DesignEngine.EntityFrameworkCore; - -internal class FieldTypeMapping -{ - public static Type GetFieldType(string fieldType, bool isNullable) - { - string type = fieldType.ToLower(); - if (fieldType != "char" && fieldType != "varchar") - type = $"{type}{(isNullable ? "?" : string.Empty)}"; - switch (type) - { - case "char": - case "varchar": - return typeof(string); - case "bool": - return typeof(bool); - case "bool?": - return typeof(bool?); - case "int": - return typeof(int); - case "int?": - return typeof(int?); - case "long": - return typeof(long); - case "long?": - return typeof(long?); - case "decimal": - return typeof(decimal); - case "decimal?": - return typeof(decimal?); - case "datetime": - return typeof(DateTime); - case "datetime?": - return typeof(DateTime?); - default: - throw new NotSupportedException($"not support type: {type}"); - } - } -} \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/H.LowCode.DesignEngine.EntityFrameworkCore.csproj b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/H.LowCode.DesignEngine.EntityFrameworkCore.csproj index cd20544b..9b67ac29 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/H.LowCode.DesignEngine.EntityFrameworkCore.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine.EntityFrameworkCore/H.LowCode.DesignEngine.EntityFrameworkCore.csproj @@ -10,6 +10,7 @@ + diff --git a/src/DesignEngine/H.LowCode.DesignEngine/H.LowCode.DesignEngine.csproj b/src/DesignEngine/H.LowCode.DesignEngine/H.LowCode.DesignEngine.csproj index 473de4c3..9f010983 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/H.LowCode.DesignEngine.csproj +++ b/src/DesignEngine/H.LowCode.DesignEngine/H.LowCode.DesignEngine.csproj @@ -19,7 +19,6 @@ - diff --git a/src/DesignEngine/H.LowCode.DesignEngine/_Imports.razor b/src/DesignEngine/H.LowCode.DesignEngine/_Imports.razor index b07811c2..08b13714 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/_Imports.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/_Imports.razor @@ -16,6 +16,5 @@ @using H.LowCode.DesignEngine.Application.Contracts @using H.LowCode.MetaSchema @using H.LowCode.MetaSchema.DesignEngine -@using H.LowCode.Model @using H.Util.Blazor @using H.Util.Ids \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/H.LowCode.PartsDesignEngine.csproj b/src/DesignEngine/H.LowCode.PartsDesignEngine/H.LowCode.PartsDesignEngine.csproj index 40225689..a3ac2a93 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/H.LowCode.PartsDesignEngine.csproj +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/H.LowCode.PartsDesignEngine.csproj @@ -18,7 +18,6 @@ - diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/_Imports.razor b/src/DesignEngine/H.LowCode.PartsDesignEngine/_Imports.razor index c36fede4..7090bf4d 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/_Imports.razor +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/_Imports.razor @@ -9,6 +9,5 @@ @using H.LowCode.DesignEngine.Application.Contracts @using H.LowCode.MetaSchema @using H.LowCode.MetaSchema.DesignEngine -@using H.LowCode.Model @using H.Util.Blazor @using H.Util.Ids \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.Workbench/H.LowCode.Workbench.csproj b/src/DesignEngine/H.LowCode.Workbench/H.LowCode.Workbench.csproj index 91065793..4abd53a5 100644 --- a/src/DesignEngine/H.LowCode.Workbench/H.LowCode.Workbench.csproj +++ b/src/DesignEngine/H.LowCode.Workbench/H.LowCode.Workbench.csproj @@ -20,7 +20,6 @@ - diff --git a/src/DesignEngine/H.LowCode.Workbench/_Imports.razor b/src/DesignEngine/H.LowCode.Workbench/_Imports.razor index caf9b932..a5684b00 100644 --- a/src/DesignEngine/H.LowCode.Workbench/_Imports.razor +++ b/src/DesignEngine/H.LowCode.Workbench/_Imports.razor @@ -17,7 +17,6 @@ @using H.LowCode.Workbench @using H.LowCode.MetaSchema @using H.LowCode.MetaSchema.DesignEngine -@using H.LowCode.Model @using H.LowCode.DesignEngine.Model @using H.Util.Blazor @using H.Util.Ids \ No newline at end of file diff --git a/src/H.LowCode.sln b/src/H.LowCode.sln index 947fa1f9..c855d1b5 100644 --- a/src/H.LowCode.sln +++ b/src/H.LowCode.sln @@ -56,8 +56,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.Configuration", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.RenderEngine.Abstraction", "RenderEngine\H.LowCode.RenderEngine.Abstraction\H.LowCode.RenderEngine.Abstraction.csproj", "{9832C124-BE18-48FA-8C60-48857D9B4DA1}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.Model", "Common\H.LowCode.Model\H.LowCode.Model.csproj", "{D4FFEDAF-20A2-467F-BEF2-0432936F7640}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H.LowCode.PartsDesignEngine", "DesignEngine\H.LowCode.PartsDesignEngine\H.LowCode.PartsDesignEngine.csproj", "{8C48BC1B-FD9B-4C39-929D-9458BD9B42E1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PartsDesignEngine", "PartsDesignEngine", "{30AB2F99-B015-4F98-9439-41A23A954CDE}" @@ -106,6 +104,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.RenderEngine.Repo EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.RenderEngine.Repository.RemoteService", "RenderEngine\H.LowCode.RenderEngine.Repository.RemoteService\H.LowCode.RenderEngine.Repository.RemoteService.csproj", "{637464B4-18A5-4111-966E-33936516CEC8}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H.LowCode.Entity", "Common\H.LowCode.Entity\H.LowCode.Entity.csproj", "{04CA320A-37C9-45AE-BCCB-DA01300F29C7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -168,10 +168,6 @@ Global {9832C124-BE18-48FA-8C60-48857D9B4DA1}.Debug|Any CPU.Build.0 = Debug|Any CPU {9832C124-BE18-48FA-8C60-48857D9B4DA1}.Release|Any CPU.ActiveCfg = Release|Any CPU {9832C124-BE18-48FA-8C60-48857D9B4DA1}.Release|Any CPU.Build.0 = Release|Any CPU - {D4FFEDAF-20A2-467F-BEF2-0432936F7640}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4FFEDAF-20A2-467F-BEF2-0432936F7640}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4FFEDAF-20A2-467F-BEF2-0432936F7640}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4FFEDAF-20A2-467F-BEF2-0432936F7640}.Release|Any CPU.Build.0 = Release|Any CPU {8C48BC1B-FD9B-4C39-929D-9458BD9B42E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8C48BC1B-FD9B-4C39-929D-9458BD9B42E1}.Debug|Any CPU.Build.0 = Debug|Any CPU {8C48BC1B-FD9B-4C39-929D-9458BD9B42E1}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -248,6 +244,10 @@ Global {637464B4-18A5-4111-966E-33936516CEC8}.Debug|Any CPU.Build.0 = Debug|Any CPU {637464B4-18A5-4111-966E-33936516CEC8}.Release|Any CPU.ActiveCfg = Release|Any CPU {637464B4-18A5-4111-966E-33936516CEC8}.Release|Any CPU.Build.0 = Release|Any CPU + {04CA320A-37C9-45AE-BCCB-DA01300F29C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04CA320A-37C9-45AE-BCCB-DA01300F29C7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04CA320A-37C9-45AE-BCCB-DA01300F29C7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04CA320A-37C9-45AE-BCCB-DA01300F29C7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -271,7 +271,6 @@ Global {68C4F1D4-C479-4679-8074-B13EA898F4A0} = {240CD8ED-49F9-47E0-91B1-B170252E5437} {8490E431-5F81-4EF4-B765-FF0AC8A6EA10} = {A63C9652-517D-4BC3-B935-74D946AB0761} {9832C124-BE18-48FA-8C60-48857D9B4DA1} = {89FE3DE3-2E58-4835-A476-CA2E309A1B3F} - {D4FFEDAF-20A2-467F-BEF2-0432936F7640} = {A63C9652-517D-4BC3-B935-74D946AB0761} {8C48BC1B-FD9B-4C39-929D-9458BD9B42E1} = {30AB2F99-B015-4F98-9439-41A23A954CDE} {30AB2F99-B015-4F98-9439-41A23A954CDE} = {7E5B26AA-4F89-4B8C-B743-AE3F04C9DD58} {C81282DA-2FD7-4DA4-A607-DBADD3ACD367} = {7E5B26AA-4F89-4B8C-B743-AE3F04C9DD58} @@ -294,6 +293,7 @@ Global {71A10A51-EC26-45F9-A122-BF9D9DAAD28D} = {240CD8ED-49F9-47E0-91B1-B170252E5437} {0CD501D8-1151-4850-8AD4-25920EDFA781} = {240CD8ED-49F9-47E0-91B1-B170252E5437} {637464B4-18A5-4111-966E-33936516CEC8} = {240CD8ED-49F9-47E0-91B1-B170252E5437} + {04CA320A-37C9-45AE-BCCB-DA01300F29C7} = {A63C9652-517D-4BC3-B935-74D946AB0761} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A8C26757-CDED-4779-94DE-C0D4929F64C2} diff --git a/src/Parts/H.LowCode.Components.AntBlazor/H.LowCode.Components.AntBlazor.csproj b/src/Parts/H.LowCode.Components.AntBlazor/H.LowCode.Components.AntBlazor.csproj index 4bb25a54..bcf756eb 100644 --- a/src/Parts/H.LowCode.Components.AntBlazor/H.LowCode.Components.AntBlazor.csproj +++ b/src/Parts/H.LowCode.Components.AntBlazor/H.LowCode.Components.AntBlazor.csproj @@ -18,7 +18,6 @@ - diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/H.LowCode.Themes.AntBlazor.csproj b/src/Parts/H.LowCode.Themes.AntBlazor/H.LowCode.Themes.AntBlazor.csproj index f326f7b1..4be97d10 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/H.LowCode.Themes.AntBlazor.csproj +++ b/src/Parts/H.LowCode.Themes.AntBlazor/H.LowCode.Themes.AntBlazor.csproj @@ -20,7 +20,6 @@ - diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/_Imports.razor b/src/Parts/H.LowCode.Themes.AntBlazor/_Imports.razor index a57a1f91..0b867a02 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/_Imports.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/_Imports.razor @@ -10,5 +10,4 @@ @using H.LowCode.RenderEngine.Application.Contracts @using H.LowCode.MetaSchema @using H.LowCode.MetaSchema.RenderEngine -@using H.LowCode.Model @using H.Util.Blazor \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/FormDataAppService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/FormDataAppService.cs index f1ae8180..2bcb5a4b 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/FormDataAppService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/FormDataAppService.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Text; using Volo.Abp; using Volo.Abp.Application.Services; +using H.LowCode.Entity; namespace H.LowCode.RenderEngine.Application; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Application/MapperProfiles/LowCodeAutoMapperProfile.cs b/src/RenderEngine/H.LowCode.RenderEngine.Application/MapperProfiles/LowCodeAutoMapperProfile.cs index 1832e740..83c72b62 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Application/MapperProfiles/LowCodeAutoMapperProfile.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Application/MapperProfiles/LowCodeAutoMapperProfile.cs @@ -1,11 +1,11 @@ using AutoMapper; -using H.LowCode.RenderEngine.Domain; using H.LowCode.RenderEngine.Application.Contracts; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using H.LowCode.Entity; namespace H.LowCode.RenderEngine.Application; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/FormDataDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/FormDataDomainService.cs index bed55668..bd675a7d 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/FormDataDomainService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/FormDataDomainService.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.DependencyInjection; +using H.LowCode.Entity; +using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/IFormDataDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/IFormDataDomainService.cs index 9d3771e3..a2c94bbb 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/IFormDataDomainService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/IFormDataDomainService.cs @@ -1,4 +1,5 @@ -using System; +using H.LowCode.Entity; +using System; using System.Collections.Generic; using System.Linq; using System.Text; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataRepositories/IFormDataRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataRepositories/IFormDataRepository.cs index 2eaa90d8..3b76ba25 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataRepositories/IFormDataRepository.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataRepositories/IFormDataRepository.cs @@ -1,4 +1,4 @@ -using H.LowCode.MetaSchema; +using H.LowCode.Entity; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/EntityBase.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/EntityBase.cs deleted file mode 100644 index 698813b2..00000000 --- a/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/EntityBase.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace H.LowCode.RenderEngine.Domain; - -public abstract class EntityBase -{ - protected EntityBase() - { - } - - public DateTime CreatedTime { get; set; } - - public string CreatedUser { get; set; } - - public DateTime ModifiedTime { get; set; } - - public string ModifiedUser { get; set; } -} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/TableEntity.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/TableEntity.cs deleted file mode 100644 index 65e5285e..00000000 --- a/src/RenderEngine/H.LowCode.RenderEngine.Domain/Entities/TableEntity.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace H.LowCode.RenderEngine.Domain; - -internal class TableEntity : EntityBase -{ -} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/H.LowCode.RenderEngine.Domain.csproj b/src/RenderEngine/H.LowCode.RenderEngine.Domain/H.LowCode.RenderEngine.Domain.csproj index 9be82620..9d8d494a 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Domain/H.LowCode.RenderEngine.Domain.csproj +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/H.LowCode.RenderEngine.Domain.csproj @@ -8,6 +8,7 @@ + diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs index 04e15780..b84664ef 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs @@ -1,4 +1,5 @@ -using H.LowCode.MetaSchema; +using H.LowCode.Entity; +using H.LowCode.MetaSchema; using H.LowCode.RenderEngine.Domain; using Microsoft.EntityFrameworkCore; using System; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs deleted file mode 100644 index d7802524..00000000 --- a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/Extensions/BuilderExtension.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using Microsoft.EntityFrameworkCore.Metadata; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace H.LowCode.RenderEngine.EntityFrameworkCore; - -public static class BuilderExtensions -{ - public static EntityTypeBuilder IsReadOnly(this EntityTypeBuilder builder) - { - ArgumentNullException.ThrowIfNull(builder, nameof(builder)); - var metadata = builder.Metadata; - metadata.AddAnnotation("Custom:ReadOnly", false); - return builder; - } - - public static EntityTypeBuilder IsReadOnly(this EntityTypeBuilder builder, bool readOnly = true) - { - ArgumentNullException.ThrowIfNull(builder, nameof(builder)); - var metadata = builder.Metadata; - var props = metadata.GetProperties(); - - foreach (var prop in props) - { - prop.SetAfterSaveBehavior(readOnly ? PropertySaveBehavior.Throw : PropertySaveBehavior.Save); - } - - return builder; - } - - public static PropertyBuilder IsReadOnly(this PropertyBuilder prop, bool readOnly = true) - { - ArgumentNullException.ThrowIfNull(prop, nameof(prop)); - prop.Metadata.SetAfterSaveBehavior(readOnly ? PropertySaveBehavior.Throw : PropertySaveBehavior.Save); - return prop; - } -} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/RenderEngineDbContext.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/RenderEngineDbContext.cs index 32768ddd..a560af2b 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/RenderEngineDbContext.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/RenderEngineDbContext.cs @@ -1,4 +1,5 @@ -using H.LowCode.RenderEngine.Domain; +using H.LowCode.Entity; +using H.LowCode.RenderEngine.Domain; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata.Builders; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs deleted file mode 100644 index 51eef449..00000000 --- a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/DynamicEntityInfo.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; - -namespace H.LowCode.RenderEngine.EntityFrameworkCore; - -public class DynamicEntityInfo -{ - public string EntityName { get; set; } - - public string PrimaryKey { get; set; } - - public Type EntityType { get; set; } - - public bool EnableSoftDelete { get; set; } - - public IEnumerable Fields { get; set; } -} - -public class DynamicEntityField -{ - public string Name { get; set; } - - /// - /// 字段类型 (CLR 类型) - /// - public Type ClrType { get; set; } - - /// - /// 最大长度 - /// - /// 仅string类型字段有效 - public int? MaxLength { get; set; } - - /// - /// 是否 Unicode 字符 - /// - /// 仅string类型字段有效 - public bool? IsUnicode { get; set; } - - /// - /// 精度(最大长度) - /// - /// 仅decimal类型字段有效 - public int? Precision { get; set; } - - /// - /// 范围(小数位数) - /// - /// 仅decimal类型字段有效 - public int? Scale { get; set; } - - /// - /// 是否可空 - /// - public bool IsNullable { get; set; } - - /// - /// 默认值 - /// - public object DefaultValue { get; set; } - - /// - /// 字段注释 - /// - public string Comment { get; set; } -} \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs deleted file mode 100644 index d06681e8..00000000 --- a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityFactory.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection.Emit; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -using H.LowCode.RenderEngine.Domain; - -namespace H.LowCode.RenderEngine.EntityFrameworkCore; - -public class EntityFactory -{ - private static readonly HashSet s_typeNames = new HashSet(StringComparer.OrdinalIgnoreCase); - - /// - /// 创建实体类 - /// - /// - /// - /// - /// - public static Type CreateEntityType(ModuleBuilder mb, string entityName, IEnumerable fields) - { - if (s_typeNames.Contains(entityName)) - { - entityName = entityName + "_"; - s_typeNames.Add(entityName); - } - - //定义子类,继承 EntityBase 基类 - string entityTypeName = $"{mb.Assembly.GetName().Name}.{entityName}"; - var tb = mb.DefineType(entityTypeName, typeof(EntityBase)); - - //定义属性 - foreach (var field in fields) - { - //定义属性 - tb.DefineField(field.Name, field.ClrType); - } - - var entityType = tb.CreateType(); - return entityType; - } - - /// - /// 创建实体对象 - /// - /// 实例的类型。 - /// 实体对象。 - public static T CreateInstance() where T : EntityBase - { - return (T)CreateInstance(typeof(T)); - } - - /// - /// 创建实体对象 - /// - /// 实例的类型。 - /// 实体对象。 - public static EntityBase CreateInstance(Type type) - { - if (type == null) - throw new ArgumentNullException(nameof(type)); - - ConstructorInfo ctorInfo = type.GetConstructor(Type.EmptyTypes); - Func ctor = CreateInstanceByDelegate(ctorInfo); - - return (EntityBase)ctor.Invoke(); - } - - /// - /// 基于委托创建实体对象 - /// - /// - /// - private static Func CreateInstanceByDelegate(ConstructorInfo constructor) - { - DynamicMethod dynamicMethod = new DynamicMethod("ctor", constructor.DeclaringType, Type.EmptyTypes, true); - - ILGenerator il = dynamicMethod.GetILGenerator(); - il.Emit(OpCodes.Nop); - il.Emit(OpCodes.Newobj, constructor); - il.Emit(OpCodes.Ret); - - return (Func)dynamicMethod.CreateDelegate(typeof(Func)); - } -} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs deleted file mode 100644 index edfa819f..00000000 --- a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityProxyBuilder.cs +++ /dev/null @@ -1,557 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection.Emit; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Serialization; -using H.LowCode.RenderEngine.Domain; - -namespace H.LowCode.RenderEngine.EntityFrameworkCore; - -public class EntityProxyBuilder -{ - private readonly Type _targeType; - private readonly TypeBuilder _typeBuilder; - private readonly IEnumerable _virtualProperties; - private ILGenerator _typeInitGenerator; - private static readonly TypeCache s_typeCache; - private static readonly object[] s_emptyArgs = new object[0]; - private static readonly string s_memberPrefix = "__"; - - static EntityProxyBuilder() - { - s_typeCache = new TypeCache(); - } - - private FieldBuilder _fieldBuilder; - - - /// - /// 初始化 类的新实例。 - /// - public EntityProxyBuilder(Type targeType, TypeBuilder typeBuilder, IEnumerable virtualProperties) - { - this._targeType = targeType; - this._typeBuilder = typeBuilder; - this._virtualProperties = virtualProperties; - } - - public Type Build() - { - this.DeclareType(); - - this.DeclareFieldsAndStaticConstructorHeader(); - - //重写所有的虚属性 - foreach (PropertyInfo propertyInfo in this._virtualProperties) - this.DeclareProperty(propertyInfo); - - this.DeclareFieldsAndStaticConstructorFooder(); - - return this._typeBuilder.CreateTypeInfo(); - } - - /// - /// 定义类型。 - /// - private void DeclareType() - { - //[Serializable] 可序列化标记。 - CustomAttributeBuilder serializableAttributeBuilder = new CustomAttributeBuilder(s_typeCache.SerializableAttributeConstructorInfo, s_emptyArgs); - this._typeBuilder.SetCustomAttribute(serializableAttributeBuilder); - if (this._targeType != typeof(EntityBase)) - { - //自定义实体不能直接得到实体的名称。 - //[XmlRoot("MyEntity")] Xml序列化标记。 - //TODO - CustomAttributeBuilder xmlRootAttributeBuilder = new CustomAttributeBuilder(s_typeCache.XmlRootAttributeConstructorInfo, new object[] { "EntityNameCache.GetEntityName(this._targeType)" }); - this._typeBuilder.SetCustomAttribute(xmlRootAttributeBuilder); - } - } - - /// - /// 定义字段和构造函数。 - /// - private void DeclareFieldsAndStaticConstructorHeader() - { - MethodInfo getEntityFieldInfoMethodInfo = s_typeCache.GetEntityFieldInfoMethodInfo; - - //定义 Dictionary 字段,用于缓存实体本身定义的字段。 - this._fieldBuilder = this._typeBuilder.DefineField(s_memberPrefix + "dictionary", getEntityFieldInfoMethodInfo.ReturnType, FieldAttributes.Private | FieldAttributes.SpecialName | FieldAttributes.Static | FieldAttributes.InitOnly); - - //静态构造函数。 - ConstructorBuilder constructorBuilder = this._typeBuilder.DefineTypeInitializer(); - this._typeInitGenerator = constructorBuilder.GetILGenerator(); - - this._typeInitGenerator.DeclareLocal(typeof(string)); //FieldName - //TODO - //this._typeInitGenerator.DeclareLocal(typeof(EntityFieldInfo)); - - //初始化默静态字段 __dictionary = new Dictionary(StringComparer.OrdinalIgnoreCase); - PropertyInfo ordinalIgnoreCasePropertyInfo = typeof(StringComparer).GetProperty("OrdinalIgnoreCase"); - - this._typeInitGenerator.Emit(OpCodes.Call, ordinalIgnoreCasePropertyInfo.GetMethod); - ConstructorInfo constructorInfo = getEntityFieldInfoMethodInfo.ReturnType.GetConstructor(new Type[] { typeof(StringComparer) }); - this._typeInitGenerator.Emit(OpCodes.Newobj, constructorInfo); - this._typeInitGenerator.Emit(OpCodes.Stsfld, this._fieldBuilder); - - //重写抽象方法:Dictionary GetEntityFieldInfo() - MethodBuilder getEntityFieldInfoMethodBuilder = this._typeBuilder.DefineMethod(getEntityFieldInfoMethodInfo.Name, MethodAttributes.Virtual | MethodAttributes.Family | MethodAttributes.HideBySig, getEntityFieldInfoMethodInfo.ReturnType, Type.EmptyTypes); - ILGenerator getEntityFieldInfoGenerator = getEntityFieldInfoMethodBuilder.GetILGenerator(); - //直接返回静态字段 - getEntityFieldInfoGenerator.Emit(OpCodes.Ldsfld, this._fieldBuilder); - getEntityFieldInfoGenerator.Emit(OpCodes.Ret); - } - - private void DeclareFieldsAndStaticConstructorFooder() - { - this._typeInitGenerator.Emit(OpCodes.Ret); - } - - /// - /// 定义属性。 - /// - private void DeclareProperty(PropertyInfo propertyInfo) - { - //获取属性在数据库对应的字段。 - //TODO - //EntityColumnAttribute entityColumnAttribute = propertyInfo.GetMyAttribute(); - //string fieldName = entityColumnAttribute == null || string.IsNullOrEmpty(entityColumnAttribute.ColumnName) ? propertyInfo.Name : entityColumnAttribute.ColumnName; - string fieldName = string.Empty; - - PropertyBuilder propertyBuilder = this._typeBuilder.DefineProperty(propertyInfo.Name, PropertyAttributes.None, propertyInfo.PropertyType, Type.EmptyTypes); - - this.BuildGetMethod(propertyInfo, propertyBuilder); - - this.BuidSetMethod(propertyInfo, fieldName, propertyBuilder); - - MethodBuilder staticGetMathodBuilder = this.BuildStaticGetMethod(propertyInfo); - - MethodBuilder staticSetMathodBuilder = this.BuildStaticSetMethod(propertyInfo, propertyBuilder); - - MethodBuilder setNoChangeMathodBuilder = BuildSetValueNoChange(propertyInfo); - - MethodBuilder staticSetNoChangeMathodBuilder = this.BuildStaticSetValueNoChange(propertyInfo, setNoChangeMathodBuilder); - - this.BuildPropertyStaticConstructor(propertyInfo, fieldName, staticSetMathodBuilder, staticSetNoChangeMathodBuilder, staticGetMathodBuilder); - - } - - - private void BuildPropertyStaticConstructor(PropertyInfo propertyInfo, string fieldName, MethodBuilder staticSetMathodBuilder, MethodBuilder staticSetNoChangeMathodBuilder, MethodBuilder staticGetMathodBuilder) - { - #region 静态构造函数 - - //生成该属性的实体信息 - _typeInitGenerator.Emit(OpCodes.Ldstr, fieldName); //这里要使用别名; - - // 这里就是入栈啊,由于代码规范,我需要在这里写这句废话。 - // 之后是字符串入栈啊。 - _typeInitGenerator.Emit(OpCodes.Stloc_0); - _typeInitGenerator.Emit(OpCodes.Ldsfld, this._fieldBuilder); - - // 其实以下几行,就是为了完成一个new操作。 - // 然后把参数传递给类型的构造函数。 - // new EntityFieldInfo(); - _typeInitGenerator.Emit(OpCodes.Ldloc_0); - _typeInitGenerator.Emit(OpCodes.Newobj, s_typeCache.EntityFieldInfoCconstructorInfo); - _typeInitGenerator.Emit(OpCodes.Stloc_1); - _typeInitGenerator.Emit(OpCodes.Ldloc_1); - - //这里就是入栈一个字符串名称啊。 - //EntityFieldInfo.FieldName - _typeInitGenerator.Emit(OpCodes.Ldloc_0); - _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.FieldNameFieldInfo); - - - this.BuildEnumDescriptionColumnName(propertyInfo); - - this.BuildFieldType(propertyInfo); - - this.BuildSetValueAction(staticSetMathodBuilder); - - this.BuildSetValueNoChangeAction(staticSetNoChangeMathodBuilder); - - this.BuildEntityInfoGetValueFun(staticGetMathodBuilder); - - this.BuildOtherField(); - - #endregion - } - - - #region Build EntityFieldInfo - - private void BuildSetValueNoChangeAction(MethodBuilder staticSetNoChangeMathodBuilder) - { - //EntityFieldInfo.SetValueNoChangeAction - _typeInitGenerator.Emit(OpCodes.Ldloc_1); - _typeInitGenerator.Emit(OpCodes.Ldnull); - _typeInitGenerator.Emit(OpCodes.Ldftn, staticSetNoChangeMathodBuilder); - _typeInitGenerator.Emit(OpCodes.Newobj, s_typeCache.ActionConstructorInfo); - _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.SetValueNoChangeActionFieldInfo); - } - - private void BuildSetValueAction(MethodBuilder staticSetMathodBuilder) - { - //EntityFieldInfo.SetValueAction - _typeInitGenerator.Emit(OpCodes.Ldloc_1); - _typeInitGenerator.Emit(OpCodes.Ldnull); - _typeInitGenerator.Emit(OpCodes.Ldftn, staticSetMathodBuilder); - _typeInitGenerator.Emit(OpCodes.Newobj, s_typeCache.ActionConstructorInfo); - _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.SetValueActionFieldInfo); - } - - private void BuildFieldType(PropertyInfo propertyInfo) - { - //EntityFieldInfo.FieldType - _typeInitGenerator.Emit(OpCodes.Ldloc_1); - _typeInitGenerator.Emit(OpCodes.Ldtoken, propertyInfo.PropertyType); - _typeInitGenerator.Emit(OpCodes.Call, s_typeCache.GetTypeFromHandleMethodInfo); - _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.FieldTypeFieldInfo); - } - - private void BuildEnumDescriptionColumnName(PropertyInfo propertyInfo) - { - //EntityFieldInfo.EnumDescriptionColumnName - //就是为了实现以上写法 - //TODO - //EnumColumnAttribute enumColumnAttribute = propertyInfo.GetMyAttribute(); - //if (enumColumnAttribute != null) - //{ - // string descriptionColumnName = enumColumnAttribute.DescriptionColumnName; - - // //这里就是为了得到一个等于啊 - // //EnumDescriptionColumnName = "OfficePhone", - // _typeInitGenerator.Emit(OpCodes.Ldloc_1); - // //压入字符串 - // _typeInitGenerator.Emit(OpCodes.Ldstr, descriptionColumnName); - // _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.EnumDescriptionColumnNameFieldInfo); - - // if (enumColumnAttribute.TargetType != null) - // { - // //这里也是为了得到一个等于,Emit就是这么蛋疼。 - // //EnumDescriptionColumnType = typeof(UserKind), - // _typeInitGenerator.Emit(OpCodes.Ldloc_1); - // _typeInitGenerator.Emit(OpCodes.Ldtoken, enumColumnAttribute.TargetType); - // //调用方法 - // _typeInitGenerator.Emit(OpCodes.Call, s_typeCache.GetTypeFromHandleMethodInfo); - // _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.EnumDescriptionColumnTypeFieldInfo); - - // } - //} - } - - private void BuildEntityInfoGetValueFun(MethodBuilder staticGetMathodBuilder) - { - //EntityFieldInfo.GetValueFunc - _typeInitGenerator.Emit(OpCodes.Ldloc_1); - _typeInitGenerator.Emit(OpCodes.Ldnull); - _typeInitGenerator.Emit(OpCodes.Ldftn, staticGetMathodBuilder); - _typeInitGenerator.Emit(OpCodes.Newobj, s_typeCache.FuncConstructorInfo); - _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.GetValueFuncFieldInfo); - } - - private void BuildOtherField() - { - //EntityFieldInfo.JsonIgnore - _typeInitGenerator.Emit(OpCodes.Ldloc_1); - _typeInitGenerator.Emit(OpCodes.Ldc_I4_0); - _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.JsonIgnoreFieldInfo); - - //EntityFieldInfo.IsVirtual - _typeInitGenerator.Emit(OpCodes.Ldloc_1); - _typeInitGenerator.Emit(OpCodes.Ldc_I4_1); - _typeInitGenerator.Emit(OpCodes.Stfld, s_typeCache.IsVirtualFieldInfo); - - _typeInitGenerator.Emit(OpCodes.Ldloc_1); - _typeInitGenerator.Emit(OpCodes.Callvirt, s_typeCache.DictionaryAddMethodInfo); - } - - #endregion - - #region Build PropertyInfo - - private MethodBuilder BuildStaticSetValueNoChange(PropertyInfo propertyInfo, MethodBuilder setNoChangeMathodBuilder) - { - #region static setValueNoChage - - //生成设置属性值的静态方法(不会修改属性的的状态。): - /* Demo: - private static void __SetUserCodeNoChange(object entity, object value) - { - ((MyUser)entity).__SetUserCodeNoChange(value); - } - */ - - //定义一个方法 - MethodBuilder staticSetNoChangeMathodBuilder = this._typeBuilder.DefineMethod(s_memberPrefix + "Set" + propertyInfo.Name + "NoChange", MethodAttributes.Static | MethodAttributes.Private | MethodAttributes.SpecialName | MethodAttributes.HideBySig, null, new Type[] { typeof(object), typeof(object) }); - - //定义两个参数 - staticSetNoChangeMathodBuilder.DefineParameter(1, ParameterAttributes.None, "entity"); - staticSetNoChangeMathodBuilder.DefineParameter(2, ParameterAttributes.None, "value"); - - //得到il代码 - ILGenerator staticSetNoChangeMethodGenerator = staticSetNoChangeMathodBuilder.GetILGenerator(); - staticSetNoChangeMethodGenerator.Emit(OpCodes.Ldarg_0); - staticSetNoChangeMethodGenerator.Emit(OpCodes.Castclass, this._typeBuilder); - staticSetNoChangeMethodGenerator.Emit(OpCodes.Ldarg_1); - //如栈后调用方法 - staticSetNoChangeMethodGenerator.Emit(OpCodes.Call, setNoChangeMathodBuilder); - staticSetNoChangeMethodGenerator.Emit(OpCodes.Ret); - - #endregion - - return staticSetNoChangeMathodBuilder; - } - - private MethodBuilder BuildSetValueNoChange(PropertyInfo propertyInfo) - { - #region setValueNoChange - - //生成设置属性值的方法(不会修改属性的的状态。): - /* Demo: - private void __SetUserCodeNoChange(object value) - { - base.UserCode = (string)value; - } - */ - MethodBuilder setNoChangeMathodBuilder = this._typeBuilder.DefineMethod(s_memberPrefix + "Set" + propertyInfo.Name + "NoChange", MethodAttributes.Private | MethodAttributes.SpecialName | MethodAttributes.HideBySig, null, new Type[] { typeof(object) }); - setNoChangeMathodBuilder.DefineParameter(1, ParameterAttributes.None, "value"); - - //生成方法,没什么好说的。 - ILGenerator setNoChangeMethodGenerator = setNoChangeMathodBuilder.GetILGenerator(); - setNoChangeMethodGenerator.Emit(OpCodes.Ldarg_0); - setNoChangeMethodGenerator.Emit(OpCodes.Ldarg_1); - - //判断是否值类型 - if (propertyInfo.PropertyType.IsValueType) - { - //如果是值类型,需要装箱。。。 - setNoChangeMethodGenerator.Emit(OpCodes.Unbox_Any, propertyInfo.PropertyType); - } - else - { - //非值类型,做次类型转换 - setNoChangeMethodGenerator.Emit(OpCodes.Castclass, propertyInfo.PropertyType); - } - - //调用Set方法 - setNoChangeMethodGenerator.Emit(OpCodes.Call, propertyInfo.SetMethod); - - //这是设置函数返回值。 - setNoChangeMethodGenerator.Emit(OpCodes.Ret); - - #endregion - - return setNoChangeMathodBuilder; - } - - private MethodBuilder BuildStaticSetMethod(PropertyInfo propertyInfo, PropertyBuilder propertyBuilder) - { - #region SetValue - - //生成设置属性值的静态方法: - /* Demo: - private static void __SetUserCode(object entity, object value) - { - ((MyUser)entity).UserCode = (string)value; - } - */ - MethodBuilder staticSetMathodBuilder = this._typeBuilder.DefineMethod(s_memberPrefix + "Set" + propertyInfo.Name, MethodAttributes.Static | MethodAttributes.Private | MethodAttributes.SpecialName | MethodAttributes.HideBySig, null, new Type[] { typeof(object), typeof(object) }); - - //定义两个参数,entity, value - staticSetMathodBuilder.DefineParameter(1, ParameterAttributes.None, "entity"); - staticSetMathodBuilder.DefineParameter(2, ParameterAttributes.None, "value"); - - //生成方法IL代码 - ILGenerator staticSetMethodGenerator = staticSetMathodBuilder.GetILGenerator(); - - staticSetMethodGenerator.Emit(OpCodes.Ldarg_0); - staticSetMethodGenerator.Emit(OpCodes.Castclass, this._typeBuilder); - staticSetMethodGenerator.Emit(OpCodes.Ldarg_1); - - //值类型则做装箱,非值类型则做类型转换 - if (propertyInfo.PropertyType.IsValueType) - staticSetMethodGenerator.Emit(OpCodes.Unbox_Any, propertyInfo.PropertyType); - else - staticSetMethodGenerator.Emit(OpCodes.Castclass, propertyInfo.PropertyType); - //调用方法 - staticSetMethodGenerator.Emit(OpCodes.Call, propertyBuilder.SetMethod); - //设置返回值 - staticSetMethodGenerator.Emit(OpCodes.Ret); - - #endregion - - return staticSetMathodBuilder; - } - - private void BuildGetMethod(PropertyInfo propertyInfo, PropertyBuilder propertyBuilder) - { - #region override get method - - MethodBuilder getMathodBuilder = this._typeBuilder.DefineMethod(propertyInfo.GetMethod.Name, MethodAttributes.Virtual | MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, propertyInfo.PropertyType, Type.EmptyTypes); - - ILGenerator getMethodGenerator = getMathodBuilder.GetILGenerator(); - - getMethodGenerator.Emit(OpCodes.Ldarg_0); - getMethodGenerator.Emit(OpCodes.Call, propertyInfo.GetMethod); - getMethodGenerator.Emit(OpCodes.Ret); - - propertyBuilder.SetGetMethod(getMathodBuilder); - - #endregion - } - - private MethodBuilder BuildStaticGetMethod(PropertyInfo propertyInfo) - { - #region GetValue - - //生成获取属性值的静态方法: - /* Demo: - private static Guid __GetUserCode(object entity) - { - return ((MyUser)entity).UserCode; - } - */ - MethodBuilder staticGetMathodBuilder = this._typeBuilder.DefineMethod(s_memberPrefix + "Get" + propertyInfo.Name, MethodAttributes.Static | MethodAttributes.Private | MethodAttributes.SpecialName | MethodAttributes.HideBySig, typeof(object), new Type[] { typeof(object) }); - //定义参数 - staticGetMathodBuilder.DefineParameter(1, ParameterAttributes.None, "entity"); - //生成方法IL代码 - ILGenerator staticGetMethodGenerator = staticGetMathodBuilder.GetILGenerator(); - //定义类型 - staticGetMethodGenerator.DeclareLocal(this._targeType); - staticGetMethodGenerator.Emit(OpCodes.Ldarg_0); - - //类型转换后调用方法 - staticGetMethodGenerator.Emit(OpCodes.Castclass, this._targeType); - staticGetMethodGenerator.Emit(OpCodes.Callvirt, propertyInfo.GetMethod); - - if (propertyInfo.PropertyType.IsValueType) - staticGetMethodGenerator.Emit(OpCodes.Box, propertyInfo.PropertyType); - - //入栈,设置返回值 - staticGetMethodGenerator.Emit(OpCodes.Stloc_0); - staticGetMethodGenerator.Emit(OpCodes.Ldloc_0); - staticGetMethodGenerator.Emit(OpCodes.Ret); - - #endregion - - return staticGetMathodBuilder; - } - - private void BuidSetMethod(PropertyInfo propertyInfo, string fieldName, PropertyBuilder propertyBuilder) - { - #region override set method - - MethodBuilder setMathodBuilder = this._typeBuilder.DefineMethod(propertyInfo.SetMethod.Name, MethodAttributes.Virtual | MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig, null, new Type[] { propertyInfo.PropertyType }); - - ILGenerator setMethodGenerator = setMathodBuilder.GetILGenerator(); - - setMethodGenerator.Emit(OpCodes.Ldarg_0); - setMethodGenerator.Emit(OpCodes.Ldarg_1); - setMethodGenerator.Emit(OpCodes.Call, propertyInfo.SetMethod); - - setMethodGenerator.Emit(OpCodes.Ldarg_0); - setMethodGenerator.Emit(OpCodes.Ldstr, fieldName); - //设置字段变更 - setMethodGenerator.Emit(OpCodes.Call, s_typeCache.SetFieldChangedMethodInfo); - setMethodGenerator.Emit(OpCodes.Ret); - propertyBuilder.SetSetMethod(setMathodBuilder); - - #endregion - } - - #endregion - - #region 反射过程中使用的缓存类 - - /// - /// 在反射过程中需要使用的的类型。 - /// - private class TypeCache - { - public FieldInfo FieldNameFieldInfo; - - public FieldInfo FieldTypeFieldInfo; - - public FieldInfo SetValueActionFieldInfo; - - public FieldInfo SetValueNoChangeActionFieldInfo; - - public FieldInfo GetValueFuncFieldInfo; - - public FieldInfo JsonIgnoreFieldInfo; - - public FieldInfo IsVirtualFieldInfo; - - //实体枚举值 - public FieldInfo EnumDescriptionColumnNameFieldInfo; - - public FieldInfo EnumDescriptionColumnTypeFieldInfo; - - public MethodInfo GetTypeFromHandleMethodInfo; - - public MethodInfo GetEntityFieldInfoMethodInfo; - - public MethodInfo SetFieldChangedMethodInfo; - - public MethodInfo DictionaryAddMethodInfo; - - public ConstructorInfo EntityFieldInfoCconstructorInfo; - - public ConstructorInfo ActionConstructorInfo; - - public ConstructorInfo FuncConstructorInfo; - - public ConstructorInfo SerializableAttributeConstructorInfo; - - public ConstructorInfo XmlRootAttributeConstructorInfo; - - public TypeCache() - { - //TODO - Type entityFieldInfoType = null;//typeof(EntityFieldInfo); - - FieldNameFieldInfo = entityFieldInfoType.GetField("FieldName"); - - FieldTypeFieldInfo = entityFieldInfoType.GetField("FieldType"); - - SetValueActionFieldInfo = entityFieldInfoType.GetField("SetValueAction"); - - SetValueNoChangeActionFieldInfo = entityFieldInfoType.GetField("SetValueNoChangeAction"); - - GetValueFuncFieldInfo = entityFieldInfoType.GetField("GetValueFunc"); - - JsonIgnoreFieldInfo = entityFieldInfoType.GetField("JsonIgnore"); - - IsVirtualFieldInfo = entityFieldInfoType.GetField("IsVirtual"); - - EnumDescriptionColumnNameFieldInfo = entityFieldInfoType.GetField("EnumDescriptionColumnName"); - - EnumDescriptionColumnTypeFieldInfo = entityFieldInfoType.GetField("EnumDescriptionColumnType"); - - GetTypeFromHandleMethodInfo = typeof(System.Type).GetMethod("GetTypeFromHandle", new Type[] { typeof(RuntimeTypeHandle) }); - - GetEntityFieldInfoMethodInfo = typeof(EntityBase).GetMethod("GetEntityFieldInfo", BindingFlags.Instance | BindingFlags.NonPublic, null, Type.EmptyTypes, null); - - SetFieldChangedMethodInfo = typeof(EntityBase).GetMethod("SetFieldChanged", BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(string) }, null); - - DictionaryAddMethodInfo = GetEntityFieldInfoMethodInfo.ReturnType.GetMethod("Add"); - - EntityFieldInfoCconstructorInfo = entityFieldInfoType.GetConstructor(Type.EmptyTypes); - - ActionConstructorInfo = typeof(Action).GetConstructor(new Type[] { typeof(object), typeof(IntPtr) }); - - FuncConstructorInfo = typeof(Func).GetConstructor(new Type[] { typeof(object), typeof(IntPtr) }); - - SerializableAttributeConstructorInfo = typeof(SerializableAttribute).GetConstructor(Type.EmptyTypes); - - XmlRootAttributeConstructorInfo = typeof(XmlRootAttribute).GetConstructor(new Type[] { typeof(string) }); - - } - } - #endregion -} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs index 868ecdde..cd7aeee7 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityManager/EntityTypeManager.cs @@ -5,8 +5,9 @@ using System.Reflection.Emit; using System.Reflection; using System.Text; using System.Threading.Tasks; -using H.LowCode.RenderEngine.Domain; using System.ComponentModel.DataAnnotations; +using H.LowCode.Entity; +using H.LowCode.RenderEngine.Domain; namespace H.LowCode.RenderEngine.EntityFrameworkCore; diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/EmitExtension.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/EmitExtension.cs deleted file mode 100644 index 52ebe61e..00000000 --- a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/EmitExtension.cs +++ /dev/null @@ -1,349 +0,0 @@ -using JetBrains.Annotations; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection.Emit; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading.Tasks; - -namespace H.LowCode.RenderEngine.EntityFrameworkCore; - -/// -/// Emit扩展 -/// -internal static class EmitExtension -{ - #region Assembly, Module - /// - /// 创建一个可运行的动态程序集 - /// - /// 程序集名称 - /// - /// 动态程序集 - /// assemblyName为空 - [NotNull] - public static AssemblyBuilder CreateDynamicAssembly([NotNull] string assemblyName, - [NotNull] AssemblyCreateOptions options) - { - if (string.IsNullOrEmpty(assemblyName)) - throw new ArgumentNullException(nameof(assemblyName)); - if (options == null) - throw new ArgumentNullException(nameof(options)); - - var assemblyNameObj = new AssemblyName(assemblyName); - - if (options.StrongName) - { - assemblyNameObj.SetPublicKey(options.PublicKey); - } - - var assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyNameObj, AssemblyBuilderAccess.Run); - - // 设置程序集的内部可见 - if (options.InternalsVisibleTo != null && options.InternalsVisibleTo.Length > 0) - { - var constructorInfo = typeof(InternalsVisibleToAttribute).GetConstructor(new[] { typeof(string) }); - - // InternalsVisibleToAttribute类型一定会有一个构造函数接收1个字符串 - if (constructorInfo != null) - { - var customAttributeBuilder = new CustomAttributeBuilder(constructorInfo, - options.InternalsVisibleTo.OfType().ToArray()); - assemblyBuilder.SetCustomAttribute(customAttributeBuilder); - } - } - - return assemblyBuilder; - } - - /// - /// 为动态程序集创建一个模块 - /// - /// 动态程序集 - /// 模块名 - /// 动态程序集中的模块 - /// assemblyBuilder或moduleName为空 - [NotNull] - public static ModuleBuilder CreateModule([NotNull] this AssemblyBuilder assemblyBuilder, - [NotNull] string moduleName) - { - if (assemblyBuilder == null) - throw new ArgumentNullException(nameof(assemblyBuilder)); - - if (string.IsNullOrEmpty(moduleName)) - throw new ArgumentNullException(nameof(moduleName)); - - var moduleBuilder = assemblyBuilder.DefineDynamicModule(moduleName); - return moduleBuilder; - } - #endregion - - #region Type - /// - /// 为动态程序集创建一个类型,继承指定基类,实现一些接口 - /// - /// - /// - /// - /// - /// - /// moduleBuilder或typeName或baseType为空时 - [NotNull] - public static TypeBuilder DefineType([NotNull] this ModuleBuilder moduleBuilder, - [NotNull] string typeName, - [NotNull] Type baseType, - [CanBeNull][ItemNotNull] IEnumerable interfaceTypes = null) - { - if (moduleBuilder == null) - throw new ArgumentNullException(nameof(moduleBuilder)); - if (string.IsNullOrEmpty(typeName)) - throw new ArgumentNullException(nameof(typeName)); - if (baseType == null) - throw new ArgumentNullException(nameof(baseType)); - - var typeAttributes = TypeAttributes.Public | TypeAttributes.Class; - var typeBuilder = moduleBuilder.DefineType(typeName, typeAttributes, baseType); - - // 实现接口 - if (interfaceTypes != null) - { - foreach (var interfaceType in interfaceTypes) - { - typeBuilder.AddInterfaceImplementation(interfaceType); - } - } - - return typeBuilder; - } - #endregion - - #region Properties - /// - /// 为类型创建一个自动属性 - /// - /// - /// - /// - /// - /// typeBuilder或propertyName或propertyType为空 - [NotNull] - public static PropertyBuilder DefineField([NotNull] this TypeBuilder typeBuilder, - [NotNull] string propertyName, - [NotNull] Type propertyType) - { - if (typeBuilder == null) - throw new ArgumentNullException(nameof(typeBuilder)); - if (string.IsNullOrEmpty(propertyName)) - throw new ArgumentNullException(nameof(propertyName)); - if (propertyType == null) - throw new ArgumentNullException(nameof(propertyType)); - - // c# - // private type _field; - var fieldBuilder = typeBuilder.DefineField(GetBackgroundFieldName(propertyName), propertyType, - FieldAttributes.Private); - // [CompilerGenerated] - fieldBuilder.AddCustomAttribute(typeof(CompilerGeneratedAttribute)); - - // c# - // public type get_field() {} - var getMethodBuilder = typeBuilder.DefineMethod("get_" + propertyName, - MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName, propertyType, - Type.EmptyTypes); - var getIL = getMethodBuilder.GetILGenerator(); - - // c# - // return _field; - getIL.Emit(OpCodes.Ldarg_0); - getIL.Emit(OpCodes.Ldfld, fieldBuilder); - getIL.Emit(OpCodes.Ret); - - // c# - // public void set_field(type value) {} - var setMethodBuilder = typeBuilder.DefineMethod("set_" + propertyName, - MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName, null, - new[] { propertyType }); - var setIL = setMethodBuilder.GetILGenerator(); - - // c# - // _field = value; - setIL.Emit(OpCodes.Ldarg_0); - setIL.Emit(OpCodes.Ldarg_1); - setIL.Emit(OpCodes.Stfld, fieldBuilder); - setIL.Emit(OpCodes.Ret); - - // define property - // property = get + set - var propertyBuilder = typeBuilder.DefineProperty(propertyName, PropertyAttributes.None, propertyType, null); - - propertyBuilder.SetGetMethod(getMethodBuilder); - propertyBuilder.SetSetMethod(setMethodBuilder); - - return propertyBuilder; - } - - /// - /// 产生自动属性的后台字段 - /// - private static string GetBackgroundFieldName(string propertyName) - { - return $"<{propertyName}>k__BackingField"; - } - #endregion - - #region Attributes - // /// - // /// 向动态类型增加一个Attribute标记(只支持带有无参数构造函数的Attribute类型) - // /// - // /// 动态类型 - // /// Attribute类型 - // /// - // /// typeBuilder或attributeType为空 - // public static AssemblyBuilder AddCustomAttribute([NotNull] this AssemblyBuilder assemblyBuilder, - // [NotNull] Type attributeType) - // { - // if (assemblyBuilder == null) - // throw new ArgumentNullException(nameof(assemblyBuilder)); - // - // assemblyBuilder.SetCustomAttribute(CreateCustomAttribute(attributeType)); - // - // return assemblyBuilder; - // } - - /// - /// 向动态类型增加一个Attribute标记(只支持带有无参数构造函数的Attribute类型) - /// - /// 动态类型 - /// Attribute类型 - /// - /// typeBuilder或attributeType为空 - public static TypeBuilder AddCustomAttribute([NotNull] this TypeBuilder typeBuilder, - [NotNull] Type attributeType) - { - if (typeBuilder == null) - throw new ArgumentNullException(nameof(typeBuilder)); - - typeBuilder.SetCustomAttribute(CreateCustomAttribute(attributeType)); - - return typeBuilder; - } - - /// - /// 向属性增加一个Attribute标记(只支持带有无参数构造函数的Attribute类型) - /// - /// 动态属性 - /// Attribute类型 - /// - /// propertyBuilder或attributeType为空 - public static PropertyBuilder AddCustomAttribute([NotNull] this PropertyBuilder propertyBuilder, - [NotNull] Type attributeType) - { - if (propertyBuilder == null) - throw new ArgumentNullException(nameof(propertyBuilder)); - - propertyBuilder.SetCustomAttribute(CreateCustomAttribute(attributeType)); - - return propertyBuilder; - } - - /// - /// 向字段增加一个Attribute标记(只支持带有无参数构造函数的Attribute类型) - /// - /// 动态字段 - /// Attribute类型 - /// - /// fieldBuilder或attributeType为空 - public static FieldBuilder AddCustomAttribute([NotNull] this FieldBuilder fieldBuilder, - [NotNull] Type attributeType) - { - if (fieldBuilder == null) - throw new ArgumentNullException(nameof(fieldBuilder)); - - fieldBuilder.SetCustomAttribute(CreateCustomAttribute(attributeType)); - - return fieldBuilder; - } - - private static CustomAttributeBuilder CreateCustomAttribute([NotNull] Type attributeType) - { - if (attributeType == null) - throw new ArgumentNullException(nameof(attributeType)); - - var constructorInfo = attributeType.GetConstructor(Type.EmptyTypes); - if (constructorInfo == null) - throw new InvalidOperationException($"类型[{attributeType.Name}]没有无参数的构造函数"); - - return new CustomAttributeBuilder(constructorInfo, new object[0]); - } - #endregion - - #region Delegates - - /// - /// 获取类型的无参数构造函数委托 - /// - public static ObjectActivatorDelegate GetActivatorProxyFunc([NotNull] this Type type, - [CanBeNull] DelegateMethodCreateOptions options = null) - { - if (type == null) - throw new ArgumentNullException(nameof(type)); - - var constructorInfo = type.GetConstructor(Type.EmptyTypes); - if (constructorInfo == null) - throw new InvalidOperationException($"类型[{type.Name}]没有无参数的构造函数"); - - var method = - options?.BelongModule == null - ? new DynamicMethod("Create" + type.Name, type, Type.EmptyTypes) - : new DynamicMethod("Create" + type.Name, type, Type.EmptyTypes, options.BelongModule); - - var ilGenerator = method.GetILGenerator(); - - ilGenerator.Emit(OpCodes.Newobj, constructorInfo); - ilGenerator.Emit(OpCodes.Ret); - - return (ObjectActivatorDelegate)method.CreateDelegate(typeof(ObjectActivatorDelegate)); - } - - #endregion -} - -/// -/// 程序集创建参数 -/// -internal class AssemblyCreateOptions -{ - /// - /// 是否需要程序集强名称 - /// - public bool StrongName { get; set; } - - /// - /// 程序集强名称的PublicKey - /// - public byte[] PublicKey { get; set; } - - /// - /// 程序集内部可见的设置 - /// - public string[] InternalsVisibleTo { get; set; } -} - -/// -/// 代理方法创建参数 -/// -internal class DelegateMethodCreateOptions -{ - /// - /// 方法归属的模块 - /// 如果方法访问了私有的类型或方法,归属模块尤其重要。 - /// 不设置或归属模块不正确,会导致无法访问私有类型或成员的问题。 - /// - public Module BelongModule { get; set; } -} - -internal delegate object ObjectActivatorDelegate(); -internal delegate object GetValueDelegate(object obj); -internal delegate void SetValueDelegate(object obj, object value); \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs deleted file mode 100644 index 135a5447..00000000 --- a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/Extensions/ReflectionExtensions.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; - -namespace H.LowCode.RenderEngine.EntityFrameworkCore; - -internal static class ReflectionExtensions -{ - /// - /// 得到一个实际的类型(排除Nullable类型的影响)。 - /// - /// - /// - /// 比如:int? 最后将得到int. - /// - /// - public static Type GetRealType(this Type type) - { - if (type == null) - throw new ArgumentNullException(nameof(type)); - - if (type.IsGenericType) - return Nullable.GetUnderlyingType(type) ?? type; - else - return type; - } - - public static bool IsSimpleType(this Type type) - { - if (type == null) - throw new ArgumentNullException(nameof(type)); - - return type.IsPrimitive - || type == typeof(string) - || type == typeof(DateTime) - || type == typeof(decimal) - || type == typeof(Guid) - || type.IsEnum; - } - - - public static bool IsNullableType(this Type type) - { - if (type == null) - throw new ArgumentNullException(nameof(type)); - - return type.IsGenericType - && type.IsGenericTypeDefinition == false - && type.GetGenericTypeDefinition() == typeof(Nullable<>); - } - - - public static bool HasReturn(this MethodInfo m) - { - return m.ReturnType != typeof(void); - } - - /// - /// 判断type是否继承或者实现generic - /// 泛型处理 - /// - /// - /// - /// - public static bool HasImplemented(this Type type, Type generic) - { - if (type == null) throw new ArgumentNullException(nameof(type)); - if (generic == null) throw new ArgumentNullException(nameof(generic)); - - //接口。 - var isTheRawGenericType = type.GetInterfaces().Any(IsTheRawGenericType); - if (isTheRawGenericType) return true; - - //类型。 - while (type != null && type != typeof(object)) - { - isTheRawGenericType = IsTheRawGenericType(type); - if (isTheRawGenericType) return true; - type = type.BaseType; - } - - // 没有找到任何匹配的接口或类型。 - return false; - - //某个类型是否是指定的原始接口。 - bool IsTheRawGenericType(Type test) - => generic == (test.IsGenericType ? test.GetGenericTypeDefinition() : test); - } -} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/H.LowCode.RenderEngine.EntityFrameworkCore.csproj b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/H.LowCode.RenderEngine.EntityFrameworkCore.csproj index 6feade28..979f00fe 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/H.LowCode.RenderEngine.EntityFrameworkCore.csproj +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/H.LowCode.RenderEngine.EntityFrameworkCore.csproj @@ -10,6 +10,7 @@ + diff --git a/src/RenderEngine/H.LowCode.RenderEngine/H.LowCode.RenderEngine.csproj b/src/RenderEngine/H.LowCode.RenderEngine/H.LowCode.RenderEngine.csproj index d087c02d..f1cab2a6 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine/H.LowCode.RenderEngine.csproj +++ b/src/RenderEngine/H.LowCode.RenderEngine/H.LowCode.RenderEngine.csproj @@ -18,7 +18,6 @@ - diff --git a/src/RenderEngine/H.LowCode.RenderEngine/_Imports.razor b/src/RenderEngine/H.LowCode.RenderEngine/_Imports.razor index 340962c2..652bf821 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine/_Imports.razor +++ b/src/RenderEngine/H.LowCode.RenderEngine/_Imports.razor @@ -5,5 +5,4 @@ @using H.LowCode.ComponentBase @using H.LowCode.RenderEngine @using H.LowCode.RenderEngine.Application.Contracts -@using H.LowCode.MetaSchema -@using H.LowCode.Model \ No newline at end of file +@using H.LowCode.MetaSchema \ No newline at end of file -- Gitee From 9f77189e658c27d2f8702b67ada14c4e1909807a Mon Sep 17 00:00:00 2001 From: "{iliuhai@aliyun.com}" Date: Sat, 22 Mar 2025 22:51:08 +0800 Subject: [PATCH 16/18] =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=BA=90=E9=85=8D=E7=BD=AE=E5=92=8C=E6=B8=B2?= =?UTF-8?q?=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- meta/apps/caseapp/page/fhumgxyk.json | 327 +----------------- .../componentParts/antdesign/52391a70.json | 8 +- .../componentParts/antdesign/5icgyefr.json | 7 +- .../componentParts/antdesign/6d997568.json | 7 +- .../componentParts/antdesign/7bab5a19.json | 7 +- .../componentParts/antdesign/85jlapqoc.json | 2 +- .../componentParts/antdesign/8b0lapquf.json | 2 +- .../componentParts/antdesign/9xulbbf5u.json | 2 +- .../componentParts/antdesign/csbjlezr.json | 2 +- .../componentParts/antdesign/elc02goef.json | 2 +- .../componentParts/antdesign/evuqdwzl.json | 14 +- .../componentParts/antdesign/f2b54b4c.json | 2 +- .../componentParts/antdesign/f63f79db.json | 4 +- .../componentParts/antdesign/fmiwu412.json | 2 +- .../componentParts/antdesign/jlcybdkg.json | 4 +- .../componentParts/antdesign/jmmybvkua.json | 2 +- .../componentParts/antdesign/nl9e6mko.json | 2 +- .../componentParts/antdesign/nwepem4i.json | 2 +- .../componentParts/antdesign/oikgmvkm.json | 2 +- .../componentParts/antdesign/ookcvyml.json | 4 +- .../componentParts/antdesign/sonvddk21.json | 2 +- .../componentParts/antdesign/vdcoqln1z.json | 4 +- .../componentParts/antdesign/yo3v3smv.json | 4 +- .../H.LowCode.Entity/Base/FormEntity.cs | 12 + .../Components/APIDataSource.razor | 70 ++++ .../Components/APIParamsList.razor | 118 +++++++ .../DesignEngineDynamicComponentBase.cs | 96 ++++- .../H.LowCode.DesignEngine.Abstraction.csproj | 1 + .../_Imports.razor | 1 + .../DataSourceDomainService.cs | 2 +- .../PartsModels/ComponentPartsListModel.cs | 1 - .../ComponentPanel/DragItem.razor | 2 +- .../DesignPanel/ComponentItem.razor | 2 +- .../DesignPanel/DesignPanel.razor | 12 +- .../DesignPanel/DropItemContainer.razor | 2 +- .../H.LowCode.DesignEngine.csproj | 4 +- .../Pages/DesignPage.razor | 10 +- .../SettingPanel/PageSetting.razor | 4 +- .../BasicPropertyItem.razor | 9 +- .../DataSourcePropertyItem.razor | 75 ++-- .../ExtensionPropertyItem.razor | 44 +-- .../FiexdForOptionDataSource.razor | 129 +++++++ .../OptionDataSourceSetting.razor | 47 +++ .../SQLForOptionDataSource.razor | 25 ++ .../H.LowCode.MyApp/H.LowCode.MyApp.csproj | 2 +- ...taSource.razor => APIDataSourceList.razor} | 61 +--- ...ource.razor => OptionDataSourceList.razor} | 2 +- ...Source.razor => TableDataSourceList.razor} | 6 +- .../Pages/DataSourceManager.razor | 6 +- .../H.LowCode.MyApp/Pages/PageManager.razor | 4 +- .../H.LowCode.MyApp/_Imports.razor | 1 + .../ComponentPanel/DragItem.razor | 2 +- .../DesignPanel/ComponentItem.razor | 2 +- .../DesignPanel/DropItemContainer.razor | 2 +- .../ComponentPartsList.razor | 4 +- src/Directory.Packages.props | 56 +-- .../Components/LcLakexEditor.razor | 2 +- .../Components/LcMonacoEditor.razor | 2 +- .../ComponentRender/ComponentRender.razor | 2 +- .../ComponentRender/FormComponentRender.razor | 2 +- .../PageRender/FormPageRender_Test.razor | 54 ++- .../ComponentPartsSchema.cs | 93 +++-- .../ComponentPartsDataSourceSchema.cs} | 8 +- .../PagePartsSchema.cs | 2 +- ...mponentPartsAttributeDefineGroupSchema.cs} | 15 +- .../ComponentPartsAttributeDefineSchema.cs | 51 +++ .../ComponentPartsFragmentSchema.cs | 4 +- .../ComponentPartsStyleSchema.cs | 7 - .../ComponentSchema.cs | 8 +- .../PageSchema.cs | 2 +- .../ComponentFragmentSchema.cs | 3 +- .../ComponentSchemaBase.cs | 39 +-- .../H.LowCode.MetaSchema/DataSourceSchema.cs | 4 +- .../{APISchema.cs => APIDataSourceSchema.cs} | 56 ++- .../ComponentDataSourceSchema.cs | 24 ++ ...ionSchema.cs => OptionDataSourceSchema.cs} | 8 +- .../DataSourceSchemas/SQLDataSourceSchema.cs | 18 + ...m.cs => ComponentAttributeItemTypeEnum.cs} | 2 +- .../Enums/ComponentDataSourceGroupTypeEnum.cs | 16 + .../Enums/ComponentDataSourceTypeEnum.cs | 4 +- .../Enums/PageDataSourceTypeEnum.cs | 2 +- .../H.LowCode.MetaSchema/PageSchemaBase.cs | 3 - .../ComponentFragmentSchemaBase.cs | 12 +- .../ComponentPropertyGroupSchema.cs | 19 - .../ComponentPropertySchema.cs | 135 -------- .../PropertySchemas/ComponentStyleSchema.cs | 7 - .../PropertySchemas/PropertyItemSchema.cs | 6 +- .../Utils/ObjectMerger.cs | 62 +++- .../RenderEngineDynamicComponentBase.cs | 94 ++++- .../DataAppServices/FormDataAppService.cs | 4 +- .../LowCodeAutoMapperProfile.cs | 1 + .../FormDataDomainService.cs | 9 +- .../DataSourceDomainService.cs | 2 +- .../DataRepositories/FormDataRepository.cs | 8 +- .../RenderEngineDbContext.cs | 16 +- .../H.LowCode.RenderEngine.csproj | 7 +- 96 files changed, 1124 insertions(+), 917 deletions(-) create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Abstraction/Components/APIDataSource.razor create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Abstraction/Components/APIParamsList.razor create mode 100644 src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/OptionDataSource/FiexdForOptionDataSource.razor create mode 100644 src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/OptionDataSource/OptionDataSourceSetting.razor create mode 100644 src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/OptionDataSource/SQLForOptionDataSource.razor rename src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/{APIDataSource.razor => APIDataSourceList.razor} (66%) rename src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/{OptionDataSource.razor => OptionDataSourceList.razor} (99%) rename src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/{TableDataSource.razor => TableDataSourceList.razor} (98%) rename src/Protocol/H.LowCode.MetaSchema.DesignEngine/{PropertySchemas/ComponentPartsPropertyGroupSchema.cs => DataSourceSchemas/ComponentPartsDataSourceSchema.cs} (44%) rename src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/{ComponentPartsPropertySchema.cs => ComponentPartsAttributeDefineGroupSchema.cs} (42%) create mode 100644 src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineSchema.cs rename src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/{APISchema.cs => APIDataSourceSchema.cs} (41%) rename src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/{OptionSchema.cs => OptionDataSourceSchema.cs} (66%) create mode 100644 src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/SQLDataSourceSchema.cs rename src/Protocol/H.LowCode.MetaSchema/Enums/{PropertyItemTypeEnum.cs => ComponentAttributeItemTypeEnum.cs} (86%) create mode 100644 src/Protocol/H.LowCode.MetaSchema/Enums/ComponentDataSourceGroupTypeEnum.cs delete mode 100644 src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentPropertyGroupSchema.cs delete mode 100644 src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentPropertySchema.cs diff --git a/meta/apps/caseapp/page/fhumgxyk.json b/meta/apps/caseapp/page/fhumgxyk.json index b11eccc8..09c0ab94 100644 --- a/meta/apps/caseapp/page/fhumgxyk.json +++ b/meta/apps/caseapp/page/fhumgxyk.json @@ -1,326 +1 @@ -{ - "aid": "caseapp", - "id": "fhumgxyk", - "n": "基础表单", - "order": 21, - "pt": 1, - "pub": 0, - "pageprop": { - "playout": 3, - "ds": { - "dst": 0 - } - }, - "ds": { - "dst": 1, - "dsv": "tb_test1" - }, - "comps": [ - { - "id": "0bd406f9-10f9-4eaf-8184-270b192a5e20", - "libid": "antdesign", - "compid": "52391a70", - "pid": "lyawwbh9f", - "n": "f_field1", - "lb": "输入框1", - "desc": "111", - "container": false, - "frag": { - "t": "AntDesign.Input\u00601[System.String], AntDesign", - "valt": "System.String", - "attrs": [] - }, - "pgroups": [ - { - "n": "basic", - "disn": "自定义", - "props": [ - { - "n": "maxlength", - "disn": "最大长度", - "desc": "字段输入的最大长度,为0时表示不限制长度", - "dftval": "0", - "compvaltype": 0 - }, - { - "n": "isslice", - "disn": "是否截断", - "desc": "选择\u0022是\u0022当超出数据库长度时字段截断", - "dftval": "0", - "compvaltype": 0 - }, - { - "n": "isreadonly", - "disn": "是否只读", - "desc": "", - "dftval": "0", - "compvaltype": 0 - }, - { - "n": "tips", - "disn": "输入提示", - "dftval": "", - "compvaltype": 0 - } - ] - } - ], - "stl": { - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "ev": {}, - "childs": [], - "ds": { - "dst": 0 - } - }, - { - "id": "299f6803-f04d-498d-ab53-3c1812c91b3d", - "libid": "antdesign", - "compid": "52391a70", - "pid": "lyawwbh9f", - "n": "f_field3", - "lb": "输入框2", - "desc": "222", - "container": false, - "frag": { - "t": "AntDesign.Input\u00601[System.String], AntDesign", - "valt": "System.String", - "attrs": [] - }, - "pgroups": [ - { - "n": "basic", - "disn": "自定义", - "props": [ - { - "n": "maxlength", - "disn": "最大长度", - "desc": "字段输入的最大长度,为0时表示不限制长度", - "dftval": "0", - "compvaltype": 0 - }, - { - "n": "isslice", - "disn": "是否截断", - "desc": "选择\u0022是\u0022当超出数据库长度时字段截断", - "dftval": "0", - "compvaltype": 0 - }, - { - "n": "isreadonly", - "disn": "是否只读", - "desc": "", - "dftval": "0", - "compvaltype": 0 - }, - { - "n": "tips", - "disn": "输入提示", - "dftval": "", - "compvaltype": 0 - } - ] - } - ], - "stl": { - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "ev": {}, - "childs": [], - "ds": { - "dst": 0 - } - }, - { - "id": "vjolyn1r", - "libid": "antdesign", - "compid": "evuqdwzl", - "pid": "zkgldg5b", - "n": "f_field6", - "lb": "单选框", - "container": false, - "frag": { - "t": "AntDesign.Radio\u00601[System.String], AntDesign", - "valt": "System.String", - "attrs": [] - }, - "pgroups": [], - "stl": { - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "ev": {}, - "childs": [], - "ds": { - "dst": 0 - } - }, - { - "id": "4trfp5bk", - "libid": "antdesign", - "compid": "vdcoqln1z", - "pid": "zkgldg5b", - "n": "f_field4", - "lb": "复选框", - "container": false, - "frag": { - "t": "AntDesign.Checkbox, AntDesign", - "valt": "System.Boolean", - "attrs": [] - }, - "pgroups": [], - "stl": { - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "ev": {}, - "childs": [], - "ds": { - "dst": 0 - } - }, - { - "id": "vdyv8q2ay", - "libid": "antdesign", - "compid": "7bab5a19", - "pid": "zkgldg5b", - "n": "f_field10", - "lb": "日期选择器", - "container": false, - "frag": { - "t": "AntDesign.DatePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign", - "valt": "System.Nullable\u00601[System.DateTime]", - "attrs": [] - }, - "pgroups": [], - "stl": { - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "ev": {}, - "childs": [], - "ds": { - "dst": 0 - } - }, - { - "id": "itnmgtzg", - "libid": "antdesign", - "compid": "oikgmvkm", - "pid": "zkgldg5b", - "n": "f_field13", - "lb": "时间选择器", - "container": false, - "frag": { - "t": "AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign", - "valt": "System.Nullable\u00601[System.DateTime]", - "attrs": [] - }, - "pgroups": [], - "stl": { - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "ev": {}, - "childs": [], - "ds": { - "dst": 0 - } - }, - { - "id": "ibgtanur", - "libid": "antdesign", - "compid": "5icgyefr", - "pid": "ongkggvjy", - "n": "f_field7", - "lb": "文本框", - "container": false, - "frag": { - "t": "AntDesign.TextArea, AntDesign", - "valt": "System.String", - "attrs": [] - }, - "pgroups": [], - "stl": { - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "ev": {}, - "childs": [], - "ds": { - "dst": 0 - } - }, - { - "id": "c9acpmcp", - "libid": "antdesign", - "compid": "9xulbbf5u", - "pid": "ongkggvjy", - "n": "f_field11", - "lb": "选择器", - "container": false, - "frag": { - "t": "AntDesign.Select\u00602[[System.String],[System.String]], antdesign", - "valt": "System.String", - "attrs": [] - }, - "pgroups": [], - "stl": { - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "ev": {}, - "childs": [], - "ds": { - "dst": 0 - } - }, - { - "id": "cgfb0e64", - "libid": "antdesign", - "compid": "nwepem4i", - "pid": "ongkggvjy", - "n": "f_field9", - "lb": "开关", - "container": false, - "frag": { - "t": "AntDesign.Switch, AntDesign", - "valt": "System.Boolean", - "attrs": [] - }, - "pgroups": [], - "stl": { - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "ev": {}, - "childs": [], - "ds": { - "dst": 0 - } - } - ], - "createdTime": "0001-01-01T00:00:00", - "modifiedTime": "2025-02-09T13:55:22.6501562Z" -} \ No newline at end of file +{"comps":[{"compid":"52391a70","libid":"antdesign","cn":"Input","ct":1,"frag":{"dt":"AntDesign.Input\u00601[System.String], AntDesign","t":"AntDesign.Input\u00601[System.String], AntDesign","valt":"System.String","attrs":[]},"ds":{"dsgt":1},"attrdefgroups":[{"n":"basic","disn":"自定义","attrs":[]}],"childs":[],"order":10,"pub":1,"mt":"2025-02-24T15:36:15.8037414Z","id":"0bd406f9-10f9-4eaf-8184-270b192a5e20","pid":"lyawwbh9f","n":"f_field1","lb":"输入框1","desc":"111","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"52391a70","libid":"antdesign","cn":"Input","ct":1,"frag":{"dt":"AntDesign.Input\u00601[System.String], AntDesign","t":"AntDesign.Input\u00601[System.String], AntDesign","valt":"System.String","attrs":[]},"ds":{},"attrdefgroups":[{"n":"basic","disn":"自定义","attrs":[]}],"childs":[],"order":10,"pub":1,"mt":"2025-02-24T15:36:15.8037414Z","id":"299f6803-f04d-498d-ab53-3c1812c91b3d","pid":"lyawwbh9f","n":"f_field3","lb":"输入框2","desc":"222","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"evuqdwzl","libid":"antdesign","cn":"Radio","ct":1,"frag":{"dt":"AntDesign.RadioGroup\u00601[System.String], AntDesign","t":"AntDesign.RadioGroup\u00601[System.String], AntDesign","attrs":[{"n":"TValue","val":"System.String"}]},"ds":{"dsgt":1,"dst":8,"dsft":"AntDesign.Radio\u00601[System.String], AntDesign","fxopds":[{"l":"选项1","v":"op1"},{"l":"选项2","v":"op2"},{"l":"选项3","v":"op3"},{"l":"选项4","v":"op4"}]},"attrdefgroups":[],"childs":[],"order":13,"pub":1,"mt":"2025-03-01T02:58:56.1519656Z","id":"vjolyn1r","pid":"zkgldg5b","n":"f_field6","lb":"单选框","sptds":true,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"vdcoqln1z","libid":"antdesign","cn":"Checkbox","ct":1,"frag":{"dt":"AntDesign.Checkbox, AntDesign","t":"AntDesign.Checkbox, AntDesign","valt":"System.Boolean","attrs":[]},"ds":{"dsgt":1},"attrdefgroups":[],"childs":[],"order":14,"pub":1,"mt":"2025-02-24T15:37:04.5563097Z","id":"4trfp5bk","pid":"zkgldg5b","n":"f_field4","lb":"复选框","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"7bab5a19","libid":"antdesign","cn":"DatePicker","ct":1,"frag":{"dt":"AntDesign.DatePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign","t":"AntDesign.DatePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign","valt":"System.Nullable\u00601[System.DateTime]","attrs":[]},"ds":{"dsgt":1},"attrdefgroups":[],"childs":[],"order":15,"pub":1,"mt":"2025-02-24T15:59:32.6799272Z","id":"vdyv8q2ay","pid":"zkgldg5b","n":"f_field10","lb":"日期选择器","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"oikgmvkm","libid":"antdesign","cn":"TimePicker","ct":1,"frag":{"dt":"AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign","t":"AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign","valt":"System.Nullable\u00601[System.DateTime]","attrs":[]},"ds":{},"attrdefgroups":[],"childs":[],"order":16,"pub":1,"mt":"2025-03-05T15:31:24.9654966Z","id":"itnmgtzg","pid":"zkgldg5b","n":"f_field13","lb":"时间选择器","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"5icgyefr","libid":"antdesign","cn":"TextArea","ct":1,"frag":{"dt":"AntDesign.TextArea, AntDesign","t":"AntDesign.TextArea, AntDesign","valt":"System.String","attrs":[]},"ds":{"dsgt":1},"attrdefgroups":[],"childs":[],"order":12,"pub":1,"mt":"2025-02-24T15:36:40.7389762Z","id":"ibgtanur","pid":"ongkggvjy","n":"f_field7","lb":"文本框","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"9xulbbf5u","libid":"antdesign","cn":"Select","ct":1,"frag":{"dt":"AntDesign.Select\u00602[[System.String],[System.String]], antdesign","t":"AntDesign.Select\u00602[[System.String],[System.String]], antdesign","valt":"System.String","attrs":[]},"ds":{},"attrdefgroups":[],"childs":[],"order":17,"pub":1,"mt":"2025-03-05T15:31:30.1523166Z","id":"c9acpmcp","pid":"ongkggvjy","n":"f_field11","lb":"选择器","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"nwepem4i","libid":"antdesign","cn":"Switch","ct":1,"frag":{"dt":"AntDesign.Switch, AntDesign","t":"AntDesign.Switch, AntDesign","valt":"System.Boolean","attrs":[]},"ds":{},"attrdefgroups":[],"childs":[],"order":19,"pub":1,"mt":"2025-03-05T15:31:40.4314786Z","id":"cgfb0e64","pid":"ongkggvjy","n":"f_field9","lb":"开关","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}}],"aid":"caseapp","id":"fhumgxyk","n":"基础表单","order":21,"pt":1,"pageprop":{"playout":3,"ds":{}},"ds":{"dst":1,"dsv":"tb_test1"},"modifiedTime":"2025-03-22T13:31:39.1163931Z"} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/52391a70.json b/meta/parts/componentParts/antdesign/52391a70.json index 442ee730..29b15ef7 100644 --- a/meta/parts/componentParts/antdesign/52391a70.json +++ b/meta/parts/componentParts/antdesign/52391a70.json @@ -6,7 +6,7 @@ "valt": "System.String", "attrs": [] }, - "pgroups": [ + "attrdefgroups": [ { "props": [ { @@ -46,7 +46,7 @@ } ], "childs": [], - "sptds": true, + "sptds": false, "order": 10, "pub": 1, "mt": "2025-02-24T15:36:15.8037414Z", @@ -60,9 +60,5 @@ "labelw": 180, "display": "inline", "pos": "static" - }, - "ev": {}, - "ds": { - "dst": 0 } } \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/5icgyefr.json b/meta/parts/componentParts/antdesign/5icgyefr.json index 8173d4a0..3e991af9 100644 --- a/meta/parts/componentParts/antdesign/5icgyefr.json +++ b/meta/parts/componentParts/antdesign/5icgyefr.json @@ -6,7 +6,7 @@ "valt": "System.String", "attrs": [] }, - "pgroups": [], + "attrdefgroups": [], "childs": [], "sptds": false, "order": 12, @@ -23,8 +23,5 @@ "display": "inline", "pos": "static" }, - "ev": {}, - "ds": { - "dst": 0 - } + "ev": {} } \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/6d997568.json b/meta/parts/componentParts/antdesign/6d997568.json index 31efc529..9be72686 100644 --- a/meta/parts/componentParts/antdesign/6d997568.json +++ b/meta/parts/componentParts/antdesign/6d997568.json @@ -1,7 +1,7 @@ { "cn": "Layout", "ct": 1, - "pgroups": [], + "attrdefgroups": [], "childs": [], "sptds": false, "order": 3, @@ -18,8 +18,5 @@ "display": "inline", "pos": "static" }, - "ev": {}, - "ds": { - "dst": 0 - } + "ev": {} } \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/7bab5a19.json b/meta/parts/componentParts/antdesign/7bab5a19.json index 81e58d69..a1bd26b6 100644 --- a/meta/parts/componentParts/antdesign/7bab5a19.json +++ b/meta/parts/componentParts/antdesign/7bab5a19.json @@ -6,7 +6,7 @@ "valt": "System.Nullable\u00601[System.DateTime]", "attrs": [] }, - "pgroups": [], + "attrdefgroups": [], "childs": [], "sptds": false, "order": 15, @@ -23,8 +23,5 @@ "display": "inline", "pos": "static" }, - "ev": {}, - "ds": { - "dst": 0 - } + "ev": {} } \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/85jlapqoc.json b/meta/parts/componentParts/antdesign/85jlapqoc.json index 86894a97..f4d6c307 100644 --- a/meta/parts/componentParts/antdesign/85jlapqoc.json +++ b/meta/parts/componentParts/antdesign/85jlapqoc.json @@ -1 +1 @@ -{"cn":"List","ct":1,"pgroups":[],"childs":[],"sptds":false,"order":35,"pub":1,"mt":"2025-03-05T15:32:25.9094807Z","id":"lbemleqn","libid":"antdesign","compid":"85jlapqoc","lb":"列表-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"cn":"List","ct":1,"attrdefgroups":[],"childs":[],"sptds":false,"order":35,"pub":1,"mt":"2025-03-05T15:32:25.9094807Z","id":"lbemleqn","libid":"antdesign","compid":"85jlapqoc","lb":"列表-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/8b0lapquf.json b/meta/parts/componentParts/antdesign/8b0lapquf.json index faf6405a..2f276ba2 100644 --- a/meta/parts/componentParts/antdesign/8b0lapquf.json +++ b/meta/parts/componentParts/antdesign/8b0lapquf.json @@ -1 +1 @@ -{"cn":"Upload","ct":1,"frag":{"dt":"AntDesign.Upload, AntDesign","valt":"System.String","attrs":[]},"pgroups":[],"childs":[],"sptds":false,"order":25,"pub":1,"mt":"2025-03-05T15:31:46.5454492Z","id":"35r8zuv0e","libid":"antdesign","compid":"8b0lapquf","lb":"上传-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"cn":"Upload","ct":1,"frag":{"dt":"AntDesign.Upload, AntDesign","valt":"System.String","attrs":[]},"attrdefgroups":[],"childs":[],"sptds":false,"order":25,"pub":1,"mt":"2025-03-05T15:31:46.5454492Z","id":"35r8zuv0e","libid":"antdesign","compid":"8b0lapquf","lb":"上传-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/9xulbbf5u.json b/meta/parts/componentParts/antdesign/9xulbbf5u.json index 9594c660..064c2a09 100644 --- a/meta/parts/componentParts/antdesign/9xulbbf5u.json +++ b/meta/parts/componentParts/antdesign/9xulbbf5u.json @@ -1 +1 @@ -{"cn":"Select","ct":1,"frag":{"dt":"AntDesign.Select\u00602[[System.String],[System.String]], antdesign","valt":"System.String","attrs":[]},"pgroups":[],"childs":[],"sptds":false,"order":17,"pub":1,"mt":"2025-03-05T15:31:30.1523166Z","id":"76b2alet3","libid":"antdesign","compid":"9xulbbf5u","lb":"选择器-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"cn":"Select","ct":1,"frag":{"dt":"AntDesign.Select\u00602[[System.String],[System.String]], antdesign","valt":"System.String","attrs":[]},"attrdefgroups":[],"childs":[],"sptds":false,"order":17,"pub":1,"mt":"2025-03-05T15:31:30.1523166Z","id":"76b2alet3","libid":"antdesign","compid":"9xulbbf5u","lb":"选择器-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/csbjlezr.json b/meta/parts/componentParts/antdesign/csbjlezr.json index 3586406b..19126ab5 100644 --- a/meta/parts/componentParts/antdesign/csbjlezr.json +++ b/meta/parts/componentParts/antdesign/csbjlezr.json @@ -1 +1 @@ -{"cn":"TreeSelect","ct":1,"frag":{"dt":"AntDesign.TreeSelect\u00602[[System.String], [System.String]], AntDesign","valt":"System.String","attrs":[]},"pgroups":[],"childs":[],"sptds":false,"order":32,"pub":1,"mt":"2025-03-05T15:32:09.8330936Z","id":"jtx10vsi","libid":"antdesign","compid":"csbjlezr","lb":"树选择-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"cn":"TreeSelect","ct":1,"frag":{"dt":"AntDesign.TreeSelect\u00602[[System.String], [System.String]], AntDesign","valt":"System.String","attrs":[]},"attrdefgroups":[],"childs":[],"sptds":false,"order":32,"pub":1,"mt":"2025-03-05T15:32:09.8330936Z","id":"jtx10vsi","libid":"antdesign","compid":"csbjlezr","lb":"树选择-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/elc02goef.json b/meta/parts/componentParts/antdesign/elc02goef.json index ee87c3f1..9de3a960 100644 --- a/meta/parts/componentParts/antdesign/elc02goef.json +++ b/meta/parts/componentParts/antdesign/elc02goef.json @@ -1 +1 @@ -{"cn":"Image","ct":1,"frag":{"dt":"AntDesign.Image, AntDesign","valt":"System.String","attrs":[]},"pgroups":[],"childs":[],"sptds":false,"order":26,"pub":1,"mt":"2025-03-05T15:31:51.2912846Z","id":"nuned6mm7","libid":"antdesign","compid":"elc02goef","lb":"图片-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"cn":"Image","ct":1,"frag":{"dt":"AntDesign.Image, AntDesign","valt":"System.String","attrs":[]},"attrdefgroups":[],"childs":[],"sptds":false,"order":26,"pub":1,"mt":"2025-03-05T15:31:51.2912846Z","id":"nuned6mm7","libid":"antdesign","compid":"elc02goef","lb":"图片-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/evuqdwzl.json b/meta/parts/componentParts/antdesign/evuqdwzl.json index deaf2474..0d8231d4 100644 --- a/meta/parts/componentParts/antdesign/evuqdwzl.json +++ b/meta/parts/componentParts/antdesign/evuqdwzl.json @@ -4,7 +4,12 @@ "frag": { "dt": "AntDesign.RadioGroup\u00601[System.String], AntDesign", "valt": "System.String", - "attrs": [], + "attrs": [ + { + "n": "TValue", + "val": "System.String" + } + ], "childs": [ { "dt": "AntDesign.Radio\u00601[System.String], AntDesign", @@ -18,9 +23,9 @@ } ] }, - "pgroups": [], + "attrdefgroups": [], "childs": [], - "sptds": false, + "sptds": true, "order": 13, "pub": 1, "mt": "2025-03-01T02:58:56.1519656Z", @@ -37,6 +42,7 @@ }, "ev": {}, "ds": { - "dst": 0 + "dsgt": 1, + "dsft": "AntDesign.Radio\u00601[System.String], AntDesign" } } \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/f2b54b4c.json b/meta/parts/componentParts/antdesign/f2b54b4c.json index d74f3455..b0b68e5b 100644 --- a/meta/parts/componentParts/antdesign/f2b54b4c.json +++ b/meta/parts/componentParts/antdesign/f2b54b4c.json @@ -1 +1 @@ -{"cn":"Table","ct":1,"pgroups":[],"childs":[],"sptds":false,"order":30,"pub":1,"mt":"2025-03-05T15:31:57.7229065Z","id":"4jf7nbak","libid":"antdesign","compid":"f2b54b4c","lb":"表格-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"cn":"Table","ct":1,"attrdefgroups":[],"childs":[],"sptds":false,"order":30,"pub":1,"mt":"2025-03-05T15:31:57.7229065Z","id":"4jf7nbak","libid":"antdesign","compid":"f2b54b4c","lb":"表格-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/f63f79db.json b/meta/parts/componentParts/antdesign/f63f79db.json index c4379e75..769886bf 100644 --- a/meta/parts/componentParts/antdesign/f63f79db.json +++ b/meta/parts/componentParts/antdesign/f63f79db.json @@ -1,7 +1,7 @@ { "cn": "Grid", "ct": 1, - "pgroups": [], + "attrdefgroups": [], "childs": [], "sptds": false, "order": 2, @@ -20,6 +20,6 @@ }, "ev": {}, "ds": { - "dst": 0 + "dsgt": 1 } } \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/fmiwu412.json b/meta/parts/componentParts/antdesign/fmiwu412.json index 23619d0c..e822ae55 100644 --- a/meta/parts/componentParts/antdesign/fmiwu412.json +++ b/meta/parts/componentParts/antdesign/fmiwu412.json @@ -1 +1 @@ -{"cn":"Card","ct":1,"pgroups":[],"childs":[],"sptds":false,"order":34,"pub":1,"mt":"2025-03-05T15:32:20.4958136Z","id":"12nblk6r","libid":"antdesign","compid":"fmiwu412","lb":"卡片-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"cn":"Card","ct":1,"attrdefgroups":[],"childs":[],"sptds":false,"order":34,"pub":1,"mt":"2025-03-05T15:32:20.4958136Z","id":"12nblk6r","libid":"antdesign","compid":"fmiwu412","lb":"卡片-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/jlcybdkg.json b/meta/parts/componentParts/antdesign/jlcybdkg.json index d31c7acd..56ba64cc 100644 --- a/meta/parts/componentParts/antdesign/jlcybdkg.json +++ b/meta/parts/componentParts/antdesign/jlcybdkg.json @@ -6,7 +6,7 @@ "valt": "System.Int32", "attrs": [] }, - "pgroups": [], + "attrdefgroups": [], "childs": [], "sptds": false, "order": 11, @@ -25,6 +25,6 @@ }, "ev": {}, "ds": { - "dst": 0 + "dsgt": 1 } } \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/jmmybvkua.json b/meta/parts/componentParts/antdesign/jmmybvkua.json index 84d0c3f1..c50ff89a 100644 --- a/meta/parts/componentParts/antdesign/jmmybvkua.json +++ b/meta/parts/componentParts/antdesign/jmmybvkua.json @@ -1 +1 @@ -{"cn":"Tabs","ct":1,"pgroups":[],"childs":[],"sptds":false,"order":33,"pub":1,"mt":"2025-03-05T15:32:15.4797235Z","id":"iu1nxkgtk","libid":"antdesign","compid":"jmmybvkua","lb":"标签页-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"cn":"Tabs","ct":1,"attrdefgroups":[],"childs":[],"sptds":false,"order":33,"pub":1,"mt":"2025-03-05T15:32:15.4797235Z","id":"iu1nxkgtk","libid":"antdesign","compid":"jmmybvkua","lb":"标签页-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/nl9e6mko.json b/meta/parts/componentParts/antdesign/nl9e6mko.json index 7f1a40ba..df518f69 100644 --- a/meta/parts/componentParts/antdesign/nl9e6mko.json +++ b/meta/parts/componentParts/antdesign/nl9e6mko.json @@ -1 +1 @@ -{"cn":"AutoComplete","ct":1,"frag":{"dt":"AntDesign.AutoComplete\u00601[System.String], AntDesign","valt":"System.String","attrs":[]},"pgroups":[],"childs":[],"sptds":false,"order":18,"pub":1,"mt":"2025-03-05T15:31:35.1662367Z","id":"pqxzqsh2","libid":"antdesign","compid":"nl9e6mko","lb":"自动完成-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"cn":"AutoComplete","ct":1,"frag":{"dt":"AntDesign.AutoComplete\u00601[System.String], AntDesign","valt":"System.String","attrs":[]},"attrdefgroups":[],"childs":[],"sptds":false,"order":18,"pub":1,"mt":"2025-03-05T15:31:35.1662367Z","id":"pqxzqsh2","libid":"antdesign","compid":"nl9e6mko","lb":"自动完成-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/nwepem4i.json b/meta/parts/componentParts/antdesign/nwepem4i.json index c3d36d1e..5d3837aa 100644 --- a/meta/parts/componentParts/antdesign/nwepem4i.json +++ b/meta/parts/componentParts/antdesign/nwepem4i.json @@ -1 +1 @@ -{"cn":"Switch","ct":1,"frag":{"dt":"AntDesign.Switch, AntDesign","valt":"System.Boolean","attrs":[]},"pgroups":[],"childs":[],"sptds":false,"order":19,"pub":1,"mt":"2025-03-05T15:31:40.4314786Z","id":"eouljwau","libid":"antdesign","compid":"nwepem4i","lb":"开关-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"cn":"Switch","ct":1,"frag":{"dt":"AntDesign.Switch, AntDesign","valt":"System.Boolean","attrs":[]},"attrdefgroups":[],"childs":[],"sptds":false,"order":19,"pub":1,"mt":"2025-03-05T15:31:40.4314786Z","id":"eouljwau","libid":"antdesign","compid":"nwepem4i","lb":"开关-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/oikgmvkm.json b/meta/parts/componentParts/antdesign/oikgmvkm.json index 3e1dada6..b156fe63 100644 --- a/meta/parts/componentParts/antdesign/oikgmvkm.json +++ b/meta/parts/componentParts/antdesign/oikgmvkm.json @@ -1 +1 @@ -{"cn":"TimePicker","ct":1,"frag":{"dt":"AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign","valt":"System.Nullable\u00601[System.DateTime]","attrs":[]},"pgroups":[],"childs":[],"sptds":false,"order":16,"pub":1,"mt":"2025-03-05T15:31:24.9654966Z","id":"sbvdck2o","libid":"antdesign","compid":"oikgmvkm","lb":"时间选择器-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"cn":"TimePicker","ct":1,"frag":{"dt":"AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign","valt":"System.Nullable\u00601[System.DateTime]","attrs":[]},"attrdefgroups":[],"childs":[],"sptds":false,"order":16,"pub":1,"mt":"2025-03-05T15:31:24.9654966Z","id":"sbvdck2o","libid":"antdesign","compid":"oikgmvkm","lb":"时间选择器-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/ookcvyml.json b/meta/parts/componentParts/antdesign/ookcvyml.json index 27779992..75ad6339 100644 --- a/meta/parts/componentParts/antdesign/ookcvyml.json +++ b/meta/parts/componentParts/antdesign/ookcvyml.json @@ -1,7 +1,7 @@ { "cn": "Flex", "ct": 1, - "pgroups": [], + "attrdefgroups": [], "childs": [], "sptds": false, "order": 1, @@ -20,6 +20,6 @@ }, "ev": {}, "ds": { - "dst": 0 + "dsgt": 1 } } \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/sonvddk21.json b/meta/parts/componentParts/antdesign/sonvddk21.json index b27de744..11ff4228 100644 --- a/meta/parts/componentParts/antdesign/sonvddk21.json +++ b/meta/parts/componentParts/antdesign/sonvddk21.json @@ -1 +1 @@ -{"cn":"Tree","ct":1,"frag":{"dt":"AntDesign.Tree\u00601[System.String], AntDesign","valt":"System.String","attrs":[]},"pgroups":[],"childs":[],"sptds":false,"order":31,"pub":1,"mt":"2025-03-05T15:32:03.8190473Z","id":"hepj4qcm","libid":"antdesign","compid":"sonvddk21","lb":"树-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"cn":"Tree","ct":1,"frag":{"dt":"AntDesign.Tree\u00601[System.String], AntDesign","valt":"System.String","attrs":[]},"attrdefgroups":[],"childs":[],"sptds":false,"order":31,"pub":1,"mt":"2025-03-05T15:32:03.8190473Z","id":"hepj4qcm","libid":"antdesign","compid":"sonvddk21","lb":"树-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/vdcoqln1z.json b/meta/parts/componentParts/antdesign/vdcoqln1z.json index 1d942f9c..86d303e2 100644 --- a/meta/parts/componentParts/antdesign/vdcoqln1z.json +++ b/meta/parts/componentParts/antdesign/vdcoqln1z.json @@ -6,7 +6,7 @@ "valt": "System.Boolean", "attrs": [] }, - "pgroups": [], + "attrdefgroups": [], "childs": [], "sptds": false, "order": 14, @@ -25,6 +25,6 @@ }, "ev": {}, "ds": { - "dst": 0 + "dsgt": 1 } } \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/yo3v3smv.json b/meta/parts/componentParts/antdesign/yo3v3smv.json index 51f2407e..4fcafeac 100644 --- a/meta/parts/componentParts/antdesign/yo3v3smv.json +++ b/meta/parts/componentParts/antdesign/yo3v3smv.json @@ -6,7 +6,7 @@ "valt": "System.String", "attrs": [] }, - "pgroups": [], + "attrdefgroups": [], "childs": [], "sptds": false, "order": 0, @@ -25,6 +25,6 @@ }, "ev": {}, "ds": { - "dst": 0 + "dsgt": 1 } } \ No newline at end of file diff --git a/src/Common/H.LowCode.Entity/Base/FormEntity.cs b/src/Common/H.LowCode.Entity/Base/FormEntity.cs index da42010e..8e0a3e1d 100644 --- a/src/Common/H.LowCode.Entity/Base/FormEntity.cs +++ b/src/Common/H.LowCode.Entity/Base/FormEntity.cs @@ -8,7 +8,19 @@ namespace H.LowCode.Entity; public class FormEntity : EntityBase { + public string Id => GetPrimaryKey(); + public string Name { get; set; } public Dictionary Fields { get; set; } = []; + + private string GetPrimaryKey() + { + string primaryFieldName = "f_id"; + var bol = Fields.ContainsKey(primaryFieldName); + if (bol == false) + return null; + + return Fields[primaryFieldName]?.ToString(); + } } \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/Components/APIDataSource.razor b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/Components/APIDataSource.razor new file mode 100644 index 00000000..1ba5ca11 --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/Components/APIDataSource.razor @@ -0,0 +1,70 @@ +@namespace H.LowCode.DesignEngine.Abstraction +@inherits LowCodeComponentBase + +@if (DataSource != null) +{ + + + + + + + + + + + + + + + + + + + + + + + @if (DataSource.Body.DataType == APIBodyTypeEnum.Json + || DataSource.Body.DataType == APIBodyTypeEnum.Text + || DataSource.Body.DataType == APIBodyTypeEnum.Raw) + { + - - - - - - - - - - - + + @@ -186,8 +141,12 @@ private async Task CreateAsync() { await Task.Delay(1); - _dataSource = new() { AppId = AppId, DataSourceType = ComponentDataSourceTypeEnum.API }; - _dataSource.API = new(); + _dataSource = new() + { + AppId = AppId, + DataSourceType = ComponentDataSourceTypeEnum.API, + API = new() + }; _visible = true; _modalTitle = "新建 API"; @@ -222,7 +181,7 @@ { await Task.Delay(1); - APIQuerySchema newQuery = new() { Id = ShortIdGenerator.Generate() }; + APIParamSchema newQuery = new() { Id = ShortIdGenerator.Generate() }; _dataSource.API.Queries.Add(newQuery); diff --git a/src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/OptionDataSource.razor b/src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/OptionDataSourceList.razor similarity index 99% rename from src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/OptionDataSource.razor rename to src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/OptionDataSourceList.razor index 89366856..9f200b2d 100644 --- a/src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/OptionDataSource.razor +++ b/src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/OptionDataSourceList.razor @@ -55,7 +55,7 @@ private async Task CreateAsync() { await Task.Delay(1); - _currentDataSource = new() { DataSourceType = ComponentDataSourceTypeEnum.Table }; + _currentDataSource = new() { DataSourceType = ComponentDataSourceTypeEnum.DB }; _visible = true; _modalTitle = "新建数据表"; StateHasChanged(); diff --git a/src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/TableDataSource.razor b/src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/TableDataSourceList.razor similarity index 98% rename from src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/TableDataSource.razor rename to src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/TableDataSourceList.razor index 6611fcda..9158b950 100644 --- a/src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/TableDataSource.razor +++ b/src/DesignEngine/H.LowCode.MyApp/Pages/DataSource/TableDataSourceList.razor @@ -3,7 +3,7 @@ @inject IDataSourceAppService DataSourceAppService @inject IMessageService Message -@inject ComponentState> DataSourceListState +@inject ComponentState> DataSourceListState
@@ -188,7 +188,7 @@ private async Task> LoadDataSourcesAsync(int pageIndex, int pageSize) { - return await DataSourceAppService.GetListAsync(AppId, new() { DataSourceType = ComponentDataSourceTypeEnum.Table }); + return await DataSourceAppService.GetListAsync(AppId, new() { DataSourceType = ComponentDataSourceTypeEnum.DB }); } private async Task GetDataSourceAsync(string dataSourceId) @@ -249,7 +249,7 @@ private async Task CreateAsync() { await Task.Delay(1); - _dataSource = new() { AppId = AppId, DataSourceType = ComponentDataSourceTypeEnum.Table }; + _dataSource = new() { AppId = AppId, DataSourceType = ComponentDataSourceTypeEnum.DB }; _visible = true; _modalTitle = "新建数据表"; diff --git a/src/DesignEngine/H.LowCode.MyApp/Pages/DataSourceManager.razor b/src/DesignEngine/H.LowCode.MyApp/Pages/DataSourceManager.razor index ae175b62..196be671 100644 --- a/src/DesignEngine/H.LowCode.MyApp/Pages/DataSourceManager.razor +++ b/src/DesignEngine/H.LowCode.MyApp/Pages/DataSourceManager.razor @@ -7,13 +7,13 @@ - + - + - + diff --git a/src/DesignEngine/H.LowCode.MyApp/Pages/PageManager.razor b/src/DesignEngine/H.LowCode.MyApp/Pages/PageManager.razor index 0b4bfc3a..18aa8e7f 100644 --- a/src/DesignEngine/H.LowCode.MyApp/Pages/PageManager.razor +++ b/src/DesignEngine/H.LowCode.MyApp/Pages/PageManager.razor @@ -57,10 +57,10 @@ @if (context.PageType == PageTypeEnum.Form) { - + - @if (context.DataSource.DataSourceType == PageDataSourceTypeEnum.Table) + @if (context.DataSource.DataSourceType == PageDataSourceTypeEnum.DB) { diff --git a/src/DesignEngine/H.LowCode.MyApp/_Imports.razor b/src/DesignEngine/H.LowCode.MyApp/_Imports.razor index ece2d4df..d4471ade 100644 --- a/src/DesignEngine/H.LowCode.MyApp/_Imports.razor +++ b/src/DesignEngine/H.LowCode.MyApp/_Imports.razor @@ -13,6 +13,7 @@ @using H.LowCode.ComponentBase @using H.LowCode.MyApp @using H.LowCode.DesignEngine.Model +@using H.LowCode.DesignEngine.Abstraction @using H.LowCode.DesignEngine.Application.Contracts @using H.LowCode.MetaSchema @using H.LowCode.MetaSchema.DesignEngine diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/ComponentPanel/DragItem.razor b/src/DesignEngine/H.LowCode.PartsDesignEngine/ComponentPanel/DragItem.razor index 6987f1cb..5b3c1d67 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/ComponentPanel/DragItem.razor +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/ComponentPanel/DragItem.razor @@ -33,7 +33,7 @@ /// private void AddComponentToDesignPanel(bool isOnClick) { - ComponentPartsSchema component = Component.CopyNew(); + ComponentPartsSchema component = Component.DeepClone(); component.DesignState.IsDroppedFromComponentPanel = true; if (isOnClick) { diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentItem.razor b/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentItem.razor index 9191d302..78bb3c84 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentItem.razor +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentItem.razor @@ -36,6 +36,6 @@ else if (string.IsNullOrEmpty(Component.Name)) Component.Name = $"{Component.Name}_{Random.Shared.Next(100, 999)}"; - _renderFragment = RenderComponent(Component.Fragment); + _renderFragment = RenderComponent(Component.IsSupportDataSource, Component.DataSource, Component.Fragment); } } \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/DropItemContainer.razor b/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/DropItemContainer.razor index 35fb1ee8..e8009111 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/DropItemContainer.razor +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/DropItemContainer.razor @@ -105,7 +105,7 @@ private void OnItemCopy(ComponentPartsSchema component) { - var newComponent = component.CopyNew(); + var newComponent = component.DeepClone(); DragItem_Add(ContainerComponent, newComponent, null, false); StateHasChanged(); } diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraries/ComponentPartsList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraries/ComponentPartsList.razor index 14638f36..c4da2ce1 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraries/ComponentPartsList.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraries/ComponentPartsList.razor @@ -112,7 +112,7 @@ private bool _textFormVisible = false; private string _textFormValue; - IDictionary _parameterEditCache = new Dictionary(); + IDictionary _parameterEditCache = new Dictionary(); protected override async Task OnInitializedAsync() { @@ -252,7 +252,7 @@ { await Task.Delay(1); - ComponentParameterFragmentSchema newParameter = new(); + ComponentAttributeFragmentSchema newParameter = new(); //添加编辑缓存 _parameterEditCache[newParameter.Name] = (true, newParameter); diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index db7ab9fe..d2cc3dd5 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -13,38 +13,38 @@ - - + + - - - - + + + + - - - - - - - + + + + + + + - - - + + + - - - - - - - - + + + + + + + + @@ -53,14 +53,14 @@ - - - + + + - + diff --git a/src/Parts/H.LowCode.Components.Extension/Components/LcLakexEditor.razor b/src/Parts/H.LowCode.Components.Extension/Components/LcLakexEditor.razor index b7dff9a9..13f7bacb 100644 --- a/src/Parts/H.LowCode.Components.Extension/Components/LcLakexEditor.razor +++ b/src/Parts/H.LowCode.Components.Extension/Components/LcLakexEditor.razor @@ -50,7 +50,7 @@ private void Init() { if (_component == null) - _component = Component.CopyNew(); + _component = Component.DeepClone(); } private async Task LoadJSModule() diff --git a/src/Parts/H.LowCode.Components.Extension/Components/LcMonacoEditor.razor b/src/Parts/H.LowCode.Components.Extension/Components/LcMonacoEditor.razor index 807509a3..fb6d8723 100644 --- a/src/Parts/H.LowCode.Components.Extension/Components/LcMonacoEditor.razor +++ b/src/Parts/H.LowCode.Components.Extension/Components/LcMonacoEditor.razor @@ -53,7 +53,7 @@ private void Init() { if (_component == null) - _component = Component.CopyNew(); + _component = Component.DeepClone(); } private async Task LoadMonacoEditorAsync(string containerId, string code, string language, string theme) diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor index a761123f..e9edf8dd 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor @@ -56,6 +56,6 @@ else if (Component == null) throw new NullReferenceException(nameof(Component)); - _renderFragment = RenderComponent(Component.Fragment); + _renderFragment = RenderComponent(Component.IsSupportDataSource, Component.DataSource, Component.Fragment); } } \ No newline at end of file diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor index a4d47e0f..985e4863 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor @@ -50,6 +50,6 @@ else if (Component == null) throw new NullReferenceException(nameof(Component)); - _renderFragment = RenderComponent(Component.Fragment); + _renderFragment = RenderComponent(Component.IsSupportDataSource, Component.DataSource, Component.Fragment); } } \ No newline at end of file diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender_Test.razor b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender_Test.razor index b45b0fe9..a52eb5c7 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender_Test.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender_Test.razor @@ -5,10 +5,10 @@ @namespace H.LowCode.Themes.AntBlazor
+OnFinish="OnFinish" +OnFinishFailed="OnFinishFailed" +LabelColSpan="8" +WrapperColSpan="16"> @* @foreach (var field in model) { @@ -33,10 +33,11 @@ - - 选项1 - 选项2 - + @* *@ + @* 选项1 *@ + @* 选项2 *@ + @* *@ + @_renderFragment @@ -65,6 +66,12 @@ ["Field8"] = "字段8", }; + protected override void OnInitialized() + { + _renderFragment = RenderFragmentTest(); + base.OnInitialized(); + } + private void AddField() { model.Add("Field" + model.Count + 1, ""); @@ -79,4 +86,35 @@ { Console.WriteLine($"Failed:{model.ToJson()}"); } + + private RenderFragment _renderFragment; + private RenderFragment RenderFragmentTest() + { + return builder => + { + builder.OpenComponent>(0); + builder.AddAttribute(1, "TValue", typeof(string)); + builder.AddAttribute(2, "ChildContent", (RenderFragment)((childBuilder) => + { + childBuilder.OpenComponent>(3); + childBuilder.AddAttribute(4, "Value", "op1"); + //childBuilder.AddContent(5, "选项1"); + childBuilder.AddAttribute(5, "ChildContent", (RenderFragment)((cb) => + { + cb.AddContent(6, "op1"); + })); + childBuilder.CloseComponent(); + + childBuilder.OpenComponent>(6); + childBuilder.AddAttribute(7, "Value", "op2"); + //childBuilder.AddContent(8, "选项2"); + childBuilder.AddAttribute(8, "ChildContent", (RenderFragment)((cb) => + { + cb.AddContent(9, "op2"); + })); + childBuilder.CloseComponent(); + })); + builder.CloseComponent(); + }; + } } \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs index c59ac5f9..cdb1e968 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs @@ -7,6 +7,19 @@ namespace H.LowCode.MetaSchema.DesignEngine; public class ComponentPartsSchema : ComponentSchemaBase { + /// + /// 组件Id + /// + /// 一类组件唯一Id + [JsonPropertyName("compid")] + public string ComponentId { get; set; } = ShortIdGenerator.Generate(); + + /// + /// 组件库Id + /// + [JsonPropertyName("libid")] + public string LibraryId { get; set; } + /// /// 组件 Name /// @@ -23,26 +36,22 @@ public class ComponentPartsSchema : ComponentSchemaBase /// 组件渲染 Fragment /// [JsonPropertyName("frag")] - public new ComponentPartsFragmentSchema Fragment { get; set; } + public ComponentPartsFragmentSchema Fragment { get; set; } + + [JsonPropertyName("ds")] + public ComponentPartsDataSourceSchema DataSource { get; set; } = new(); /// - /// Property 分组 + /// Attribute定义分组 /// - [JsonPropertyName("pgroups")] - public new IList PropertyGroups { get; set; } = []; + [JsonPropertyName("attrdefgroups")] + public IList AttributeDefineGroups { get; set; } = []; /// /// /// [JsonPropertyName("childs")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public new IList Childrens { get; set; } = []; - - /// - /// 是否支持数据源属性 - /// - [JsonPropertyName("sptds")] - public bool IsSupportDataSource { get; set; } + public IList Childrens { get; set; } = []; [JsonPropertyName("order")] public int Order { get; set; } @@ -56,6 +65,7 @@ public class ComponentPartsSchema : ComponentSchemaBase [JsonPropertyName("mt")] public DateTime ModifiedTime { get; set; } + #region 仅设计过程使用 /// /// 设计过程中的组件状态 (无需持久化) /// @@ -65,9 +75,16 @@ public class ComponentPartsSchema : ComponentSchemaBase [JsonIgnore] public Action Refresh { get; set; } - public ComponentPartsSchema CopyNew() + public void RefreshState() + { + Refresh?.Invoke(); + } + #endregion + + #region DeepClone + public ComponentPartsSchema DeepClone() { - ComponentPartsSchema newComponent = this.DeepClone(); + ComponentPartsSchema newComponent = ObjectExtension.DeepClone(this); //Copy全新对象, Id 重新生成 newComponent.Id = ShortIdGenerator.Generate(); @@ -79,24 +96,12 @@ public class ComponentPartsSchema : ComponentSchemaBase newComponent.Refresh = Refresh; //1.子节点 ParentId 重新赋值; 2.重新赋值序列化过程中丢失的 RenderFragment、Refresh 值 - CopyNewRecursive(newComponent, this); + DeepCloneRecursive(newComponent, this); return newComponent; } - public ComponentPartsSchema ConvertToComponentSchema() - { - string json = this.ToJson(); - return json.FromJson(); - } - - public void RefreshState() - { - Refresh?.Invoke(); - } - - #region private - private static void CopyNewRecursive(ComponentPartsSchema newComponent, ComponentPartsSchema oldComponent) + private static void DeepCloneRecursive(ComponentPartsSchema newComponent, ComponentPartsSchema oldComponent) { for (var i = 0; i < newComponent.Childrens.Count; i++) { @@ -106,8 +111,38 @@ public class ComponentPartsSchema : ComponentSchemaBase child.Refresh = oldComponent.Childrens[i].Refresh; - CopyNewRecursive(child, oldComponent.Childrens[i]); + DeepCloneRecursive(child, oldComponent.Childrens[i]); } } #endregion + + public ComponentPartsSchema ConvertToComponentSchema() + { + string json = this.ToJson(); + return json.FromJson(); + } + + /// + /// 将组件物料定义合并到组件实例 + /// + /// + /// + public void MergeComponentPartsDefine(ComponentPartsSchema componentPartsDefine) + { + if (componentPartsDefine == null) + { + return; + } + + //TODO + //this.Fragment = componentPartsDefine.Fragment; + //this.Style = componentPartsDefine.Style; + this.AttributeDefineGroups = componentPartsDefine.AttributeDefineGroups; + this.IsSupportDataSource = componentPartsDefine.IsSupportDataSource; + + foreach (var child in this.Childrens) + { + child.MergeComponentPartsDefine(componentPartsDefine); + } + } } \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsPropertyGroupSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/DataSourceSchemas/ComponentPartsDataSourceSchema.cs similarity index 44% rename from src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsPropertyGroupSchema.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/DataSourceSchemas/ComponentPartsDataSourceSchema.cs index aab93a5a..8d8bd23c 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsPropertyGroupSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/DataSourceSchemas/ComponentPartsDataSourceSchema.cs @@ -1,5 +1,4 @@ -using H.LowCode.MetaSchema; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -8,8 +7,7 @@ using System.Threading.Tasks; namespace H.LowCode.MetaSchema.DesignEngine; -public class ComponentPartsPropertyGroupSchema : ComponentPropertyGroupSchema +public class ComponentPartsDataSourceSchema : ComponentDataSourceSchema { - [JsonPropertyName("props")] - public new IList Properties { get; set; } = []; + } diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PagePartsSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PagePartsSchema.cs index 18e9559a..8cb99897 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PagePartsSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PagePartsSchema.cs @@ -6,5 +6,5 @@ namespace H.LowCode.MetaSchema.DesignEngine; public class PagePartsSchema : PageSchemaBase { [JsonPropertyName("comps")] - public new IList Components { get; set; } = []; + public IList Components { get; set; } = []; } diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsPropertySchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineGroupSchema.cs similarity index 42% rename from src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsPropertySchema.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineGroupSchema.cs index bce7bf6f..42648c06 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsPropertySchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineGroupSchema.cs @@ -8,11 +8,14 @@ using System.Threading.Tasks; namespace H.LowCode.MetaSchema.DesignEngine; -public class ComponentPartsPropertySchema : ComponentPropertySchema +public class ComponentPartsAttributeDefineGroupSchema { - /// - /// 设置项类型 (用于判断设置项控件渲染) - /// - [JsonPropertyName("pt")] - public PropertyItemTypeEnum PropertyItemType { get; set; } + [JsonPropertyName("n")] + public string Name { get; set; } + + [JsonPropertyName("disn")] + public string DisplayName { get; set; } + + [JsonPropertyName("attrs")] + public IList AttributeDefines { get; set; } = []; } diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineSchema.cs new file mode 100644 index 00000000..34cb4bfe --- /dev/null +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineSchema.cs @@ -0,0 +1,51 @@ +using H.LowCode.MetaSchema; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace H.LowCode.MetaSchema.DesignEngine; + +public class ComponentPartsAttributeDefineSchema +{ + [JsonPropertyName("n")] + public string Name { get; set; } + + [JsonPropertyName("disn")] + public string DisplayName { get; set; } + + /// + /// 设置项类型 (用于判断设置项控件渲染) + /// + [JsonPropertyName("pt")] + public ComponentAttributeItemTypeEnum AttributeItemType { get; set; } + + /// + /// 组件值类型 + /// + [JsonPropertyName("compvaltype")] + public ComponentValueTypeEnum ComponentValueType { get; set; } + + [JsonPropertyName("required")] + public bool IsRequired { get; set; } + + [JsonPropertyName("desc")] + public string Description { get; set; } + + [JsonPropertyName("dftval")] + public object DefaultValue { get; set; } + + [JsonPropertyName("strval")] + public string StringValue { get; set; } + + [JsonPropertyName("boolval")] + public bool? BoolValue { get; set; } + + [JsonPropertyName("intval")] + public int? IntValue { get; set; } + + [JsonPropertyName("ops")] + public Dictionary Options { get; } +} diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsFragmentSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsFragmentSchema.cs index 529af196..ba66b407 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsFragmentSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsFragmentSchema.cs @@ -24,10 +24,8 @@ public class ComponentPartsFragmentSchema : ComponentFragmentSchemaBase /// 组件保存 json 文件时,强制设置 TypeName 为 null /// [JsonPropertyName("t")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public override string TypeName { get; set; } [JsonPropertyName("childs")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public new ComponentPartsFragmentSchema[] Childrens { get; set; } + public ComponentPartsFragmentSchema[] Childrens { get; set; } } diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsStyleSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsStyleSchema.cs index 44376165..1796ae8a 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsStyleSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsStyleSchema.cs @@ -14,7 +14,6 @@ public class ComponentPartsStyleSchema /// /// 有效值为4-24,如 12/24*100 = 50%。有值以当前值为准,无值以页面布局为准 [JsonPropertyName("itemw")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public double? ItemWidth { get; set; } /// @@ -22,34 +21,28 @@ public class ComponentPartsStyleSchema /// /// 默认85px [JsonPropertyName("itemh")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public double ItemHeight { get; set; } = 85; /// /// 标签宽度(默认 180 px) /// [JsonPropertyName("labelw")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public double LabelWidth { get; set; } = 180; /// /// 默认样式 /// [JsonPropertyName("defstyle")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public string DefaultStyle { get; set; } - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public string Display { get; set; } = "inline"; [JsonPropertyName("pos")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public string Position { get; set; } = "static"; /// /// 自定义样式 /// [JsonPropertyName("cusstyle")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public string CustomStyle { get; set; } } diff --git a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/ComponentSchema.cs b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/ComponentSchema.cs index 18d0c385..b2c28cc7 100644 --- a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/ComponentSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/ComponentSchema.cs @@ -10,12 +10,14 @@ public class ComponentSchema : ComponentSchemaBase /// 组件渲染 Fragment /// [JsonPropertyName("frag")] - public new ComponentFragmentSchema Fragment { get; set; } + public ComponentFragmentSchema Fragment { get; set; } + + [JsonPropertyName("ds")] + public ComponentDataSourceSchema DataSource { get; set; } = new(); /// /// /// [JsonPropertyName("childs")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public new ComponentSchema[] Childrens { get; set; } + public ComponentSchema[] Childrens { get; set; } } \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PageSchema.cs b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PageSchema.cs index e07168ba..14b07cf8 100644 --- a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PageSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PageSchema.cs @@ -6,5 +6,5 @@ namespace H.LowCode.MetaSchema.RenderEngine; public class PageSchema : PageSchemaBase { [JsonPropertyName("comps")] - public new IList Components { get; set; } = []; + public IList Components { get; set; } = []; } \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentFragmentSchema.cs b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentFragmentSchema.cs index 240f63bc..0b09ef7f 100644 --- a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentFragmentSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentFragmentSchema.cs @@ -6,6 +6,5 @@ namespace H.LowCode.MetaSchema.RenderEngine; public class ComponentFragmentSchema : ComponentFragmentSchemaBase { [JsonPropertyName("childs")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public new ComponentFragmentSchema[] Childrens { get; set; } + public ComponentFragmentSchema[] Childrens { get; set; } } diff --git a/src/Protocol/H.LowCode.MetaSchema/ComponentSchemaBase.cs b/src/Protocol/H.LowCode.MetaSchema/ComponentSchemaBase.cs index 4d8dd4a7..1fb320e8 100644 --- a/src/Protocol/H.LowCode.MetaSchema/ComponentSchemaBase.cs +++ b/src/Protocol/H.LowCode.MetaSchema/ComponentSchemaBase.cs @@ -13,19 +13,6 @@ public abstract class ComponentSchemaBase [JsonPropertyName("id")] public string Id { get; set; } = ShortIdGenerator.Generate(); - /// - /// 组件库Id - /// - [JsonPropertyName("libid")] - public string LibraryId { get; set; } - - /// - /// 组件Id - /// - /// 一类组件唯一Id - [JsonPropertyName("compid")] - public string ComponentId { get; set; } = ShortIdGenerator.Generate(); - [JsonPropertyName("pid")] public string ParentId { get; set; } @@ -39,11 +26,9 @@ public abstract class ComponentSchemaBase /// 是否隐藏标题 /// [JsonPropertyName("hlb")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public bool IsHiddenLabel { get; set; } [JsonPropertyName("desc")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public string Description { get; set; } /// @@ -53,16 +38,10 @@ public abstract class ComponentSchemaBase public bool IsContainer { get; set; } /// - /// 组件渲染 Fragment + /// 是否支持数据源属性 /// - [JsonPropertyName("frag")] - public virtual ComponentFragmentSchemaBase Fragment { get; set; } - - /// - /// Property 分组 - /// - [JsonPropertyName("pgroups")] - public IList PropertyGroups { get; set; } = []; + [JsonPropertyName("sptds")] + public bool IsSupportDataSource { get; set; } /// /// 组件样式 @@ -74,17 +53,5 @@ public abstract class ComponentSchemaBase /// /// [JsonPropertyName("ev")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public ComponentEventSchema Event { get; set; } = new(); - - /// - /// - /// - [JsonPropertyName("childs")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public virtual ComponentSchemaBase[] Childrens { get; set; } - - [JsonPropertyName("ds")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public ComponentDataSourceSchema DataSource { get; set; } = new(); } \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema/DataSourceSchema.cs b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchema.cs index c1126f51..a48e8e40 100644 --- a/src/Protocol/H.LowCode.MetaSchema/DataSourceSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchema.cs @@ -46,7 +46,7 @@ public class DataSourceSchema : MetaSchemaBase /// API 数据源 /// [JsonPropertyName("api")] - public APISchema API { get; set; } + public APIDataSourceSchema API { get; set; } #endregion #region DataSourceType=Option @@ -54,7 +54,7 @@ public class DataSourceSchema : MetaSchemaBase /// 选项数据源 /// [JsonPropertyName("ops")] - public OptionSchema[] Options { get; set; } + public OptionDataSourceSchema[] Options { get; set; } /// /// diff --git a/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/APISchema.cs b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/APIDataSourceSchema.cs similarity index 41% rename from src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/APISchema.cs rename to src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/APIDataSourceSchema.cs index 52cd173f..57943d2d 100644 --- a/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/APISchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/APIDataSourceSchema.cs @@ -1,4 +1,5 @@ -using System; +using H.Util.Ids; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -7,31 +8,31 @@ using System.Threading.Tasks; namespace H.LowCode.MetaSchema; -public class APISchema +public class APIDataSourceSchema { - [JsonPropertyName("burl")] - public string BaseUrl { get; set; } + [JsonPropertyName("d")] + public string Domain { get; set; } [JsonPropertyName("p")] public string Path { get; set; } - [JsonPropertyName("mth")] + [JsonPropertyName("m")] public string Method { get; set; } - [JsonPropertyName("prs")] - public IList Queries { get; set; } = []; + [JsonPropertyName("qs")] + public IList Queries { get; set; } = []; [JsonPropertyName("bd")] - public APIBodySchema Body { get; set; } + public APIBodySchema Body { get; set; } = new(); - [JsonPropertyName("hds")] - public IList Headers { get; set; } = []; + [JsonPropertyName("hs")] + public IList Headers { get; set; } = []; } -public class APIQuerySchema +public record APIParamSchema { [JsonPropertyName("id")] - public string Id { get; set; } + public string Id { get; set; } = ShortIdGenerator.Generate(); [JsonPropertyName("n")] public string Name { get; set; } @@ -39,34 +40,25 @@ public class APIQuerySchema [JsonPropertyName("t")] public string Type { get; set; } - [JsonPropertyName("val")] - public string Value { get; set; } - [JsonPropertyName("desc")] public string Description { get; set;} } public class APIBodySchema { - public string Type { get; set; } + public APIBodyTypeEnum DataType { get; set; } public string Value { get; set; } + + public IList MultipartParams { get; set; } = []; } -public class APIHeaderSchema +public enum APIBodyTypeEnum { - [JsonPropertyName("id")] - public string Id { get; set; } - - [JsonPropertyName("n")] - public string Name { get; set; } - - [JsonPropertyName("t")] - public string Type { get; set; } - - [JsonPropertyName("val")] - public string Value { get; set; } - - [JsonPropertyName("desc")] - public string Description { get; set; } -} \ No newline at end of file + None = 0, + Json = 1, + Text = 2, + Multipart = 3, + Raw = 4, + Baniry = 5 +} diff --git a/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/ComponentDataSourceSchema.cs b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/ComponentDataSourceSchema.cs index 074f358d..e8af8490 100644 --- a/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/ComponentDataSourceSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/ComponentDataSourceSchema.cs @@ -9,9 +9,15 @@ namespace H.LowCode.MetaSchema; public class ComponentDataSourceSchema { + [JsonPropertyName("dsgt")] + public ComponentDataSourceGroupTypeEnum DataSourceGroupType { get; set; } + [JsonPropertyName("dst")] public ComponentDataSourceTypeEnum DataSourceType { get; set; } + [JsonPropertyName("dsft")] + public string DataSourceFragmentType { get; set; } + [JsonPropertyName("dsid")] public string DataSourceId { get; set; } @@ -20,4 +26,22 @@ public class ComponentDataSourceSchema [JsonPropertyName("dsv")] public string DataSourceValue { get; set; } + + /// + /// 固定选项数据源 + /// + [JsonPropertyName("fxopds")] + public IList FiexdOptionDataSource { get; set; } + + /// + /// API选项数据源 + /// + [JsonPropertyName("apiopds")] + public APIDataSourceSchema APIOptionDataSource { get; set; } + + /// + /// SQL选项数据源 + /// + [JsonPropertyName("sqlopds")] + public SQLDataSourceSchema SQLOptionDataSource { get; set; } } diff --git a/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/OptionSchema.cs b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/OptionDataSourceSchema.cs similarity index 66% rename from src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/OptionSchema.cs rename to src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/OptionDataSourceSchema.cs index 839658db..d890c91f 100644 --- a/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/OptionSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/OptionDataSourceSchema.cs @@ -1,4 +1,5 @@ -using System; +using H.Util.Ids; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -7,8 +8,11 @@ using System.Threading.Tasks; namespace H.LowCode.MetaSchema; -public class OptionSchema +public record OptionDataSourceSchema { + [JsonIgnore] + public string Id { get; set; } = ShortIdGenerator.Generate(); + [JsonPropertyName("l")] public string Label { get; set; } diff --git a/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/SQLDataSourceSchema.cs b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/SQLDataSourceSchema.cs new file mode 100644 index 00000000..f664c415 --- /dev/null +++ b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/SQLDataSourceSchema.cs @@ -0,0 +1,18 @@ +using H.Util.Ids; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace H.LowCode.MetaSchema; + +public class SQLDataSourceSchema +{ + [JsonPropertyName("dt")] + public string DbType { get; set; } + + [JsonPropertyName("sql")] + public string Sql { get; set; } +} diff --git a/src/Protocol/H.LowCode.MetaSchema/Enums/PropertyItemTypeEnum.cs b/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentAttributeItemTypeEnum.cs similarity index 86% rename from src/Protocol/H.LowCode.MetaSchema/Enums/PropertyItemTypeEnum.cs rename to src/Protocol/H.LowCode.MetaSchema/Enums/ComponentAttributeItemTypeEnum.cs index d97f1464..41b14921 100644 --- a/src/Protocol/H.LowCode.MetaSchema/Enums/PropertyItemTypeEnum.cs +++ b/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentAttributeItemTypeEnum.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace H.LowCode.MetaSchema; -public enum PropertyItemTypeEnum +public enum ComponentAttributeItemTypeEnum { None, Text, diff --git a/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentDataSourceGroupTypeEnum.cs b/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentDataSourceGroupTypeEnum.cs new file mode 100644 index 00000000..957f2df6 --- /dev/null +++ b/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentDataSourceGroupTypeEnum.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace H.LowCode.MetaSchema; + +/// +/// 组件数据源分组类型 +/// +public enum ComponentDataSourceGroupTypeEnum +{ + General = 0, + Option = 1 +} diff --git a/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentDataSourceTypeEnum.cs b/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentDataSourceTypeEnum.cs index 414d72f8..a5ec751b 100644 --- a/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentDataSourceTypeEnum.cs +++ b/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentDataSourceTypeEnum.cs @@ -12,10 +12,10 @@ namespace H.LowCode.MetaSchema; public enum ComponentDataSourceTypeEnum { None = 0, - Table = 1, + DB = 1, API = 2, Option = 3, SQL = 6, Expression = 7, //表达式 Fiexd = 8 //固定值 -} +} \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema/Enums/PageDataSourceTypeEnum.cs b/src/Protocol/H.LowCode.MetaSchema/Enums/PageDataSourceTypeEnum.cs index c0bed8fe..eeeb162f 100644 --- a/src/Protocol/H.LowCode.MetaSchema/Enums/PageDataSourceTypeEnum.cs +++ b/src/Protocol/H.LowCode.MetaSchema/Enums/PageDataSourceTypeEnum.cs @@ -12,6 +12,6 @@ namespace H.LowCode.MetaSchema; public enum PageDataSourceTypeEnum { None = 0, - Table = 1, + DB = 1, API = 2 } diff --git a/src/Protocol/H.LowCode.MetaSchema/PageSchemaBase.cs b/src/Protocol/H.LowCode.MetaSchema/PageSchemaBase.cs index e23d966f..92c4e1cd 100644 --- a/src/Protocol/H.LowCode.MetaSchema/PageSchemaBase.cs +++ b/src/Protocol/H.LowCode.MetaSchema/PageSchemaBase.cs @@ -30,7 +30,4 @@ public abstract class PageSchemaBase : MetaSchemaBase [JsonPropertyName("ds")] public PageDataSourceSchema DataSource { get; set; } = new(); - - [JsonPropertyName("comps")] - public virtual IList Components { get; set; } = []; } \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchemaBase.cs b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchemaBase.cs index 522f0b9f..0cdb2dab 100644 --- a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchemaBase.cs +++ b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchemaBase.cs @@ -15,14 +15,9 @@ public abstract class ComponentFragmentSchemaBase public string ValueType { get; set; } [JsonPropertyName("attrs")] - public ComponentParameterFragmentSchema[] Attributes { get; set; } = []; - - [JsonPropertyName("childs")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public virtual ComponentFragmentSchemaBase[] Childrens { get; set; } + public ComponentAttributeFragmentSchema[] Attributes { get; set; } = []; [JsonPropertyName("content")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public string Content { get; set; } public object GetDefaultValue() @@ -42,7 +37,7 @@ public abstract class ComponentFragmentSchemaBase } } -public record ComponentParameterFragmentSchema +public record ComponentAttributeFragmentSchema { [JsonPropertyName("n")] public string Name { get; set; } @@ -54,14 +49,11 @@ public record ComponentParameterFragmentSchema public ComponentValueTypeEnum ValueType { get; set; } [JsonPropertyName("intv")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public int IntValue { get; set; } [JsonPropertyName("strv")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public string StringValue { get; set; } [JsonPropertyName("strvs")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public List StringValues { get; set; } } diff --git a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentPropertyGroupSchema.cs b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentPropertyGroupSchema.cs deleted file mode 100644 index 7b640d75..00000000 --- a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentPropertyGroupSchema.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Microsoft.AspNetCore.Components; -using System.Text.Json.Serialization; - -namespace H.LowCode.MetaSchema; - -/// -/// 组件属性 -/// -public class ComponentPropertyGroupSchema -{ - [JsonPropertyName("n")] - public string Name { get; set; } - - [JsonPropertyName("disn")] - public string DisplayName { get; set; } - - [JsonPropertyName("props")] - public List Properties { get; set; } = []; -} \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentPropertySchema.cs b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentPropertySchema.cs deleted file mode 100644 index 4f9ef2c1..00000000 --- a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentPropertySchema.cs +++ /dev/null @@ -1,135 +0,0 @@ -using Microsoft.AspNetCore.Components; -using System.Text.Json.Serialization; - -namespace H.LowCode.MetaSchema; - -/// -/// 组件属性 -/// -public class ComponentPropertySchema -{ - [JsonPropertyName("n")] - public string Name { get; set; } - - [JsonPropertyName("disn")] - public string DisplayName { get; set; } - - [JsonPropertyName("desc")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public string Description { get; set; } - - [JsonPropertyName("dftval")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public object DefaultValue { get; set; } - - [JsonPropertyName("strval")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string StringValue { get; set; } - - [JsonPropertyName("boolval")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public bool? BoolValue { get; set; } - - [JsonPropertyName("intval")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public int? IntValue { get; set; } - - [JsonPropertyName("ops")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public Dictionary Options { get; } - - - - //[JsonPropertyName("max")] - //[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - //public double? Maximum { get; set; } - - //[JsonPropertyName("min")] - //[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - //public double? Minimum { get; set; } - - //[JsonPropertyName("maxlen")] - //[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - //public long? MaximumLength { get; set; } - - //[JsonPropertyName("minlen")] - //[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - //public long? MinimumLength { get; set; } - - //[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - //public string Pattern { get; set; } - - /// - /// 组件值类型 - /// - [JsonPropertyName("compvaltype")] - public ComponentValueTypeEnum ComponentValueType { get; set; } - - //[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - //public string Format { get; set; } - - [JsonPropertyName("required")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - public bool IsRequired { get; set; } - - //[JsonPropertyName("ro")] - //[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - //public bool ReadOnly { get; set; } - - //[JsonPropertyName("default")] - //[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - //public string DefaultValue { get; set; } - - //[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - //public string[] Enum { get; set; } - - //[JsonPropertyName("enumnames")] - //[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - //public string[] EnumNames { get; set; } - - ///// - ///// 选项类组件属性值 - ///// - //[JsonPropertyName("ops")] - //public string Options { get; set; } - - /// - /// 表格类组件属性值 - /// - [JsonPropertyName("tbprops")] - public string TablePropertiess { get; set; } - - ///// - ///// 扩展的属性 - ///// - //[JsonPropertyName("extprops")] - //[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - //public IDictionary ExtraProperties { get; set; } = new Dictionary(); - - //[JsonPropertyName("extdata")] - //[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] - //public IDictionary ExtensionData { get; set; } = new Dictionary(); - - #region method - public virtual object GetDefaultValue() - { - switch (ComponentValueType) - { - case ComponentValueTypeEnum.Text: - case ComponentValueTypeEnum.String: - case ComponentValueTypeEnum.Textarea: - return default(string); - case ComponentValueTypeEnum.Boolean: - return default(bool); - case ComponentValueTypeEnum.Integer: - case ComponentValueTypeEnum.Double: - case ComponentValueTypeEnum.Decimal: - return default(int); - case ComponentValueTypeEnum.Date: - return default(DateTime); - default: - return null; - } - } - #endregion -} \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentStyleSchema.cs b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentStyleSchema.cs index b0505d16..a5387bac 100644 --- a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentStyleSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentStyleSchema.cs @@ -10,7 +10,6 @@ public class ComponentStyleSchema /// /// 有效值为4-24,如 12/24*100 = 50%。有值以当前值为准,无值以页面布局为准 [JsonPropertyName("itemw")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public double? ItemWidth { get; set; } /// @@ -18,34 +17,28 @@ public class ComponentStyleSchema /// /// 默认85px [JsonPropertyName("itemh")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public double ItemHeight { get; set; } = 85; /// /// 标签宽度(默认 180 px) /// [JsonPropertyName("labelw")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public double LabelWidth { get; set; } = 180; /// /// 默认样式 /// [JsonPropertyName("defstyle")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public string DefaultStyle { get; set; } - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public string Display { get; set; } = "inline"; [JsonPropertyName("pos")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public string Position { get; set; } = "static"; /// /// 自定义样式 /// [JsonPropertyName("cusstyle")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public string CustomStyle { get; set; } } diff --git a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/PropertyItemSchema.cs b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/PropertyItemSchema.cs index 8fa1e7d7..d0c022b7 100644 --- a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/PropertyItemSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/PropertyItemSchema.cs @@ -12,21 +12,17 @@ public class PropertyItemSchema public string Label { get; set; } [JsonPropertyName("desc")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public string Description { get; set; } public int Order { get; set; } [JsonPropertyName("strval")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string StringValue { get; set; } [JsonPropertyName("boolval")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public bool? BoolValue { get; set; } [JsonPropertyName("intval")] - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public int? IntValue { get; set; } public IDictionary Options { get; set; } @@ -35,5 +31,5 @@ public class PropertyItemSchema /// 设置项类型 /// [JsonPropertyName("itemtype")] - public PropertyItemTypeEnum SettingItemType { get; set; } + public ComponentAttributeItemTypeEnum SettingItemType { get; set; } } diff --git a/src/Protocol/H.LowCode.MetaSchema/Utils/ObjectMerger.cs b/src/Protocol/H.LowCode.MetaSchema/Utils/ObjectMerger.cs index cca9834d..14167d00 100644 --- a/src/Protocol/H.LowCode.MetaSchema/Utils/ObjectMerger.cs +++ b/src/Protocol/H.LowCode.MetaSchema/Utils/ObjectMerger.cs @@ -10,12 +10,12 @@ namespace System; public static class ObjectMerger { - public static void Merge(T source, T target) where T : class + public static void Merge(Type type, object source, object target) { if (target == null || source == null) throw new ArgumentNullException(target == null ? nameof(target) : nameof(source)); - var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); + var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var property in properties) { @@ -32,17 +32,21 @@ public static class ObjectMerger // 处理集合类型属性 MergeCollections(property, target, sourcePropertyValue); } + else if (IsArrayType(property.PropertyType)) + { + MergeArray(property, target, sourcePropertyValue); + } else if (property.PropertyType.IsClass && property.PropertyType != typeof(string)) { // 递归处理引用类型属性 (不含string) var targetPropertyValue = property.GetValue(target); if (targetPropertyValue == null) { - targetPropertyValue = Activator.CreateInstance(); + targetPropertyValue = Activator.CreateInstance(property.PropertyType); property.SetValue(target, targetPropertyValue); } - Merge(sourcePropertyValue, targetPropertyValue); + Merge(property.PropertyType, sourcePropertyValue, targetPropertyValue); } else { @@ -97,7 +101,7 @@ public static class ObjectMerger var targetElement = targetCollection[i]; if (elementType.IsClass && elementType != typeof(string)) { - Merge(targetElement as dynamic, sourceElement); + Merge(elementType, targetElement as dynamic, sourceElement); } else { @@ -112,6 +116,54 @@ public static class ObjectMerger } } + private static bool IsArrayType(Type type) + { + return type.IsArray; + } + + private static void MergeArray(PropertyInfo property, object target, object sourceArray) + { + var targetType = property.PropertyType; + var elementType = GetElementType(targetType); + + var targetArray = property.GetValue(target) as Array; + if (targetArray == null) + { + targetArray = Array.CreateInstance(elementType, ((Array)sourceArray).Length); + property.SetValue(target, targetArray); + } + + var sourceArrayLength = ((Array)sourceArray).Length; + var targetArrayLength = targetArray.Length; + var newArray = Array.CreateInstance(elementType, Math.Max(sourceArrayLength, targetArrayLength)); + + Array.Copy(targetArray, newArray, targetArrayLength); + + for (int i = 0; i < sourceArrayLength; i++) + { + var sourceElement = ((Array)sourceArray).GetValue(i); + if (i < targetArrayLength) + { + var targetElement = targetArray.GetValue(i); + if (elementType.IsClass && elementType != typeof(string)) + { + Merge(elementType, targetElement, sourceElement); + newArray.SetValue(targetElement, i); + } + else + { + newArray.SetValue(sourceElement, i); + } + } + else + { + newArray.SetValue(sourceElement, i); + } + } + + property.SetValue(target, newArray); + } + private static Type GetElementType(Type collectionType) { if (collectionType.IsArray) diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs index d1d45392..f5fe2024 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs @@ -7,15 +7,21 @@ using H.LowCode.MetaSchema; using System.Reflection; using H.LowCode.ComponentBase; using H.LowCode.MetaSchema.RenderEngine; +using Microsoft.AspNetCore.Components.Rendering; namespace H.LowCode.RenderEngine.Abstraction; public abstract class RenderEngineDynamicComponentBase : LowCodeComponentBase { - protected virtual RenderFragment RenderComponent(ComponentFragmentSchema componentFragment) + protected virtual RenderFragment RenderComponent( + bool isSupportDataSource, ComponentDataSourceSchema dataSource, + ComponentFragmentSchema componentFragment) { ArgumentNullException.ThrowIfNull(componentFragment); + if (string.IsNullOrEmpty(componentFragment.TypeName)) + throw new ArgumentNullException(nameof(componentFragment.TypeName)); + return builder => { Type componentType = Type.GetType(componentFragment.TypeName, true); @@ -71,7 +77,7 @@ public abstract class RenderEngineDynamicComponentBase : LowCodeComponentBase //if ("{self}".Equals(prop.StringValue, StringComparison.OrdinalIgnoreCase)) // builder.AddAttribute(index++, prop.Name, component); //else - builder.AddAttribute(index++, prop.Name, prop.StringValue); + builder.AddAttribute(index++, prop.Name, prop.StringValue); } else { @@ -80,24 +86,86 @@ public abstract class RenderEngineDynamicComponentBase : LowCodeComponentBase } } - //渲染子组件 - var childrens = componentFragment.Childrens; - var hasChildren = childrens != null && childrens.Length > 0; - if (hasChildren) + //渲染 ChildContent + if (isSupportDataSource) { - builder.AddAttribute(index++, "ChildContent", (RenderFragment)(childBuilder => - { - foreach (var child in componentFragment.Childrens) - { - childBuilder.AddContent(index++, RenderComponent(child)); - } - })); + RenderDataSource(dataSource, builder, index); + } + else + { + RenderChildrens(componentFragment, builder, index); } builder.CloseComponent(); }; } + private void RenderDataSource(ComponentDataSourceSchema dataSource, + RenderTreeBuilder builder, int index) + { + if (dataSource == null) + return; + + if (dataSource.DataSourceGroupType == ComponentDataSourceGroupTypeEnum.Option) + { + + switch (dataSource.DataSourceType) + { + case ComponentDataSourceTypeEnum.Fiexd: + RenderOptionDataSource(dataSource, builder, index); + break; + case ComponentDataSourceTypeEnum.SQL: + break; + case ComponentDataSourceTypeEnum.API: + break; + default: + break; + } + } + } + + private void RenderOptionDataSource(ComponentDataSourceSchema dataSource, + RenderTreeBuilder builder, int index) + { + if (dataSource.FiexdOptionDataSource != null && dataSource.FiexdOptionDataSource.Count > 0) + { + builder.AddAttribute(index++, "ChildContent", (RenderFragment)(childBuilder => + { + Type childComponentType = Type.GetType(dataSource.DataSourceFragmentType, true); + foreach (var option in dataSource.FiexdOptionDataSource) + { + childBuilder.OpenComponent(index++, childComponentType); + + childBuilder.AddAttribute(index++, "Value", option.Value); + //childBuilder.AddContent(index++, option.Label); + childBuilder.AddAttribute(index++, "ChildContent", (RenderFragment)((cb) => + { + cb.AddContent(index++, option.Label); + })); + + childBuilder.CloseComponent(); + } + })); + } + } + + private void RenderChildrens(ComponentFragmentSchema componentFragment, + RenderTreeBuilder builder, int index) + { + var childrens = componentFragment.Childrens; + var hasChildren = childrens != null && childrens.Length > 0; + if (hasChildren) + { + builder.AddAttribute(index++, "ChildContent", (RenderFragment)(childBuilder => + { + foreach (var child in componentFragment.Childrens) + { + childBuilder.AddContent(index++, RenderComponent(false, null, child)); + } + })); + } + } + private bool SupportsValueBinding(Type componentType) { // Check if the component has a "Value" parameter and a "ValueChanged" parameter diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/FormDataAppService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/FormDataAppService.cs index 2bcb5a4b..58235bd1 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/FormDataAppService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Application/DataAppServices/FormDataAppService.cs @@ -8,6 +8,7 @@ using System.Text; using Volo.Abp; using Volo.Abp.Application.Services; using H.LowCode.Entity; +using Volo.Abp.Domain.Entities; namespace H.LowCode.RenderEngine.Application; @@ -25,7 +26,8 @@ public class FormDataAppService : ApplicationService, IFormDataAppService public async Task SaveAsync(FormDataDTO dto) { - return await _formDataDomainService.SaveAsync(null); + var entity = ObjectMapper.Map(dto); + return await _formDataDomainService.SaveAsync(entity); } public async Task DeleteAsync(string appId, string pageId, string id) diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Application/MapperProfiles/LowCodeAutoMapperProfile.cs b/src/RenderEngine/H.LowCode.RenderEngine.Application/MapperProfiles/LowCodeAutoMapperProfile.cs index 83c72b62..2e27e4f6 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Application/MapperProfiles/LowCodeAutoMapperProfile.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Application/MapperProfiles/LowCodeAutoMapperProfile.cs @@ -14,5 +14,6 @@ public class LowCodeAutoMapperProfile : Profile public LowCodeAutoMapperProfile() { CreateMap(); + CreateMap(); } } \ No newline at end of file diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/FormDataDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/FormDataDomainService.cs index bd675a7d..04beb361 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/FormDataDomainService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/DataDomainServices/FormDataDomainService.cs @@ -44,10 +44,13 @@ public class FormDataDomainService : DomainService, IFormDataDomainService public async Task SaveAsync(FormEntity entity) { - //if (string.IsNullOrEmpty(entity.Id)) + //TODO + entity.Name = entity.Name ?? "tb_test1"; + + if (string.IsNullOrEmpty(entity.Id)) await _formDataRepository.AddAsync(entity); - //else - // await _formDataRepository.UpdateAsync(entity); + else + await _formDataRepository.UpdateAsync(entity); return true; } diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/DataSourceDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/DataSourceDomainService.cs index 8f67ec74..ad6a1ab4 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/DataSourceDomainService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/DataSourceDomainService.cs @@ -27,7 +27,7 @@ public class DataSourceDomainService : DomainService, IDataSourceDomainService public IEnumerable GetAllEntities(string appId) { var list = GetListAsync(appId).Result; - return list.Where(t => t.DataSourceType == ComponentDataSourceTypeEnum.Table).ToList(); + return list.Where(t => t.DataSourceType == ComponentDataSourceTypeEnum.DB).ToList(); } public async Task GetAsync(string appId, string id) diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs index b84664ef..1c8a6392 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/DataRepositories/FormDataRepository.cs @@ -31,13 +31,13 @@ public class FormDataRepository : IFormDataRepository return await _dbContext.GetAsync(tableName, id); } - public Task UpdateAsync(FormEntity entity) + public async Task UpdateAsync(FormEntity entity) { - throw new NotImplementedException(); + return await _dbContext.UpdateAsync(entity); } - public Task DeleteAsync(string entityName, string id) + public async Task DeleteAsync(string entityName, string id) { - throw new NotImplementedException(); + return await _dbContext.DeleteAsync(entityName, id); } } diff --git a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/RenderEngineDbContext.cs b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/RenderEngineDbContext.cs index a560af2b..b444c698 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/RenderEngineDbContext.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.EntityFrameworkCore/EntityFrameworkCore/RenderEngineDbContext.cs @@ -44,7 +44,9 @@ public class RenderEngineDbContext : DbContext public async Task UpdateAsync(FormEntity formEntity) { var entityType = GetEntityType(formEntity.Name); - dynamic entity = Activator.CreateInstance(entityType); + var entity = await FindAsync(entityType, formEntity.Id); + if (entity == null) + return false; foreach (var field in formEntity.Fields) { @@ -73,6 +75,18 @@ public class RenderEngineDbContext : DbContext return formEntity; } + public async Task DeleteAsync(string entityName, string id) + { + var entityType = GetEntityType(entityName); + var entity = await FindAsync(entityType, id); + if (entity == null) + return false; + + Remove(entity); + await SaveChangesAsync(); + return true; + } + public int SaveChangesAsync(FormEntity formEntity) { var entityType = GetEntityType(formEntity.Name); diff --git a/src/RenderEngine/H.LowCode.RenderEngine/H.LowCode.RenderEngine.csproj b/src/RenderEngine/H.LowCode.RenderEngine/H.LowCode.RenderEngine.csproj index f1cab2a6..2e2a8450 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine/H.LowCode.RenderEngine.csproj +++ b/src/RenderEngine/H.LowCode.RenderEngine/H.LowCode.RenderEngine.csproj @@ -2,7 +2,7 @@ - + @@ -25,9 +25,4 @@ - - - - - -- Gitee From 0db332b42f16a3fcf32f7709e4be6d966c80406e Mon Sep 17 00:00:00 2001 From: "{iliuhai@aliyun.com}" Date: Sun, 23 Mar 2025 19:01:43 +0800 Subject: [PATCH 17/18] =?UTF-8?q?-=20Checkbox=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=95=B0=E6=8D=AE=E6=BA=90=20-=20=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E7=89=A9=E6=96=99=E8=AE=BE=E8=AE=A1=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=B8=B8=E7=94=A8=E5=B1=9E=E6=80=A7=E7=BC=96=E8=BE=91=20-=20Me?= =?UTF-8?q?ssage=20=E6=8F=90=E7=A4=BA=E6=A0=87=E7=AD=BE=E5=9C=A8=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=9F=BA=E7=B1=BB=E7=BB=9F=E4=B8=80=E6=8F=90=E4=BE=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- meta/apps/caseapp/datasource/qgzhc7w3z.json | 2 +- meta/apps/caseapp/page/fhumgxyk.json | 362 +++++++++++++++++- .../componentParts/antdesign/9xulbbf5u.json | 2 +- .../componentParts/antdesign/evuqdwzl.json | 49 +-- .../componentParts/antdesign/nl9e6mko.json | 2 +- .../componentParts/antdesign/vdcoqln1z.json | 29 +- .../EntityManager/FieldTypeMapping.cs | 8 +- .../Components/APIDataSource.razor | 10 +- .../Components/APIParamsList.razor | 5 +- .../ContainerComponentBase.razor | 2 +- .../DesignEngineDynamicComponentBase.cs | 19 +- .../DesignEngineLowCodeComponentBase.cs | 16 + .../DesignEngineLowCodePageComponentBase.cs | 19 + .../PartsModels/ComponentPartsListModel.cs | 6 + .../ComponentPartsRepository.cs | 1 + .../ComponentPanel/ComponentPanel.razor | 2 +- .../ComponentPanel/DragItem.razor | 2 +- .../DesignPanel/DesignPanel.razor | 2 +- .../DesignPanel/DropItem.razor | 2 +- .../DesignPanel/DropItemContainer.razor | 2 +- .../Pages/DesignPage.razor | 9 +- .../SettingPanel/EventSetting.razor | 2 +- .../SettingPanel/PageSetting.razor | 2 +- .../SettingPanel/PropertySetting.razor | 2 +- .../BasicPropertyItem.razor | 2 +- .../DataSourcePropertyItem.razor | 2 +- .../ExtensionPropertyItem.razor | 2 +- .../FiexdForOptionDataSource.razor | 2 +- .../OptionDataSourceSetting.razor | 2 +- .../SQLForOptionDataSource.razor | 2 +- .../TablePropertyItem.razor | 2 +- .../SettingPanel/SettingPanel.razor | 2 +- .../SettingPanel/StyleSetting.razor | 2 +- .../Pages/DataSource/APIDataSourceList.razor | 3 +- .../DataSource/OptionDataSourceList.razor | 2 +- .../DataSource/TableDataSourceList.razor | 3 +- .../H.LowCode.MyApp/Pages/MenuManager.razor | 3 +- .../H.LowCode.MyApp/Pages/PageManager.razor | 3 +- .../ComponentPanel/ComponentPanel.razor | 2 +- .../ComponentPanel/DragItem.razor | 2 +- .../DesignPanel/ComponentDesignPanel.razor | 2 +- .../DesignPanel/DropItem.razor | 2 +- .../DesignPanel/DropItemContainer.razor | 2 +- .../DesignPanel/PageDesignPanel.razor | 2 +- .../Pages/ComponentPartsDesigner.razor | 7 +- .../Pages/PagePartsDesigner.razor | 9 +- .../SettingPanel/PropertySetting.razor | 2 +- .../SettingPanel/SettingPanel.razor | 2 +- .../SettingPanel/StyleSetting.razor | 2 +- .../H.LowCode.Workbench.csproj | 2 +- .../Pages/APIs/APIPartsList.razor | 2 +- .../Pages/Ecosystems/AppTemplates.razor | 3 +- .../Pages/Ecosystems/ThemePartsList.razor | 4 +- .../Pages/MyApps/AppCreateFromTemplate.razor | 3 +- .../Pages/MyApps/AppForm.razor | 7 +- .../Pages/MyApps/AppPopularTemplates.razor | 2 +- .../Pages/MyParts/AppPartsList.razor | 3 +- .../ComponentLibraryForm.razor | 7 +- .../ComponentPartsList.razor | 143 ++++--- .../Pages/MyParts/ComponentLibraryList.razor | 2 +- .../Pages/MyParts/PageLibraryList.razor | 2 +- .../Pages/Plugins/PluginsPartsList.razor | 2 +- .../Solutions/SolutionIntroduction.razor | 2 +- .../H.LowCode.Workbench/_Imports.razor | 1 + src/Directory.Packages.props | 2 +- .../ContainerComponentRender.razor | 2 +- .../FormContainerComponentRender.razor | 2 +- .../PageRender/FormPageRender.razor | 8 +- .../PageRender/FormPageRender_Test.razor | 35 +- .../PageRender/NormalPageRender.razor | 2 +- .../PageRender/TablePageRender.razor | 2 +- .../ComponentPartsSchema.cs | 4 +- .../ComponentPartsDataSourceSchema.cs | 8 +- .../ComponentDataSourceSchema.cs | 16 + .../ComponentSchemaBase.cs | 26 +- .../ComponentDataSourceSchema.cs | 11 +- .../H.LowCode.RenderEngine.Abstraction.csproj | 1 + .../RenderEngineDynamicComponentBase.cs | 13 +- .../RenderEngineLowCodeComponentBase.cs | 16 + .../ThemePartLayoutBase.cs | 4 - 80 files changed, 711 insertions(+), 249 deletions(-) create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Abstraction/DesignEngineLowCodeComponentBase.cs create mode 100644 src/DesignEngine/H.LowCode.DesignEngine.Abstraction/DesignEngineLowCodePageComponentBase.cs create mode 100644 src/Protocol/H.LowCode.MetaSchema.RenderEngine/DataSourceSchemas/ComponentDataSourceSchema.cs create mode 100644 src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineLowCodeComponentBase.cs diff --git a/meta/apps/caseapp/datasource/qgzhc7w3z.json b/meta/apps/caseapp/datasource/qgzhc7w3z.json index 65ead500..79240599 100644 --- a/meta/apps/caseapp/datasource/qgzhc7w3z.json +++ b/meta/apps/caseapp/datasource/qgzhc7w3z.json @@ -1 +1 @@ -{"aid":"caseapp","id":"qgzhc7w3z","n":"tb_test1","disn":"测试表1","desc":"xxx","order":0,"type":1,"pub":false,"fields":[{"id":"9080f5b9-b155-4aa2-82d9-dc7a20192c06","n":"f_id","disn":"主键","type":"varchar","pk":true,"nul":false,"unique":false},{"id":"b4c09312-7267-45fc-94c1-15f893d0f5ea","n":"f_field1","disn":"字段1","type":"varchar","pk":false,"nul":true,"unique":false},{"id":"06f744b7-426a-41db-97a9-9edabca0424a","n":"f_field2","disn":"字段2","type":"int","pk":false,"nul":false,"unique":false},{"id":"5453147d-e0ed-422d-8dfd-bbaa8f979b65","n":"f_field3","disn":"字段3","type":"varchar","pk":false,"nul":false,"unique":false},{"id":"9f1b952a-d3a6-4739-bd8d-50f0462c717a","n":"f_field4","disn":"字段4","type":"bool","pk":false,"nul":false,"unique":false},{"id":"f995d0d4-951c-494d-acdb-aa794af12241","n":"f_field5","disn":"字段5","type":"int","pk":false,"nul":true,"unique":false},{"id":"fee2bf95-6a87-4a63-980d-b8986cbb2421","n":"f_field6","disn":"字段6","type":"varchar","pk":false,"nul":true,"unique":false},{"id":"c01c1d58-8adf-459a-9f28-316d19801b15","n":"f_field7","disn":"字段7","type":"varchar","pk":false,"nul":true,"unique":false},{"id":"ae6b8dee-2f4c-49d4-b65c-cfefbc361965","n":"f_field8","disn":"字段8","type":"varchar","pk":false,"nul":true,"unique":false},{"id":"5eb457fa-075f-4fbc-8609-f31a67d85bd9","n":"f_field9","disn":"字段9","type":"bool","pk":false,"nul":true,"unique":false},{"id":"06c9f63e-2aec-4320-a321-aceffa2accba","n":"f_field10","disn":"字段10","type":"datetime","pk":false,"nul":true,"unique":false},{"id":"1ddd77a8-c719-4289-a6e7-e00934dcc711","n":"f_field11","disn":"字段11","type":"varchar","pk":false,"nul":true,"unique":false},{"id":"e2fa36d6-4b5a-49de-993d-4ac75b673c0c","n":"f_field12","disn":"字段12","type":"varchar","pk":false,"nul":true,"unique":false},{"id":"rvgsbgsyi","n":"f_field13","disn":"字段13","type":"datetime","pk":false,"nul":true,"unique":false}],"enableSoftDelete":false,"ops":[],"createdTime":"0001-01-01T00:00:00","modifiedTime":"2025-02-08T09:01:23.9043029Z"} \ No newline at end of file +{"aid":"caseapp","id":"qgzhc7w3z","n":"tb_test1","disn":"测试表1","desc":"xxx","type":1,"fields":[{"id":"9080f5b9-b155-4aa2-82d9-dc7a20192c06","n":"f_id","disn":"主键","type":"varchar","pk":true},{"id":"b4c09312-7267-45fc-94c1-15f893d0f5ea","n":"f_field1","disn":"字段1","type":"varchar","nul":true},{"id":"06f744b7-426a-41db-97a9-9edabca0424a","n":"f_field2","disn":"字段2","type":"int"},{"id":"5453147d-e0ed-422d-8dfd-bbaa8f979b65","n":"f_field3","disn":"字段3","type":"varchar"},{"id":"9f1b952a-d3a6-4739-bd8d-50f0462c717a","n":"f_field4","disn":"字段4","type":"bool"},{"id":"f995d0d4-951c-494d-acdb-aa794af12241","n":"f_field5","disn":"字段5","type":"int","nul":true},{"id":"fee2bf95-6a87-4a63-980d-b8986cbb2421","n":"f_field6","disn":"字段6","type":"varchar","nul":true},{"id":"c01c1d58-8adf-459a-9f28-316d19801b15","n":"f_field7","disn":"字段7","type":"varchar","nul":true},{"id":"ae6b8dee-2f4c-49d4-b65c-cfefbc361965","n":"f_field8","disn":"字段8","type":"varchar[]","nul":true},{"id":"5eb457fa-075f-4fbc-8609-f31a67d85bd9","n":"f_field9","disn":"字段9","type":"bool","nul":true},{"id":"06c9f63e-2aec-4320-a321-aceffa2accba","n":"f_field10","disn":"字段10","type":"datetime","nul":true},{"id":"1ddd77a8-c719-4289-a6e7-e00934dcc711","n":"f_field11","disn":"字段11","type":"varchar","nul":true},{"id":"e2fa36d6-4b5a-49de-993d-4ac75b673c0c","n":"f_field12","disn":"字段12","type":"varchar","nul":true},{"id":"rvgsbgsyi","n":"f_field13","disn":"字段13","type":"datetime","nul":true}],"ops":[],"modifiedTime":"2025-03-23T10:17:51.3553924Z"} \ No newline at end of file diff --git a/meta/apps/caseapp/page/fhumgxyk.json b/meta/apps/caseapp/page/fhumgxyk.json index 09c0ab94..6f83508b 100644 --- a/meta/apps/caseapp/page/fhumgxyk.json +++ b/meta/apps/caseapp/page/fhumgxyk.json @@ -1 +1,361 @@ -{"comps":[{"compid":"52391a70","libid":"antdesign","cn":"Input","ct":1,"frag":{"dt":"AntDesign.Input\u00601[System.String], AntDesign","t":"AntDesign.Input\u00601[System.String], AntDesign","valt":"System.String","attrs":[]},"ds":{"dsgt":1},"attrdefgroups":[{"n":"basic","disn":"自定义","attrs":[]}],"childs":[],"order":10,"pub":1,"mt":"2025-02-24T15:36:15.8037414Z","id":"0bd406f9-10f9-4eaf-8184-270b192a5e20","pid":"lyawwbh9f","n":"f_field1","lb":"输入框1","desc":"111","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"52391a70","libid":"antdesign","cn":"Input","ct":1,"frag":{"dt":"AntDesign.Input\u00601[System.String], AntDesign","t":"AntDesign.Input\u00601[System.String], AntDesign","valt":"System.String","attrs":[]},"ds":{},"attrdefgroups":[{"n":"basic","disn":"自定义","attrs":[]}],"childs":[],"order":10,"pub":1,"mt":"2025-02-24T15:36:15.8037414Z","id":"299f6803-f04d-498d-ab53-3c1812c91b3d","pid":"lyawwbh9f","n":"f_field3","lb":"输入框2","desc":"222","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"evuqdwzl","libid":"antdesign","cn":"Radio","ct":1,"frag":{"dt":"AntDesign.RadioGroup\u00601[System.String], AntDesign","t":"AntDesign.RadioGroup\u00601[System.String], AntDesign","attrs":[{"n":"TValue","val":"System.String"}]},"ds":{"dsgt":1,"dst":8,"dsft":"AntDesign.Radio\u00601[System.String], AntDesign","fxopds":[{"l":"选项1","v":"op1"},{"l":"选项2","v":"op2"},{"l":"选项3","v":"op3"},{"l":"选项4","v":"op4"}]},"attrdefgroups":[],"childs":[],"order":13,"pub":1,"mt":"2025-03-01T02:58:56.1519656Z","id":"vjolyn1r","pid":"zkgldg5b","n":"f_field6","lb":"单选框","sptds":true,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"vdcoqln1z","libid":"antdesign","cn":"Checkbox","ct":1,"frag":{"dt":"AntDesign.Checkbox, AntDesign","t":"AntDesign.Checkbox, AntDesign","valt":"System.Boolean","attrs":[]},"ds":{"dsgt":1},"attrdefgroups":[],"childs":[],"order":14,"pub":1,"mt":"2025-02-24T15:37:04.5563097Z","id":"4trfp5bk","pid":"zkgldg5b","n":"f_field4","lb":"复选框","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"7bab5a19","libid":"antdesign","cn":"DatePicker","ct":1,"frag":{"dt":"AntDesign.DatePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign","t":"AntDesign.DatePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign","valt":"System.Nullable\u00601[System.DateTime]","attrs":[]},"ds":{"dsgt":1},"attrdefgroups":[],"childs":[],"order":15,"pub":1,"mt":"2025-02-24T15:59:32.6799272Z","id":"vdyv8q2ay","pid":"zkgldg5b","n":"f_field10","lb":"日期选择器","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"oikgmvkm","libid":"antdesign","cn":"TimePicker","ct":1,"frag":{"dt":"AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign","t":"AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign","valt":"System.Nullable\u00601[System.DateTime]","attrs":[]},"ds":{},"attrdefgroups":[],"childs":[],"order":16,"pub":1,"mt":"2025-03-05T15:31:24.9654966Z","id":"itnmgtzg","pid":"zkgldg5b","n":"f_field13","lb":"时间选择器","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"5icgyefr","libid":"antdesign","cn":"TextArea","ct":1,"frag":{"dt":"AntDesign.TextArea, AntDesign","t":"AntDesign.TextArea, AntDesign","valt":"System.String","attrs":[]},"ds":{"dsgt":1},"attrdefgroups":[],"childs":[],"order":12,"pub":1,"mt":"2025-02-24T15:36:40.7389762Z","id":"ibgtanur","pid":"ongkggvjy","n":"f_field7","lb":"文本框","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"9xulbbf5u","libid":"antdesign","cn":"Select","ct":1,"frag":{"dt":"AntDesign.Select\u00602[[System.String],[System.String]], antdesign","t":"AntDesign.Select\u00602[[System.String],[System.String]], antdesign","valt":"System.String","attrs":[]},"ds":{},"attrdefgroups":[],"childs":[],"order":17,"pub":1,"mt":"2025-03-05T15:31:30.1523166Z","id":"c9acpmcp","pid":"ongkggvjy","n":"f_field11","lb":"选择器","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}},{"compid":"nwepem4i","libid":"antdesign","cn":"Switch","ct":1,"frag":{"dt":"AntDesign.Switch, AntDesign","t":"AntDesign.Switch, AntDesign","valt":"System.Boolean","attrs":[]},"ds":{},"attrdefgroups":[],"childs":[],"order":19,"pub":1,"mt":"2025-03-05T15:31:40.4314786Z","id":"cgfb0e64","pid":"ongkggvjy","n":"f_field9","lb":"开关","stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}}],"aid":"caseapp","id":"fhumgxyk","n":"基础表单","order":21,"pt":1,"pageprop":{"playout":3,"ds":{}},"ds":{"dst":1,"dsv":"tb_test1"},"modifiedTime":"2025-03-22T13:31:39.1163931Z"} \ No newline at end of file +{ + "comps": [ + { + "compid": "52391a70", + "libid": "antdesign", + "cn": "Input", + "ct": 1, + "frag": { + "dt": "AntDesign.Input\u00601[System.String], AntDesign", + "t": "AntDesign.Input\u00601[System.String], AntDesign", + "valt": "System.String", + "attrs": [] + }, + "ds": { + "dsgt": 1 + }, + "attrdefgroups": [ + { + "n": "basic", + "disn": "自定义", + "attrs": [] + } + ], + "childs": [], + "order": 10, + "pub": 1, + "mt": "2025-02-24T15:36:15.8037414Z", + "id": "0bd406f9-10f9-4eaf-8184-270b192a5e20", + "pid": "lyawwbh9f", + "n": "f_field1", + "lb": "输入框1", + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {}, + "desc": "111" + }, + { + "compid": "52391a70", + "libid": "antdesign", + "cn": "Input", + "ct": 1, + "frag": { + "dt": "AntDesign.Input\u00601[System.String], AntDesign", + "t": "AntDesign.Input\u00601[System.String], AntDesign", + "valt": "System.String", + "attrs": [] + }, + "ds": {}, + "attrdefgroups": [ + { + "n": "basic", + "disn": "自定义", + "attrs": [] + } + ], + "childs": [], + "order": 10, + "pub": 1, + "mt": "2025-02-24T15:36:15.8037414Z", + "id": "299f6803-f04d-498d-ab53-3c1812c91b3d", + "pid": "lyawwbh9f", + "n": "f_field3", + "lb": "输入框2", + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {}, + "desc": "222" + }, + { + "compid": "evuqdwzl", + "libid": "antdesign", + "cn": "Radio", + "ct": 1, + "frag": { + "dt": "AntDesign.RadioGroup\u00601[System.String], AntDesign", + "t": "AntDesign.RadioGroup\u00601[System.String], AntDesign", + "attrs": [ + { + "n": "TValue", + "val": "System.String" + } + ] + }, + "ds": { + "dsfrag": { + "t": "AntDesign.Radio\u00601[System.String], AntDesign", + "attrs": [ + { + "n": "Value", + "val": "null" + } + ] + }, + "dsgt": 1, + "dst": 8, + "fxopds": [ + { + "l": "选项1", + "v": "op1" + }, + { + "l": "选项2", + "v": "op2" + }, + { + "l": "选项3", + "v": "op3" + }, + { + "l": "选项4", + "v": "op4" + } + ] + }, + "attrdefgroups": [], + "childs": [], + "order": 13, + "pub": 1, + "mt": "2025-03-01T02:58:56.1519656Z", + "id": "vjolyn1r", + "pid": "zkgldg5b", + "n": "f_field6", + "lb": "单选框", + "sptds": true, + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {} + }, + { + "compid": "vdcoqln1z", + "libid": "antdesign", + "cn": "Checkbox", + "ct": 1, + "frag": { + "dt": "AntDesign.CheckboxGroup\u00601[System.String], AntDesign", + "t": "AntDesign.CheckboxGroup\u00601[System.String], AntDesign", + "valt": "System.String[]", + "attrs": [] + }, + "ds": { + "dsfrag": { + "t": "AntDesign.Checkbox, AntDesign", + "attrs": [ + { + "n": "Label" + } + ] + }, + "dsgt": 1, + "dst": 8, + "fxopds": [ + { + "l": "选项11", + "v": "ck1" + }, + { + "l": "选项22", + "v": "ck2" + }, + { + "l": "选项33", + "v": "字段8" + } + ] + }, + "attrdefgroups": [], + "childs": [], + "order": 14, + "pub": 1, + "mt": "2025-02-24T15:37:04.5563097Z", + "id": "4trfp5bk", + "pid": "zkgldg5b", + "n": "f_field8", + "lb": "复选框", + "sptds": true, + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {} + }, + { + "compid": "7bab5a19", + "libid": "antdesign", + "cn": "DatePicker", + "ct": 1, + "frag": { + "dt": "AntDesign.DatePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign", + "t": "AntDesign.DatePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign", + "valt": "System.Nullable\u00601[System.DateTime]", + "attrs": [] + }, + "ds": { + "dsgt": 1 + }, + "attrdefgroups": [], + "childs": [], + "order": 15, + "pub": 1, + "mt": "2025-02-24T15:59:32.6799272Z", + "id": "vdyv8q2ay", + "pid": "zkgldg5b", + "n": "f_field10", + "lb": "日期选择器", + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {} + }, + { + "compid": "oikgmvkm", + "libid": "antdesign", + "cn": "TimePicker", + "ct": 1, + "frag": { + "dt": "AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign", + "t": "AntDesign.TimePicker\u00601[[System.Nullable\u00601[[System.DateTime]]]], AntDesign", + "valt": "System.Nullable\u00601[System.DateTime]", + "attrs": [] + }, + "ds": {}, + "attrdefgroups": [], + "childs": [], + "order": 16, + "pub": 1, + "mt": "2025-03-05T15:31:24.9654966Z", + "id": "itnmgtzg", + "pid": "zkgldg5b", + "n": "f_field13", + "lb": "时间选择器", + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {} + }, + { + "compid": "5icgyefr", + "libid": "antdesign", + "cn": "TextArea", + "ct": 1, + "frag": { + "dt": "AntDesign.TextArea, AntDesign", + "t": "AntDesign.TextArea, AntDesign", + "valt": "System.String", + "attrs": [] + }, + "ds": { + "dsgt": 1 + }, + "attrdefgroups": [], + "childs": [], + "order": 12, + "pub": 1, + "mt": "2025-02-24T15:36:40.7389762Z", + "id": "ibgtanur", + "pid": "ongkggvjy", + "n": "f_field7", + "lb": "文本框", + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {} + }, + { + "compid": "9xulbbf5u", + "libid": "antdesign", + "cn": "Select", + "ct": 1, + "frag": { + "dt": "AntDesign.Select\u00602[[System.String],[System.String]], antdesign", + "t": "AntDesign.Select\u00602[[System.String],[System.String]], antdesign", + "valt": "System.String", + "attrs": [] + }, + "ds": {}, + "attrdefgroups": [], + "childs": [], + "order": 17, + "pub": 1, + "mt": "2025-03-05T15:31:30.1523166Z", + "id": "c9acpmcp", + "pid": "ongkggvjy", + "n": "f_field11", + "lb": "选择器", + "sptds": true, + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {} + }, + { + "compid": "nwepem4i", + "libid": "antdesign", + "cn": "Switch", + "ct": 1, + "frag": { + "dt": "AntDesign.Switch, AntDesign", + "t": "AntDesign.Switch, AntDesign", + "valt": "System.Boolean", + "attrs": [] + }, + "ds": {}, + "attrdefgroups": [], + "childs": [], + "order": 19, + "pub": 1, + "mt": "2025-03-05T15:31:40.4314786Z", + "id": "cgfb0e64", + "pid": "ongkggvjy", + "n": "f_field9", + "lb": "开关", + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {} + } + ], + "aid": "caseapp", + "id": "fhumgxyk", + "n": "基础表单", + "order": 21, + "pt": 1, + "pageprop": { + "playout": 3, + "ds": {} + }, + "ds": { + "dst": 1, + "dsv": "tb_test1" + }, + "modifiedTime": "2025-03-23T09:20:13.145632Z" +} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/9xulbbf5u.json b/meta/parts/componentParts/antdesign/9xulbbf5u.json index 064c2a09..ee97e8e7 100644 --- a/meta/parts/componentParts/antdesign/9xulbbf5u.json +++ b/meta/parts/componentParts/antdesign/9xulbbf5u.json @@ -1 +1 @@ -{"cn":"Select","ct":1,"frag":{"dt":"AntDesign.Select\u00602[[System.String],[System.String]], antdesign","valt":"System.String","attrs":[]},"attrdefgroups":[],"childs":[],"sptds":false,"order":17,"pub":1,"mt":"2025-03-05T15:31:30.1523166Z","id":"76b2alet3","libid":"antdesign","compid":"9xulbbf5u","lb":"选择器-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"compid":"9xulbbf5u","libid":"antdesign","cn":"Select","ct":1,"frag":{"dt":"AntDesign.Select\u00602[[System.String],[System.String]], antdesign","valt":"System.String","attrs":[]},"ds":{"dsgt":1},"attrdefgroups":[],"childs":[],"order":17,"pub":1,"mt":"2025-03-22T15:55:39.4807842Z","id":"76b2alet3","lb":"选择器-A","sptds":true,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/evuqdwzl.json b/meta/parts/componentParts/antdesign/evuqdwzl.json index 0d8231d4..0666b9a2 100644 --- a/meta/parts/componentParts/antdesign/evuqdwzl.json +++ b/meta/parts/componentParts/antdesign/evuqdwzl.json @@ -1,48 +1 @@ -{ - "cn": "Radio", - "ct": 1, - "frag": { - "dt": "AntDesign.RadioGroup\u00601[System.String], AntDesign", - "valt": "System.String", - "attrs": [ - { - "n": "TValue", - "val": "System.String" - } - ], - "childs": [ - { - "dt": "AntDesign.Radio\u00601[System.String], AntDesign", - "valt": "System.String", - "attrs": [] - }, - { - "dt": "AntDesign.Radio\u00601[System.String], AntDesign", - "valt": "System.String", - "attrs": [] - } - ] - }, - "attrdefgroups": [], - "childs": [], - "sptds": true, - "order": 13, - "pub": 1, - "mt": "2025-03-01T02:58:56.1519656Z", - "id": "lkmww2hq", - "libid": "antdesign", - "compid": "evuqdwzl", - "lb": "单选框-A", - "container": false, - "stl": { - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "ev": {}, - "ds": { - "dsgt": 1, - "dsft": "AntDesign.Radio\u00601[System.String], AntDesign" - } -} \ No newline at end of file +{"compid":"evuqdwzl","libid":"antdesign","cn":"Radio","ct":1,"frag":{"dt":"AntDesign.RadioGroup\u0060[System.String], AntDesign","valt":"System.String","attrs":[{"n":"TValue","val":"System.String"}]},"ds":{"dsfrag":{"t":"AntDesign.Radio\u00601[System.String], AntDesign","attrs":[{"n":"Value","val":"null"}]},"dsgt":1},"attrdefgroups":[],"childs":[],"order":13,"pub":1,"mt":"2025-03-23T07:26:31.4273273Z","id":"lkmww2hq","lb":"单选框-A","sptds":true,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/nl9e6mko.json b/meta/parts/componentParts/antdesign/nl9e6mko.json index df518f69..80708be6 100644 --- a/meta/parts/componentParts/antdesign/nl9e6mko.json +++ b/meta/parts/componentParts/antdesign/nl9e6mko.json @@ -1 +1 @@ -{"cn":"AutoComplete","ct":1,"frag":{"dt":"AntDesign.AutoComplete\u00601[System.String], AntDesign","valt":"System.String","attrs":[]},"attrdefgroups":[],"childs":[],"sptds":false,"order":18,"pub":1,"mt":"2025-03-05T15:31:35.1662367Z","id":"pqxzqsh2","libid":"antdesign","compid":"nl9e6mko","lb":"自动完成-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"compid":"nl9e6mko","libid":"antdesign","cn":"AutoComplete","ct":1,"frag":{"dt":"AntDesign.AutoComplete\u00601[System.String], AntDesign","valt":"System.String","attrs":[]},"ds":{"dsgt":1},"attrdefgroups":[],"childs":[],"order":18,"pub":1,"mt":"2025-03-22T15:55:52.1413161Z","id":"pqxzqsh2","lb":"自动完成-A","sptds":true,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/vdcoqln1z.json b/meta/parts/componentParts/antdesign/vdcoqln1z.json index 86d303e2..7eae1db9 100644 --- a/meta/parts/componentParts/antdesign/vdcoqln1z.json +++ b/meta/parts/componentParts/antdesign/vdcoqln1z.json @@ -1,30 +1,37 @@ { + "compid": "vdcoqln1z", + "libid": "antdesign", "cn": "Checkbox", "ct": 1, "frag": { - "dt": "AntDesign.Checkbox, AntDesign", - "valt": "System.Boolean", + "dt": "AntDesign.CheckboxGroup\u00601[System.String], AntDesign", + "valt": "System.String[]", "attrs": [] }, + "ds": { + "dsfrag": { + "t": "AntDesign.Checkbox, AntDesign", + "attrs": [ + { + "n": "Label" + } + ] + }, + "dsgt": 1 + }, "attrdefgroups": [], "childs": [], - "sptds": false, "order": 14, "pub": 1, - "mt": "2025-02-24T15:37:04.5563097Z", + "mt": "2025-03-23T08:24:39.8300016Z", "id": "epurwzyy", - "libid": "antdesign", - "compid": "vdcoqln1z", "lb": "复选框-A", - "container": false, + "sptds": true, "stl": { "itemh": 85, "labelw": 180, "display": "inline", "pos": "static" }, - "ev": {}, - "ds": { - "dsgt": 1 - } + "ev": {} } \ No newline at end of file diff --git a/src/Common/H.LowCode.Entity/EntityManager/FieldTypeMapping.cs b/src/Common/H.LowCode.Entity/EntityManager/FieldTypeMapping.cs index a0414232..e1433e9c 100644 --- a/src/Common/H.LowCode.Entity/EntityManager/FieldTypeMapping.cs +++ b/src/Common/H.LowCode.Entity/EntityManager/FieldTypeMapping.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; -using System.Threading.Tasks; namespace H.LowCode.Entity; @@ -12,8 +10,10 @@ public class FieldTypeMapping public static Type GetFieldType(string fieldType, bool isNullable) { string type = fieldType.ToLower(); - if (fieldType != "char" && fieldType != "varchar") + if (fieldType != "char" && fieldType != "varchar" + && fieldType != "varchar[]") type = $"{type}{(isNullable ? "?" : string.Empty)}"; + switch (type) { case "char": @@ -39,6 +39,8 @@ public class FieldTypeMapping return typeof(DateTime); case "datetime?": return typeof(DateTime?); + case "varchar[]": + return typeof(string[]); default: throw new NotSupportedException($"not support type: {type}"); } diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/Components/APIDataSource.razor b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/Components/APIDataSource.razor index 1ba5ca11..05e34c29 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/Components/APIDataSource.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/Components/APIDataSource.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.DesignEngine.Abstraction -@inherits LowCodeComponentBase +@inherits DesignEngineLowCodeComponentBase @if (DataSource != null) { @@ -26,11 +26,15 @@ - @if (DataSource.Body.DataType == APIBodyTypeEnum.Json + @if(DataSource.Body.DataType == APIBodyTypeEnum.None) + { + + + } + } + + + + + + 待发布 + 已发布 + + +
+
+ 组件 RenderFragment: + + + +
+
+Width="600" MaxBodyHeight="700"> @@ -102,10 +140,11 @@ public Action Refresh { get; set; } IEnumerable selectedRows; - int _total = 0; private bool _formVisible = false; private Form _form; + private string _textComponentFragment; + private string _textDataSource; private IList _componentPartsList; private ComponentPartsSchema _componentPartsSchema = new ComponentPartsSchema(); @@ -118,21 +157,23 @@ { await base.OnInitializedAsync(); - _total = 50; _componentPartsList = await ComponentPartsListState.GetOrAddAsync(this, async () => { - return await LoadComponentPartsAsync(1, 50); + return await LoadComponentPartsAsync(); }); } - private async Task> LoadComponentPartsAsync(int pageIndex, int pageSize) + private async Task> LoadComponentPartsAsync() { return await ComponentPartsAppService.GetListAsync(LibraryId); } private async Task GetComponentPartsAsync(string componentPartsId) { - return await ComponentPartsAppService.GetByIdAsync(LibraryId, componentPartsId); + var component = await ComponentPartsAppService.GetByIdAsync(LibraryId, componentPartsId); + _textComponentFragment = component.Fragment.ToJson(writeIndented: true); + _textDataSource = component.DataSource?.ToJson(writeIndented: true); + return component; } private void CreateAsync() @@ -164,13 +205,7 @@ { _componentPartsSchema = await GetComponentPartsAsync(componentId); - JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions() - { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, - Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.CjkUnifiedIdeographs), - WriteIndented = true - }; - _textFormValue = JsonSerializer.Serialize(_componentPartsSchema, jsonSerializerOptions); + _textFormValue = _componentPartsSchema.ToJson(writeIndented: true); _textFormVisible = true; StateHasChanged(); @@ -188,6 +223,8 @@ var validate = _form.Validate(); if (validate) { + _componentPartsSchema.Fragment = _textComponentFragment.FromJson(); + _componentPartsSchema.DataSource = _textDataSource.FromJson(); var isSuccess = await SaveComponentPartsSchemaAsync(); if (isSuccess) { @@ -210,7 +247,7 @@ private async Task OnFinishAsync() { - _componentPartsList = await LoadComponentPartsAsync(1, 50); + _componentPartsList = await LoadComponentPartsAsync(); } private async Task OnTextFormConfirmAsync(MouseEventArgs e) @@ -220,7 +257,7 @@ if (isSuccess) { _textFormVisible = false; - _componentPartsList = await LoadComponentPartsAsync(1, 50); + _componentPartsList = await LoadComponentPartsAsync(); await Message.Success("保存成功!"); } diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraryList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraryList.razor index 447b9bfa..97074666 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraryList.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraryList.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.Workbench -@inherits LowCodeComponentBase +@inherits DesignEngineLowCodeComponentBase @layout WorkbenchLayout @inject IComponentLibraryAppService ComponentLibraryAppService diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/PageLibraryList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/PageLibraryList.razor index d7324405..69b3afac 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/PageLibraryList.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/PageLibraryList.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.Workbench -@inherits LowCodeComponentBase +@inherits DesignEngineLowCodeComponentBase @layout WorkbenchLayout
diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Plugins/PluginsPartsList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/Plugins/PluginsPartsList.razor index 53b4022f..14a22ad4 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/Plugins/PluginsPartsList.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/Plugins/PluginsPartsList.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.Workbench -@inherits LowCodeComponentBase +@inherits DesignEngineLowCodeComponentBase @layout WorkbenchLayout
diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/Solutions/SolutionIntroduction.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/Solutions/SolutionIntroduction.razor index 8acf1581..2d3e7412 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/Solutions/SolutionIntroduction.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/Solutions/SolutionIntroduction.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.Workbench -@inherits LowCodeComponentBase +@inherits DesignEngineLowCodeComponentBase @layout WorkbenchLayout

解决方案介绍

diff --git a/src/DesignEngine/H.LowCode.Workbench/_Imports.razor b/src/DesignEngine/H.LowCode.Workbench/_Imports.razor index a5684b00..e2ac97ff 100644 --- a/src/DesignEngine/H.LowCode.Workbench/_Imports.razor +++ b/src/DesignEngine/H.LowCode.Workbench/_Imports.razor @@ -12,6 +12,7 @@ @using AntDesign.TableModels @using H.Extensions.System @using H.LowCode.ComponentBase +@using H.LowCode.DesignEngine.Abstraction @using H.LowCode.Configuration @using H.LowCode.DesignEngine.Application.Contracts @using H.LowCode.Workbench diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index d2cc3dd5..f0c89cce 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -60,7 +60,7 @@ - + diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ContainerComponentRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ContainerComponentRender.razor index f41014ef..c1117c25 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ContainerComponentRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ContainerComponentRender.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.Themes.AntBlazor -@inherits LowCodeComponentBase +@inherits RenderEngineLowCodeComponentBase
@if (ContainerComponent.Childrens != null) diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormContainerComponentRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormContainerComponentRender.razor index 2098bb9d..c9ec6f82 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormContainerComponentRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormContainerComponentRender.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.Themes.AntBlazor -@inherits LowCodeComponentBase +@inherits RenderEngineLowCodeComponentBase
@if (ContainerComponent.Childrens != null) diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender.razor index d03ac81a..04948c02 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.Themes.AntBlazor -@inherits LowCodeComponentBase +@inherits RenderEngineLowCodeComponentBase @inject IFormDataAppService FormDataAppService @@ -41,7 +41,11 @@ private async Task OnFinishAsync() { - await FormDataAppService.SaveAsync(formDTO); + var success = await FormDataAppService.SaveAsync(formDTO); + if (success) + await Message.Success("保存成功"); + else + await Message.Error("保存失败"); } private void OnFinishFailed(EditContext editContext) diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender_Test.razor b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender_Test.razor index a52eb5c7..359a3b86 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender_Test.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/FormPageRender_Test.razor @@ -33,17 +33,20 @@ WrapperColSpan="16"> - @* *@ - @* 选项1 *@ - @* 选项2 *@ - @* *@ - @_renderFragment + + 选项1 + 选项2 + - + @* *@ + @* 选项11 *@ + @* 选项22 *@ + @* *@ + @_renderFragment @@ -63,7 +66,7 @@ WrapperColSpan="16"> ["Field5"] = true, //switch ["Field6"] = "字段6", //radio ["Field7"] = "字段7", - ["Field8"] = "字段8", + ["Field8"] = new string[] { "字段8" } }; protected override void OnInitialized() @@ -92,25 +95,23 @@ WrapperColSpan="16"> { return builder => { - builder.OpenComponent>(0); - builder.AddAttribute(1, "TValue", typeof(string)); + builder.OpenComponent>(0); + //builder.AddAttribute(1, "TValue", typeof(string)); builder.AddAttribute(2, "ChildContent", (RenderFragment)((childBuilder) => { - childBuilder.OpenComponent>(3); - childBuilder.AddAttribute(4, "Value", "op1"); - //childBuilder.AddContent(5, "选项1"); + childBuilder.OpenComponent(3); + childBuilder.AddAttribute(4, "Label", "op1"); childBuilder.AddAttribute(5, "ChildContent", (RenderFragment)((cb) => { - cb.AddContent(6, "op1"); + cb.AddContent(6, "ck1"); })); childBuilder.CloseComponent(); - childBuilder.OpenComponent>(6); - childBuilder.AddAttribute(7, "Value", "op2"); - //childBuilder.AddContent(8, "选项2"); + childBuilder.OpenComponent(6); + childBuilder.AddAttribute(7, "Label", "op2"); childBuilder.AddAttribute(8, "ChildContent", (RenderFragment)((cb) => { - cb.AddContent(9, "op2"); + cb.AddContent(9, "字段8"); })); childBuilder.CloseComponent(); })); diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/NormalPageRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/NormalPageRender.razor index c9c2be31..b6b2b5f4 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/NormalPageRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/NormalPageRender.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.Themes.AntBlazor -@inherits LowCodeComponentBase +@inherits RenderEngineLowCodeComponentBase @foreach (var component in Page.Components) { diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/TablePageRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/TablePageRender.razor index c9c2be31..b6b2b5f4 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/TablePageRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/PageRender/TablePageRender.razor @@ -1,5 +1,5 @@ @namespace H.LowCode.Themes.AntBlazor -@inherits LowCodeComponentBase +@inherits RenderEngineLowCodeComponentBase @foreach (var component in Page.Components) { diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs index cdb1e968..cd6d1805 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs @@ -139,7 +139,9 @@ public class ComponentPartsSchema : ComponentSchemaBase //this.Style = componentPartsDefine.Style; this.AttributeDefineGroups = componentPartsDefine.AttributeDefineGroups; this.IsSupportDataSource = componentPartsDefine.IsSupportDataSource; - + if (componentPartsDefine?.DataSource?.DataSourceFragment != null) + this.DataSource.DataSourceFragment = componentPartsDefine.DataSource.DataSourceFragment; + foreach (var child in this.Childrens) { child.MergeComponentPartsDefine(componentPartsDefine); diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/DataSourceSchemas/ComponentPartsDataSourceSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/DataSourceSchemas/ComponentPartsDataSourceSchema.cs index 8d8bd23c..2b134185 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/DataSourceSchemas/ComponentPartsDataSourceSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/DataSourceSchemas/ComponentPartsDataSourceSchema.cs @@ -7,7 +7,11 @@ using System.Threading.Tasks; namespace H.LowCode.MetaSchema.DesignEngine; -public class ComponentPartsDataSourceSchema : ComponentDataSourceSchema +public class ComponentPartsDataSourceSchema : ComponentDataSourceSchemaBase { - + /// + /// DataSource 渲染的 Fragment + /// + [JsonPropertyName("dsfrag")] + public ComponentPartsFragmentSchema DataSourceFragment { get; set; } } diff --git a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/DataSourceSchemas/ComponentDataSourceSchema.cs b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/DataSourceSchemas/ComponentDataSourceSchema.cs new file mode 100644 index 00000000..c5b45be0 --- /dev/null +++ b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/DataSourceSchemas/ComponentDataSourceSchema.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json.Serialization; + +namespace H.LowCode.MetaSchema.RenderEngine; + +public class ComponentDataSourceSchema : ComponentDataSourceSchemaBase +{ + /// + /// DataSource 渲染的 Fragment + /// + [JsonPropertyName("dsfrag")] + public ComponentFragmentSchema DataSourceFragment { get; set; } +} diff --git a/src/Protocol/H.LowCode.MetaSchema/ComponentSchemaBase.cs b/src/Protocol/H.LowCode.MetaSchema/ComponentSchemaBase.cs index 1fb320e8..fe2970d5 100644 --- a/src/Protocol/H.LowCode.MetaSchema/ComponentSchemaBase.cs +++ b/src/Protocol/H.LowCode.MetaSchema/ComponentSchemaBase.cs @@ -28,20 +28,33 @@ public abstract class ComponentSchemaBase [JsonPropertyName("hlb")] public bool IsHiddenLabel { get; set; } - [JsonPropertyName("desc")] - public string Description { get; set; } - /// /// 是否为容器组件 /// [JsonPropertyName("container")] public bool IsContainer { get; set; } + private bool _isSupportDataSource; /// - /// 是否支持数据源属性 + /// 是否支持数据源 /// [JsonPropertyName("sptds")] - public bool IsSupportDataSource { get; set; } + public bool IsSupportDataSource + { + get + { + if (IsContainer) + return false; + return _isSupportDataSource; + } + set + { + if (IsContainer) + _isSupportDataSource = false; + else + _isSupportDataSource = value; + } + } /// /// 组件样式 @@ -54,4 +67,7 @@ public abstract class ComponentSchemaBase /// [JsonPropertyName("ev")] public ComponentEventSchema Event { get; set; } = new(); + + [JsonPropertyName("desc")] + public string Description { get; set; } } \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/ComponentDataSourceSchema.cs b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/ComponentDataSourceSchema.cs index e8af8490..884e2303 100644 --- a/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/ComponentDataSourceSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/DataSourceSchemas/ComponentDataSourceSchema.cs @@ -7,17 +7,20 @@ using System.Threading.Tasks; namespace H.LowCode.MetaSchema; -public class ComponentDataSourceSchema +public abstract class ComponentDataSourceSchemaBase { + /// + /// 数据源分组类型 + /// [JsonPropertyName("dsgt")] public ComponentDataSourceGroupTypeEnum DataSourceGroupType { get; set; } + /// + /// 数据源类型 + /// [JsonPropertyName("dst")] public ComponentDataSourceTypeEnum DataSourceType { get; set; } - [JsonPropertyName("dsft")] - public string DataSourceFragmentType { get; set; } - [JsonPropertyName("dsid")] public string DataSourceId { get; set; } diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/H.LowCode.RenderEngine.Abstraction.csproj b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/H.LowCode.RenderEngine.Abstraction.csproj index 31b067d0..f5b66339 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/H.LowCode.RenderEngine.Abstraction.csproj +++ b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/H.LowCode.RenderEngine.Abstraction.csproj @@ -8,6 +8,7 @@ + diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs index f5fe2024..514c1c44 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs @@ -5,13 +5,12 @@ using System.Linq; using System.Text; using H.LowCode.MetaSchema; using System.Reflection; -using H.LowCode.ComponentBase; using H.LowCode.MetaSchema.RenderEngine; using Microsoft.AspNetCore.Components.Rendering; namespace H.LowCode.RenderEngine.Abstraction; -public abstract class RenderEngineDynamicComponentBase : LowCodeComponentBase +public abstract class RenderEngineDynamicComponentBase : RenderEngineLowCodeComponentBase { protected virtual RenderFragment RenderComponent( bool isSupportDataSource, ComponentDataSourceSchema dataSource, @@ -131,12 +130,18 @@ public abstract class RenderEngineDynamicComponentBase : LowCodeComponentBase { builder.AddAttribute(index++, "ChildContent", (RenderFragment)(childBuilder => { - Type childComponentType = Type.GetType(dataSource.DataSourceFragmentType, true); + if (string.IsNullOrEmpty(dataSource.DataSourceFragment.TypeName)) + throw new ArgumentNullException(nameof(dataSource.DataSourceFragment.TypeName)); + + Type childComponentType = Type.GetType(dataSource.DataSourceFragment.TypeName, true); foreach (var option in dataSource.FiexdOptionDataSource) { childBuilder.OpenComponent(index++, childComponentType); + foreach(var fragAttr in dataSource.DataSourceFragment.Attributes) + { + childBuilder.AddAttribute(index++, fragAttr.Name, option.Value); + } - childBuilder.AddAttribute(index++, "Value", option.Value); //childBuilder.AddContent(index++, option.Label); childBuilder.AddAttribute(index++, "ChildContent", (RenderFragment)((cb) => { diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineLowCodeComponentBase.cs b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineLowCodeComponentBase.cs new file mode 100644 index 00000000..0110b0d1 --- /dev/null +++ b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineLowCodeComponentBase.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Components; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Reflection; +using H.LowCode.ComponentBase; +using AntDesign; + +namespace H.LowCode.RenderEngine.Abstraction; + +public abstract class RenderEngineLowCodeComponentBase : LowCodeComponentBase +{ + [Inject] + protected new IMessageService Message { get; set; } +} diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/ThemePartLayoutBase.cs b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/ThemePartLayoutBase.cs index c7a7a1fd..1875ebdf 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/ThemePartLayoutBase.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/ThemePartLayoutBase.cs @@ -4,12 +4,8 @@ using H.LowCode.RenderEngine.Application.Contracts; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.Configuration; using System; -using System.Collections.Generic; using System.Linq; -using System.Net.Http; -using System.Net.Http.Json; using System.Text; -using System.Threading.Tasks; namespace H.LowCode.RenderEngine.Abstraction; -- Gitee From a267b5bd696c1b1eba261794544a6e061242f801 Mon Sep 17 00:00:00 2001 From: "{iliuhai@aliyun.com}" Date: Sat, 29 Mar 2025 17:28:40 +0800 Subject: [PATCH 18/18] =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E7=89=A9=E6=96=99=E8=87=AA=E5=AE=9A=E4=B9=89=E5=B1=9E=E6=80=A7?= =?UTF-8?q?,=20=E6=94=AF=E6=8C=81=E8=AE=BE=E8=AE=A1=E6=97=B6=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E5=B1=9E=E6=80=A7=E8=AE=BE=E7=BD=AE,=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=BF=90=E8=A1=8C=E6=97=B6=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E6=B8=B2=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- meta/apps/caseapp/page/fhumgxyk.json | 87 +++++++-- .../componentParts/antdesign/52391a70.json | 47 +++-- .../componentParts/antdesign/csbjlezr.json | 2 +- .../componentParts/antdesign/evuqdwzl.json | 43 ++++- .../componentParts/antdesign/sonvddk21.json | 2 +- .../componentParts/antdesign/yo3v3smv.json | 31 +--- .../LowCodeDynamicComponentBase.cs | 119 +++++++++++++ .../DesignEngineDynamicComponentBase.cs | 159 ++++++----------- .../DesignPanel/ComponentItem.razor | 10 +- .../DataSourcePropertyItem.razor | 71 ++++++-- .../ExtensionPropertyItem.razor | 94 +++++----- .../TreeDataSourceSetting.razor | 47 +++++ .../DesignPanel/ComponentItem.razor | 3 +- .../ComponentPartsList.razor | 55 +++--- src/Directory.Packages.props | 2 +- .../ComponentRender/ComponentRender.razor | 3 +- .../ComponentRender/FormComponentRender.razor | 3 +- .../ComponentPartsSchema.cs | 2 +- .../Enums/ComponentAttributeItemTypeEnum.cs | 24 +-- ...omponentPartsAttributeDefineGroupSchema.cs | 11 +- .../ComponentPartsAttributeDefineSchema.cs | 66 +++++-- .../ComponentSchema.cs | 51 +++++- .../ComponentAttributeDefineGroupSchema.cs | 15 ++ .../ComponentAttributeDefineSchema.cs | 13 ++ .../Enums/ComponentDataSourceGroupTypeEnum.cs | 3 +- .../ComponentAttributeDefineSchemaBase.cs | 23 +++ .../ComponentFragmentSchemaBase.cs | 33 ++-- .../PropertySchemas/PropertyItemSchema.cs | 10 +- .../Utils/ObjectMerger.cs | 15 +- .../RenderEngineDynamicComponentBase.cs | 166 +++++++----------- .../MetaDomainServices/PageDomainService.cs | 15 +- 31 files changed, 774 insertions(+), 451 deletions(-) create mode 100644 src/Common/H.LowCode.ComponentBase/LowCodeDynamicComponentBase.cs create mode 100644 src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/OptionDataSource/TreeDataSourceSetting.razor rename src/Protocol/{H.LowCode.MetaSchema => H.LowCode.MetaSchema.DesignEngine}/Enums/ComponentAttributeItemTypeEnum.cs (42%) create mode 100644 src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentAttributeDefineGroupSchema.cs create mode 100644 src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentAttributeDefineSchema.cs create mode 100644 src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentAttributeDefineSchemaBase.cs diff --git a/meta/apps/caseapp/page/fhumgxyk.json b/meta/apps/caseapp/page/fhumgxyk.json index 6f83508b..ec9463f9 100644 --- a/meta/apps/caseapp/page/fhumgxyk.json +++ b/meta/apps/caseapp/page/fhumgxyk.json @@ -16,16 +16,46 @@ }, "attrdefgroups": [ { - "n": "basic", - "disn": "自定义", - "attrs": [] + "gn": "基础属性", + "attrdefs": [ + { + "disn": "是否禁用", + "pt": 6, + "desc": "", + "dftval": false, + "valt": 13, + "attrn": "Disabled", + "attrt": "System.Boolean", + "attrv": false + }, + { + "disn": "最大长度", + "pt": 2, + "desc": "字段输入的最大长度,为0时表示不限制长度", + "dftval": 0, + "valt": 6, + "attrn": "MaxLength", + "attrt": "System.Int32", + "attrv": 0 + }, + { + "disn": "输入提示", + "pt": 1, + "desc": "组件输入时的 Placeholder 提示", + "dftval": "", + "valt": 1, + "attrn": "Placeholder", + "attrt": "System.String", + "attrv": "" + } + ] } ], "childs": [], "order": 10, "pub": 1, "mt": "2025-02-24T15:36:15.8037414Z", - "id": "0bd406f9-10f9-4eaf-8184-270b192a5e20", + "id": "0bd406f9", "pid": "lyawwbh9f", "n": "f_field1", "lb": "输入框1", @@ -52,16 +82,46 @@ "ds": {}, "attrdefgroups": [ { - "n": "basic", - "disn": "自定义", - "attrs": [] + "gn": "基础属性", + "attrdefs": [ + { + "disn": "是否禁用", + "pt": 6, + "desc": "", + "dftval": false, + "valt": 13, + "attrn": "Disabled", + "attrt": "System.Boolean", + "attrv": false + }, + { + "disn": "最大长度", + "pt": 2, + "desc": "字段输入的最大长度,为0时表示不限制长度", + "dftval": 0, + "valt": 6, + "attrn": "MaxLength", + "attrt": "System.Int32", + "attrv": 0 + }, + { + "disn": "输入提示", + "pt": 1, + "desc": "组件输入时的 Placeholder 提示", + "dftval": "", + "valt": 1, + "attrn": "Placeholder", + "attrt": "System.String", + "attrv": "xxx" + } + ] } ], "childs": [], "order": 10, "pub": 1, "mt": "2025-02-24T15:36:15.8037414Z", - "id": "299f6803-f04d-498d-ab53-3c1812c91b3d", + "id": "299f6803", "pid": "lyawwbh9f", "n": "f_field3", "lb": "输入框2", @@ -84,8 +144,8 @@ "t": "AntDesign.RadioGroup\u00601[System.String], AntDesign", "attrs": [ { - "n": "TValue", - "val": "System.String" + "attrn": "TValue", + "attrt": "System.String" } ] }, @@ -94,8 +154,7 @@ "t": "AntDesign.Radio\u00601[System.String], AntDesign", "attrs": [ { - "n": "Value", - "val": "null" + "attrn": "Value" } ] }, @@ -154,7 +213,7 @@ "t": "AntDesign.Checkbox, AntDesign", "attrs": [ { - "n": "Label" + "attrn": "Label" } ] }, @@ -357,5 +416,5 @@ "dst": 1, "dsv": "tb_test1" }, - "modifiedTime": "2025-03-23T09:20:13.145632Z" + "modifiedTime": "2025-03-26T16:20:58.1859732Z" } \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/52391a70.json b/meta/parts/componentParts/antdesign/52391a70.json index 29b15ef7..19f8ea97 100644 --- a/meta/parts/componentParts/antdesign/52391a70.json +++ b/meta/parts/componentParts/antdesign/52391a70.json @@ -8,41 +8,36 @@ }, "attrdefgroups": [ { - "props": [ + "gn": "基础属性", + "attrdefs": [ { - "pt": 1, - "n": "maxlength", - "disn": "最大长度", - "desc": "字段输入的最大长度,为0时表示不限制长度", - "dftval": "0", - "compvaltype": 0 - }, - { - "pt": 1, - "n": "isslice", - "disn": "是否截断", - "desc": "选择\u0022是\u0022当超出数据库长度时字段截断", - "dftval": "0", - "compvaltype": 0 + "disn": "是否禁用", + "pt": 6, + "desc": "", + "dftval": false, + "attrn": "Disabled", + "attrt": "System.Boolean", + "attrv": false }, { - "pt": 1, - "n": "isreadonly", - "disn": "是否只读", - "desc": "", - "dftval": "0", - "compvaltype": 0 + "pt": 2, + "disn": "最大长度", + "desc": "字段输入的最大长度,为0时表示不限制长度", + "dftval": 0, + "attrn": "MaxLength", + "attrt": "System.Int32", + "attrv": 0 }, { "pt": 1, - "n": "tips", "disn": "输入提示", + "desc": "组件输入时的 Placeholder 提示", "dftval": "", - "compvaltype": 0 + "attrn": "Placeholder", + "attrt": "System.String", + "attrv": "" } - ], - "n": "basic", - "disn": "自定义" + ] } ], "childs": [], diff --git a/meta/parts/componentParts/antdesign/csbjlezr.json b/meta/parts/componentParts/antdesign/csbjlezr.json index 19126ab5..a6fb929e 100644 --- a/meta/parts/componentParts/antdesign/csbjlezr.json +++ b/meta/parts/componentParts/antdesign/csbjlezr.json @@ -1 +1 @@ -{"cn":"TreeSelect","ct":1,"frag":{"dt":"AntDesign.TreeSelect\u00602[[System.String], [System.String]], AntDesign","valt":"System.String","attrs":[]},"attrdefgroups":[],"childs":[],"sptds":false,"order":32,"pub":1,"mt":"2025-03-05T15:32:09.8330936Z","id":"jtx10vsi","libid":"antdesign","compid":"csbjlezr","lb":"树选择-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"compid":"csbjlezr","libid":"antdesign","cn":"TreeSelect","ct":1,"frag":{"dt":"AntDesign.TreeSelect\u00602[[System.String], [System.String]], AntDesign","valt":"System.String","attrs":[]},"ds":{},"attrdefgroups":[],"childs":[],"order":32,"pub":1,"mt":"2025-03-23T11:02:57.0710744Z","id":"jtx10vsi","lb":"树选择-A","sptds":true,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/evuqdwzl.json b/meta/parts/componentParts/antdesign/evuqdwzl.json index 0666b9a2..68b169a1 100644 --- a/meta/parts/componentParts/antdesign/evuqdwzl.json +++ b/meta/parts/componentParts/antdesign/evuqdwzl.json @@ -1 +1,42 @@ -{"compid":"evuqdwzl","libid":"antdesign","cn":"Radio","ct":1,"frag":{"dt":"AntDesign.RadioGroup\u0060[System.String], AntDesign","valt":"System.String","attrs":[{"n":"TValue","val":"System.String"}]},"ds":{"dsfrag":{"t":"AntDesign.Radio\u00601[System.String], AntDesign","attrs":[{"n":"Value","val":"null"}]},"dsgt":1},"attrdefgroups":[],"childs":[],"order":13,"pub":1,"mt":"2025-03-23T07:26:31.4273273Z","id":"lkmww2hq","lb":"单选框-A","sptds":true,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}} \ No newline at end of file +{ + "compid": "evuqdwzl", + "libid": "antdesign", + "cn": "Radio", + "ct": 1, + "frag": { + "dt": "AntDesign.RadioGroup\u0060[System.String], AntDesign", + "valt": "System.String", + "attrs": [ + { + "attrn": "TValue", + "attrt": "System.String" + } + ] + }, + "ds": { + "dsfrag": { + "t": "AntDesign.Radio\u00601[System.String], AntDesign", + "attrs": [ + { + "attrn": "Value" + } + ] + }, + "dsgt": 1 + }, + "attrdefgroups": [], + "childs": [], + "order": 13, + "pub": 1, + "mt": "2025-03-23T07:26:31.4273273Z", + "id": "lkmww2hq", + "lb": "单选框-A", + "sptds": true, + "stl": { + "itemh": 85, + "labelw": 180, + "display": "inline", + "pos": "static" + }, + "ev": {} +} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/sonvddk21.json b/meta/parts/componentParts/antdesign/sonvddk21.json index 11ff4228..856cbb9c 100644 --- a/meta/parts/componentParts/antdesign/sonvddk21.json +++ b/meta/parts/componentParts/antdesign/sonvddk21.json @@ -1 +1 @@ -{"cn":"Tree","ct":1,"frag":{"dt":"AntDesign.Tree\u00601[System.String], AntDesign","valt":"System.String","attrs":[]},"attrdefgroups":[],"childs":[],"sptds":false,"order":31,"pub":1,"mt":"2025-03-05T15:32:03.8190473Z","id":"hepj4qcm","libid":"antdesign","compid":"sonvddk21","lb":"树-A","container":false,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{},"ds":{"dst":0}} \ No newline at end of file +{"compid":"sonvddk21","libid":"antdesign","cn":"Tree","ct":1,"frag":{"dt":"AntDesign.Tree\u00601[System.String], AntDesign","valt":"System.String","attrs":[]},"ds":{},"attrdefgroups":[],"childs":[],"order":31,"pub":1,"mt":"2025-03-23T11:02:45.2781898Z","id":"hepj4qcm","lb":"树-A","sptds":true,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}} \ No newline at end of file diff --git a/meta/parts/componentParts/antdesign/yo3v3smv.json b/meta/parts/componentParts/antdesign/yo3v3smv.json index 4fcafeac..f2af0092 100644 --- a/meta/parts/componentParts/antdesign/yo3v3smv.json +++ b/meta/parts/componentParts/antdesign/yo3v3smv.json @@ -1,30 +1 @@ -{ - "cn": "Cascader", - "ct": 1, - "frag": { - "dt": "AntDesign.Cascader, AntDesign", - "valt": "System.String", - "attrs": [] - }, - "attrdefgroups": [], - "childs": [], - "sptds": false, - "order": 0, - "pub": 1, - "mt": "2025-02-24T15:55:11.5516039Z", - "id": "vwbvub2r", - "libid": "antdesign", - "compid": "yo3v3smv", - "lb": "级联选择-A", - "container": false, - "stl": { - "itemh": 85, - "labelw": 180, - "display": "inline", - "pos": "static" - }, - "ev": {}, - "ds": { - "dsgt": 1 - } -} \ No newline at end of file +{"compid":"yo3v3smv","libid":"antdesign","cn":"Cascader","ct":1,"frag":{"dt":"AntDesign.Cascader, AntDesign","valt":"System.String","attrs":[]},"ds":{"dsgt":1},"attrdefgroups":[],"childs":[],"pub":1,"mt":"2025-03-23T11:02:19.7305221Z","id":"vwbvub2r","lb":"级联选择-A","sptds":true,"stl":{"itemh":85,"labelw":180,"display":"inline","pos":"static"},"ev":{}} \ No newline at end of file diff --git a/src/Common/H.LowCode.ComponentBase/LowCodeDynamicComponentBase.cs b/src/Common/H.LowCode.ComponentBase/LowCodeDynamicComponentBase.cs new file mode 100644 index 00000000..02cc618f --- /dev/null +++ b/src/Common/H.LowCode.ComponentBase/LowCodeDynamicComponentBase.cs @@ -0,0 +1,119 @@ +using Microsoft.AspNetCore.Components; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using H.LowCode.MetaSchema; +using System.Reflection; +using Microsoft.AspNetCore.Components.Rendering; +using System.ComponentModel; +using System.Text.Json; + +namespace H.LowCode.ComponentBase; + +public abstract class LowCodeDynamicComponentBase : LowCodeComponentBase +{ + /// + /// 组件属性渲染 + /// + /// + /// + /// + /// + /// + /// + /// + protected virtual void RenderComponentAttributes(RenderTreeBuilder builder, int index, + string componentId, Type componentType, + ComponentAttributeFragmentSchema[] attributes) + { + foreach (var attr in attributes) + { + var propertyInfo = componentType.GetProperty(attr.AttributeName); + if (propertyInfo == null) + continue; + + if (propertyInfo.PropertyType == typeof(RenderFragment)) + { + // 处理 RenderFragment 属性(如 ChildContent) + builder.AddAttribute(index++, attr.AttributeName, (RenderFragment)(childBuilder => + { + childBuilder.AddContent(index++, attr.AttributeValue?.ToString()); + })); + } + else if (propertyInfo.PropertyType == typeof(EventCallback)) + { + // 处理事件回调属性 + var method = GetType().GetMethod(attr.AttributeValue?.ToString(), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); + if (method != null) + { + var delegateType = typeof(EventCallback); + var eventCallback = Delegate.CreateDelegate(delegateType, this, method); + builder.AddAttribute(index++, attr.AttributeName, eventCallback); + } + } + else + { + //设置普通属性 + RenderComponentSimpleAttribute(builder, index, componentId, componentType, attr); + } + } + } + + private void RenderComponentSimpleAttribute(RenderTreeBuilder builder, int index, + string componentId, Type componentType, + ComponentAttributeFragmentSchema attr) + { + //if (prop.Name == "Value" && SupportsValueBinding(componentType)) + //{ + // builder.AddAttribute(index++, "Value", prop.Value); + // builder.AddAttribute(index++, "ValueChanged", EventCallback.Factory.Create(this, (object newValue) => + // { + // prop.Value = newValue; + // ValueChanged.InvokeAsync(newValue); + // })); + //} + + if (attr.AttributeClrType.IsNullOrEmpty()) + throw new NullReferenceException($"componentId={componentId}, {nameof(attr.AttributeClrType)}"); + + var attrValue = ConvertValue(attr.AttributeClrType, attr.AttributeValue); + if (attrValue != null) + { + builder.AddAttribute(index++, attr.AttributeName, attrValue); + } + } + + private static object ConvertValue(string typeName, object value) + { + ArgumentNullException.ThrowIfNull(typeName); + + if (value == null) + { + var type = Type.GetType(typeName); + return type.GetDefaultValue(); + } + + var valueElement = (JsonElement)value; + return typeName switch + { + "System.Int32" => valueElement.GetInt32(), + "System.Boolean" => valueElement.GetBoolean(), + "System.String" => valueElement.GetString(), + "System.Double" => valueElement.GetDouble(), + "System.Decimal" => valueElement.GetDecimal(), + "System.DateTime" => valueElement.GetDateTime(), + "System.Int64" => valueElement.GetInt64(), + _ => throw new NotSupportedException($"Type '{typeName}' is not supported.") + }; + } + + private bool SupportsValueBinding(Type componentType) + { + // Check if the component has a "Value" parameter and a "ValueChanged" parameter + var valueProperty = componentType.GetProperty("Value"); + var valueChangedProperty = componentType.GetProperty("ValueChanged"); + + return valueProperty != null && valueChangedProperty != null; + } +} diff --git a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/DesignEngineDynamicComponentBase.cs b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/DesignEngineDynamicComponentBase.cs index 18bcc188..5708efb2 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/DesignEngineDynamicComponentBase.cs +++ b/src/DesignEngine/H.LowCode.DesignEngine.Abstraction/DesignEngineDynamicComponentBase.cs @@ -7,99 +7,50 @@ using H.LowCode.MetaSchema; using System.Reflection; using H.LowCode.MetaSchema.DesignEngine; using Microsoft.AspNetCore.Components.Rendering; +using H.LowCode.ComponentBase; namespace H.LowCode.DesignEngine.Abstraction; -public abstract class DesignEngineDynamicComponentBase : DesignEngineLowCodeComponentBase +public abstract class DesignEngineDynamicComponentBase : LowCodeDynamicComponentBase { protected virtual RenderFragment RenderComponent( - bool isSupportDataSource, ComponentPartsDataSourceSchema dataSource, + string componentId, bool isSupportDataSource, ComponentPartsDataSourceSchema dataSource, ComponentPartsFragmentSchema componentFragment) { ArgumentNullException.ThrowIfNull(componentFragment); if (string.IsNullOrEmpty(componentFragment.TypeName)) - throw new ArgumentNullException(nameof(componentFragment.TypeName)); + throw new NullReferenceException($"componentId={componentId}, {nameof(componentFragment.TypeName)}"); return builder => { Type componentType = Type.GetType(componentFragment.TypeName, true); if (componentType == null) - throw new NotSupportedException($"{componentFragment.TypeName}"); + throw new NullReferenceException($"componentId={componentId}, type={componentFragment.TypeName}"); int index = 0; builder.OpenComponent(index++, componentType); //渲染属性 - foreach (var prop in componentFragment.Attributes) - { - var propertyInfo = componentType.GetProperty(prop.Name); - if (propertyInfo == null) - continue; - - if (propertyInfo.PropertyType == typeof(RenderFragment)) - { - // 处理 RenderFragment 属性(如 ChildContent) - builder.AddAttribute(index++, prop.Name, (RenderFragment)(childBuilder => - { - childBuilder.AddContent(index++, prop.Value.ToString()); - })); - } - else if (propertyInfo.PropertyType == typeof(EventCallback)) - { - // 处理事件回调属性 - var method = GetType().GetMethod(prop.Value.ToString(), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); - if (method != null) - { - var delegateType = typeof(EventCallback); - var eventCallback = Delegate.CreateDelegate(delegateType, this, method); - builder.AddAttribute(index++, prop.Name, eventCallback); - } - } - else - { - // 设置普通属性 - //if (prop.Name == "Value" && SupportsValueBinding(componentType)) - //{ - // builder.AddAttribute(index++, "Value", prop.Value); - // builder.AddAttribute(index++, "ValueChanged", EventCallback.Factory.Create(this, (object newValue) => - // { - // prop.Value = newValue; - // ValueChanged.InvokeAsync(newValue); - // })); - //} - //else - if (prop.ValueType == ComponentValueTypeEnum.Integer) - builder.AddAttribute(index++, prop.Name, prop.IntValue); - else if (prop.ValueType == ComponentValueTypeEnum.String) - { - //if ("{self}".Equals(prop.StringValue, StringComparison.OrdinalIgnoreCase)) - // builder.AddAttribute(index++, prop.Name, component); - //else - builder.AddAttribute(index++, prop.Name, prop.StringValue); - } - else - { - throw new NotSupportedException($"{prop.ValueType}"); - } - } - } + RenderComponentAttributes(builder, index, componentId, componentType, + componentFragment.Attributes); //渲染 ChildContent if (isSupportDataSource) { - RenderDataSource(dataSource, builder, index); + RenderDataSource(componentId, dataSource, builder, index); } else { - RenderChildrens(componentFragment, builder, index); + RenderChildrens(componentId, componentFragment, builder, index); } builder.CloseComponent(); }; } - private void RenderDataSource(ComponentPartsDataSourceSchema dataSource, + private void RenderDataSource(string componentId, + ComponentPartsDataSourceSchema dataSource, RenderTreeBuilder builder, int index) { if (dataSource == null) @@ -107,11 +58,10 @@ public abstract class DesignEngineDynamicComponentBase : DesignEngineLowCodeComp if (dataSource.DataSourceGroupType == ComponentDataSourceGroupTypeEnum.Option) { - switch (dataSource.DataSourceType) { case ComponentDataSourceTypeEnum.Fiexd: - RenderOptionDataSource(dataSource, builder, index); + RenderOptionDataSource(componentId, dataSource, builder, index); break; case ComponentDataSourceTypeEnum.SQL: break; @@ -123,60 +73,59 @@ public abstract class DesignEngineDynamicComponentBase : DesignEngineLowCodeComp } } - private void RenderOptionDataSource(ComponentPartsDataSourceSchema dataSource, + private void RenderOptionDataSource(string componentId, + ComponentPartsDataSourceSchema dataSource, RenderTreeBuilder builder, int index) { - if (dataSource.FiexdOptionDataSource != null && dataSource.FiexdOptionDataSource.Count > 0) + if (dataSource.FiexdOptionDataSource == null + || dataSource.FiexdOptionDataSource.Count == 0) + return; + + builder.AddAttribute(index++, "ChildContent", (RenderFragment)(childBuilder => { - builder.AddAttribute(index++, "ChildContent", (RenderFragment)(childBuilder => - { - if (string.IsNullOrEmpty(dataSource.DataSourceFragment.TypeName)) - throw new ArgumentNullException(nameof(dataSource.DataSourceFragment.TypeName)); + if (string.IsNullOrEmpty(dataSource.DataSourceFragment.TypeName)) + throw new NullReferenceException($"componentId={componentId}, {nameof(dataSource.DataSourceFragment.TypeName)}"); - Type childComponentType = Type.GetType(dataSource.DataSourceFragment.TypeName, true); - foreach (var option in dataSource.FiexdOptionDataSource) - { - childBuilder.OpenComponent(index++, childComponentType); - foreach (var fragAttr in dataSource.DataSourceFragment.Attributes) - { - childBuilder.AddAttribute(index++, fragAttr.Name, option.Value); - } - - //childBuilder.AddContent(index++, option.Label); - childBuilder.AddAttribute(index++, "ChildContent", (RenderFragment)((cb) => - { - cb.AddContent(index++, option.Label); - })); - - childBuilder.CloseComponent(); - } - })); - } - } + Type childComponentType = Type.GetType(dataSource.DataSourceFragment.TypeName, true); + if (childComponentType == null) + throw new NullReferenceException($"componentId={componentId}, type={dataSource.DataSourceFragment.TypeName}"); - private void RenderChildrens(ComponentPartsFragmentSchema componentFragment, - RenderTreeBuilder builder, int index) - { - var childrens = componentFragment.Childrens; - var hasChildren = childrens != null && childrens.Length > 0; - if (hasChildren) - { - builder.AddAttribute(index++, "ChildContent", (RenderFragment)(childBuilder => + foreach (var option in dataSource.FiexdOptionDataSource) { - foreach (var child in componentFragment.Childrens) + childBuilder.OpenComponent(index++, childComponentType); + foreach (var fragAttr in dataSource.DataSourceFragment.Attributes) { - childBuilder.AddContent(index++, RenderComponent(false, null, child)); + childBuilder.AddAttribute(index++, fragAttr.AttributeName, option.Value); } - })); - } + + //childBuilder.AddContent(index++, option.Label); + childBuilder.AddAttribute(index++, "ChildContent", (RenderFragment)((cb) => + { + cb.AddContent(index++, option.Label); + })); + + childBuilder.CloseComponent(); + } + })); } - private bool SupportsValueBinding(Type componentType) + private void RenderChildrens(string componentId, + ComponentPartsFragmentSchema componentFragment, + RenderTreeBuilder builder, int index) { - // Check if the component has a "Value" parameter and a "ValueChanged" parameter - var valueProperty = componentType.GetProperty("Value"); - var valueChangedProperty = componentType.GetProperty("ValueChanged"); + var childrens = componentFragment?.Childrens; + if (childrens == null) + return; + + if (childrens.Length == 0) + return; - return valueProperty != null && valueChangedProperty != null; + builder.AddAttribute(index++, "ChildContent", (RenderFragment)(childBuilder => + { + foreach (var child in componentFragment.Childrens) + { + childBuilder.AddContent(index++, RenderComponent(componentId, false, null, child)); + } + })); } } diff --git a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/ComponentItem.razor b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/ComponentItem.razor index fb94ce64..2034015b 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/ComponentItem.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/DesignPanel/ComponentItem.razor @@ -47,6 +47,14 @@ if (string.IsNullOrEmpty(Component.Fragment.TypeName)) Component.Fragment.TypeName = Component.Fragment.DefaultTypeName; - _renderFragment = RenderComponent(Component.IsSupportDataSource, Component.DataSource, Component.Fragment); + try + { + _renderFragment = RenderComponent(Component.Id, Component.IsSupportDataSource, + Component.DataSource, Component.Fragment); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } } } \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/DataSourcePropertyItem.razor b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/DataSourcePropertyItem.razor index 442b81b0..796b4569 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/DataSourcePropertyItem.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/DataSourcePropertyItem.razor @@ -13,9 +13,13 @@ } else if (Component.DataSource.DataSourceGroupType == ComponentDataSourceGroupTypeEnum.Option) { - + } + else if (Component.DataSource.DataSourceGroupType == ComponentDataSourceGroupTypeEnum.Option) + { + } else{
@@ -24,52 +28,95 @@ } } - + + + + + @code { [Parameter] public ComponentPartsSchema Component { get; set; } - private bool _dataSourceOptionVisible; + private bool _optionDataSourceVisible; + private bool _treeDataSourceVisible; protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); } - private void ShowDataSourceOptionModelAsync() + #region OptionDataSource + private void ShowOptionDataSourceModelAsync() + { + _optionDataSourceVisible = true; + } + + private async Task OnOptionDataSourceConfirmAsync(MouseEventArgs e) + { + var validate = true; + if (validate) + { + var isSuccess = await SaveOptionDataSourceAsync(); + if (isSuccess) + { + _optionDataSourceVisible = false; + await Message.Success("保存成功!"); + } + else + { + _optionDataSourceVisible = true; + await Message.Error("保存失败"); + } + } + else + { + _optionDataSourceVisible = true; + } + } + + private async Task SaveOptionDataSourceAsync() + { + return await Task.FromResult(true); + } + #endregion + + #region TreeDataSource + private void ShowTreeDataSourceModelAsync() { - _dataSourceOptionVisible = true; + _treeDataSourceVisible = true; } - private async Task OnConfirmAsync(MouseEventArgs e) + private async Task OnTreeDataSourceConfirmAsync(MouseEventArgs e) { var validate = true; if (validate) { - var isSuccess = await SaveComponentDataSourceAsync(); + var isSuccess = await SaveTreeDataSourceAsync(); if (isSuccess) { - _dataSourceOptionVisible = false; + _treeDataSourceVisible = false; await Message.Success("保存成功!"); } else { - _dataSourceOptionVisible = true; + _treeDataSourceVisible = true; await Message.Error("保存失败"); } } else { - _dataSourceOptionVisible = true; + _treeDataSourceVisible = true; } } - private async Task SaveComponentDataSourceAsync() + private async Task SaveTreeDataSourceAsync() { return await Task.FromResult(true); } + #endregion } diff --git a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/ExtensionPropertyItem.razor b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/ExtensionPropertyItem.razor index 4debfb82..43ba848e 100644 --- a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/ExtensionPropertyItem.razor +++ b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/ExtensionPropertyItem.razor @@ -1,58 +1,60 @@ @namespace H.LowCode.DesignEngine @inherits DesignEngineLowCodeComponentBase -@foreach (var group in Component.AttributeDefineGroups) -{ - if(!string.IsNullOrEmpty(group.DisplayName)){ -
- @group.DisplayName -
- } - - foreach (var attrDefine in group.AttributeDefines) +@if(Component?.AttributeDefineGroups != null){ + foreach (var group in Component.AttributeDefineGroups) { -
- + if(!string.IsNullOrEmpty(group.GroupName)){ +
+ @group.GroupName +
+ } - @if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Text) - { - - } - else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Text_Int) - { - - } - else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Radio) - { + foreach (var attrDefine in group.AttributeDefines) + { +
+ - } - else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Checkbox) - { - //TODO - @* *@ - } - else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Select) - { + @if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Input) + { + + } + else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.InputNumber) + { + + } + else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Radio) + { - } - else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Switch) - { + } + else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Checkbox) + { + //TODO + @* *@ + } + else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Select) + { - } - else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Date) - { + } + else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Switch) + { + + } + else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Date) + { - } - else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Textarea) - { + } + else if (attrDefine.AttributeItemType == ComponentAttributeItemTypeEnum.Textarea) + { - } + } - @if (!string.IsNullOrEmpty(attrDefine.Description)) - { -
@attrDefine.Description
- } -
+ @if (!string.IsNullOrEmpty(attrDefine.Description)) + { +
@attrDefine.Description
+ } +
+ } } } @@ -72,7 +74,7 @@ { t.AttributeDefines.ForEach(p => { - if (string.Equals(p.Name, key)) + if (string.Equals(p.AttributeName, key)) attrDefine = p; }); }); @@ -87,7 +89,7 @@ } - private void OnIntPropertyChange(int? value) + private void OnIntPropertyChange(int value) { } diff --git a/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/OptionDataSource/TreeDataSourceSetting.razor b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/OptionDataSource/TreeDataSourceSetting.razor new file mode 100644 index 00000000..cbba5016 --- /dev/null +++ b/src/DesignEngine/H.LowCode.DesignEngine/SettingPanel/PropertySettingItems/OptionDataSource/TreeDataSourceSetting.razor @@ -0,0 +1,47 @@ +@namespace H.LowCode.DesignEngine +@inherits DesignEngineLowCodeComponentBase + +@if (DataSource != null) +{ +
+ + + 固定值 + SQL + API + +
+ + if (DataSource.DataSourceType == ComponentDataSourceTypeEnum.Fiexd) + { + + } + else if (DataSource.DataSourceType == ComponentDataSourceTypeEnum.SQL) + { + + } + else if (DataSource.DataSourceType == ComponentDataSourceTypeEnum.API) + { + + } + else + { +
+ +
+ } +} + +@code { + [Parameter] + public ComponentPartsDataSourceSchema DataSource { get; set; } + + [Parameter] + public EventCallback DataSourceChanged { get; set; } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + } +} diff --git a/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentItem.razor b/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentItem.razor index 78bb3c84..c6a1f508 100644 --- a/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentItem.razor +++ b/src/DesignEngine/H.LowCode.PartsDesignEngine/DesignPanel/ComponentItem.razor @@ -36,6 +36,7 @@ else if (string.IsNullOrEmpty(Component.Name)) Component.Name = $"{Component.Name}_{Random.Shared.Next(100, 999)}"; - _renderFragment = RenderComponent(Component.IsSupportDataSource, Component.DataSource, Component.Fragment); + _renderFragment = RenderComponent(Component.Id, Component.IsSupportDataSource, + Component.DataSource, Component.Fragment); } } \ No newline at end of file diff --git a/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraries/ComponentPartsList.razor b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraries/ComponentPartsList.razor index 26b44c82..c96634d3 100644 --- a/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraries/ComponentPartsList.razor +++ b/src/DesignEngine/H.LowCode.Workbench/Pages/MyParts/ComponentLibraries/ComponentPartsList.razor @@ -68,49 +68,50 @@ HidePagination="true" Style="height:100%;">
+ ValidateOnChange="true" LabelColSpan="8" WrapperColSpan="16">
- + - + - + - + - + 原子组件 组合组件 - + @if (context.IsContainer == false) { - + @if (context.IsSupportDataSource) { - - - - - + + } } - + 组件 RenderFragment: + + + + - + 待发布 已发布 @@ -118,10 +119,17 @@ Width="1200">
- 组件 RenderFragment: - - + 组件属性: + + + @if (context.IsContainer == false && context.IsSupportDataSource) + { + 数据源: + + + + }
@@ -145,6 +153,7 @@ Width="600" MaxBodyHeight="700"> private Form _form; private string _textComponentFragment; private string _textDataSource; + private string _textAttributeDefineGroups; private IList _componentPartsList; private ComponentPartsSchema _componentPartsSchema = new ComponentPartsSchema(); @@ -173,6 +182,7 @@ Width="600" MaxBodyHeight="700"> var component = await ComponentPartsAppService.GetByIdAsync(LibraryId, componentPartsId); _textComponentFragment = component.Fragment.ToJson(writeIndented: true); _textDataSource = component.DataSource?.ToJson(writeIndented: true); + _textAttributeDefineGroups = component.AttributeDefineGroups?.ToJson(writeIndented: true); return component; } @@ -225,6 +235,7 @@ Width="600" MaxBodyHeight="700"> { _componentPartsSchema.Fragment = _textComponentFragment.FromJson(); _componentPartsSchema.DataSource = _textDataSource.FromJson(); + _componentPartsSchema.AttributeDefineGroups = _textAttributeDefineGroups.FromJson(); var isSuccess = await SaveComponentPartsSchemaAsync(); if (isSuccess) { @@ -292,7 +303,7 @@ Width="600" MaxBodyHeight="700"> ComponentAttributeFragmentSchema newParameter = new(); //添加编辑缓存 - _parameterEditCache[newParameter.Name] = (true, newParameter); + _parameterEditCache[newParameter.AttributeName] = (true, newParameter); _componentPartsSchema.Fragment.Attributes.Append(newParameter); @@ -302,7 +313,7 @@ Width="600" MaxBodyHeight="700"> private async Task SaveParameterAsync(string name) { await Task.Delay(1); - var index = _componentPartsSchema.Fragment.Attributes.FindIndex(item => item.Name == name); + var index = _componentPartsSchema.Fragment.Attributes.FindIndex(item => item.AttributeName == name); _componentPartsSchema.Fragment.Attributes[index] = _parameterEditCache[name].parameter; // apply the copy to data source _parameterEditCache[name] = (false, _componentPartsSchema.Fragment.Attributes[index]); // don't affect rows in editing @@ -327,7 +338,7 @@ Width="600" MaxBodyHeight="700"> private async Task ParameterCancelEditAsync(string name) { await Task.Delay(1); - var data = _componentPartsSchema.Fragment.Attributes.FirstOrDefault(item => item.Name == name); + var data = _componentPartsSchema.Fragment.Attributes.FirstOrDefault(item => item.AttributeName == name); _parameterEditCache[name] = (false, data); // recovery StateHasChanged(); diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index f0c89cce..eeb1fc7d 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -60,7 +60,7 @@ - + diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor index e9edf8dd..98092b21 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/ComponentRender.razor @@ -56,6 +56,7 @@ else if (Component == null) throw new NullReferenceException(nameof(Component)); - _renderFragment = RenderComponent(Component.IsSupportDataSource, Component.DataSource, Component.Fragment); + _renderFragment = RenderComponent(Component.Id, Component.IsSupportDataSource, + Component.DataSource, Component.Fragment); } } \ No newline at end of file diff --git a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor index 985e4863..5a10a2d0 100644 --- a/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor +++ b/src/Parts/H.LowCode.Themes.AntBlazor/ComponentRender/FormComponentRender.razor @@ -50,6 +50,7 @@ else if (Component == null) throw new NullReferenceException(nameof(Component)); - _renderFragment = RenderComponent(Component.IsSupportDataSource, Component.DataSource, Component.Fragment); + _renderFragment = RenderComponent(Component.Id, Component.IsSupportDataSource, + Component.DataSource, Component.Fragment); } } \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs index cd6d1805..8135fb1a 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/ComponentPartsSchema.cs @@ -45,7 +45,7 @@ public class ComponentPartsSchema : ComponentSchemaBase /// Attribute定义分组 /// [JsonPropertyName("attrdefgroups")] - public IList AttributeDefineGroups { get; set; } = []; + public ComponentPartsAttributeDefineGroupSchema[] AttributeDefineGroups { get; set; } = []; /// /// diff --git a/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentAttributeItemTypeEnum.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/Enums/ComponentAttributeItemTypeEnum.cs similarity index 42% rename from src/Protocol/H.LowCode.MetaSchema/Enums/ComponentAttributeItemTypeEnum.cs rename to src/Protocol/H.LowCode.MetaSchema.DesignEngine/Enums/ComponentAttributeItemTypeEnum.cs index 41b14921..427335ac 100644 --- a/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentAttributeItemTypeEnum.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/Enums/ComponentAttributeItemTypeEnum.cs @@ -4,19 +4,19 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace H.LowCode.MetaSchema; +namespace H.LowCode.MetaSchema.DesignEngine; public enum ComponentAttributeItemTypeEnum { - None, - Text, - Text_Int, - Radio, - Checkbox, - Select, - Switch, - Date, - Textarea, - Options, - Table + None = 0, + Input = 1, + InputNumber = 2, + Radio = 3, + Checkbox = 4, + Select = 5, + Switch = 6, + Date = 7, + Textarea = 8, + Options = 9, + Table = 10 } diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineGroupSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineGroupSchema.cs index 42648c06..9f4e8cce 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineGroupSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineGroupSchema.cs @@ -10,12 +10,9 @@ namespace H.LowCode.MetaSchema.DesignEngine; public class ComponentPartsAttributeDefineGroupSchema { - [JsonPropertyName("n")] - public string Name { get; set; } + [JsonPropertyName("gn")] + public string GroupName { get; set; } - [JsonPropertyName("disn")] - public string DisplayName { get; set; } - - [JsonPropertyName("attrs")] - public IList AttributeDefines { get; set; } = []; + [JsonPropertyName("attrdefs")] + public ComponentPartsAttributeDefineSchema[] AttributeDefines { get; set; } = []; } diff --git a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineSchema.cs b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineSchema.cs index 34cb4bfe..e70e7eae 100644 --- a/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.DesignEngine/PropertySchemas/ComponentPartsAttributeDefineSchema.cs @@ -8,11 +8,8 @@ using System.Threading.Tasks; namespace H.LowCode.MetaSchema.DesignEngine; -public class ComponentPartsAttributeDefineSchema +public class ComponentPartsAttributeDefineSchema : ComponentAttributeDefineSchemaBase { - [JsonPropertyName("n")] - public string Name { get; set; } - [JsonPropertyName("disn")] public string DisplayName { get; set; } @@ -22,12 +19,6 @@ public class ComponentPartsAttributeDefineSchema [JsonPropertyName("pt")] public ComponentAttributeItemTypeEnum AttributeItemType { get; set; } - /// - /// 组件值类型 - /// - [JsonPropertyName("compvaltype")] - public ComponentValueTypeEnum ComponentValueType { get; set; } - [JsonPropertyName("required")] public bool IsRequired { get; set; } @@ -37,15 +28,54 @@ public class ComponentPartsAttributeDefineSchema [JsonPropertyName("dftval")] public object DefaultValue { get; set; } - [JsonPropertyName("strval")] - public string StringValue { get; set; } + [JsonPropertyName("ops")] + public Dictionary Options { get; } - [JsonPropertyName("boolval")] - public bool? BoolValue { get; set; } + [JsonIgnore] + public string StringValue + { + get + { + return AttributeValue?.ToString(); + } + set + { + if (value == null) + return; - [JsonPropertyName("intval")] - public int? IntValue { get; set; } + AttributeValue = value; + } + } - [JsonPropertyName("ops")] - public Dictionary Options { get; } + [JsonIgnore] + public int IntValue + { + get + { + if (AttributeValue == null) + return default; + + return (int)AttributeValue; + } + set + { + AttributeValue = value; + } + } + + [JsonIgnore] + public bool BoolValue + { + get + { + if (AttributeValue == null) + return default; + + return (bool)AttributeValue; + } + set + { + AttributeValue = value; + } + } } diff --git a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/ComponentSchema.cs b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/ComponentSchema.cs index b2c28cc7..d72c738b 100644 --- a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/ComponentSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/ComponentSchema.cs @@ -1,5 +1,6 @@ using H.Extensions.System; using H.Util.Ids; +using System.ComponentModel; using System.Text.Json.Serialization; namespace H.LowCode.MetaSchema.RenderEngine; @@ -16,8 +17,56 @@ public class ComponentSchema : ComponentSchemaBase public ComponentDataSourceSchema DataSource { get; set; } = new(); /// - /// + /// Attribute定义分组 + /// + /// 此数据通过 ConvertAttributeDefineToFragmentAttribute + /// 转换为 Fragment 中的 Attribute 用于组件渲染 + [JsonPropertyName("attrdefgroups")] + public ComponentAttributeDefineGroupSchema[] AttributeDefineGroups { get; set; } + + /// + /// 将组件自定义属性合并到 Fragment 中 /// [JsonPropertyName("childs")] public ComponentSchema[] Childrens { get; set; } + + public void MergeAttributeDefineToFragment() + { + if (this?.AttributeDefineGroups == null + || this.AttributeDefineGroups.Length == 0) + return; + + var attrList = new List(); + if (this.Fragment?.Attributes != null) + { + attrList = this.Fragment.Attributes.ToList(); + } + bool isMerge = false; + + foreach (var attrDefineGroup in this.AttributeDefineGroups) + { + if (attrDefineGroup?.AttributeDefines == null + || attrDefineGroup.AttributeDefines.Length == 0) + continue; + + foreach (var attrDefine in attrDefineGroup.AttributeDefines) + { + if (attrDefine == null) + continue; + + var attr = new ComponentAttributeFragmentSchema() + { + AttributeName = attrDefine.AttributeName, + AttributeClrType = attrDefine.AttributeClrType, + AttributeValue = attrDefine.AttributeValue + }; + attrList.Add(attr); + + isMerge = true; + } + } + + if (isMerge) + this.Fragment.Attributes = attrList.ToArray(); + } } \ No newline at end of file diff --git a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentAttributeDefineGroupSchema.cs b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentAttributeDefineGroupSchema.cs new file mode 100644 index 00000000..aa83d6b1 --- /dev/null +++ b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentAttributeDefineGroupSchema.cs @@ -0,0 +1,15 @@ +using H.LowCode.MetaSchema; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace H.LowCode.MetaSchema.RenderEngine; + +public class ComponentAttributeDefineGroupSchema +{ + [JsonPropertyName("attrdefs")] + public ComponentAttributeDefineSchema[] AttributeDefines { get; set; } +} diff --git a/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentAttributeDefineSchema.cs b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentAttributeDefineSchema.cs new file mode 100644 index 00000000..5b8cfff0 --- /dev/null +++ b/src/Protocol/H.LowCode.MetaSchema.RenderEngine/PropertySchemas/ComponentAttributeDefineSchema.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace H.LowCode.MetaSchema.RenderEngine; + +public class ComponentAttributeDefineSchema : ComponentAttributeDefineSchemaBase +{ + +} diff --git a/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentDataSourceGroupTypeEnum.cs b/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentDataSourceGroupTypeEnum.cs index 957f2df6..ec51f749 100644 --- a/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentDataSourceGroupTypeEnum.cs +++ b/src/Protocol/H.LowCode.MetaSchema/Enums/ComponentDataSourceGroupTypeEnum.cs @@ -12,5 +12,6 @@ namespace H.LowCode.MetaSchema; public enum ComponentDataSourceGroupTypeEnum { General = 0, - Option = 1 + Option = 1, + Tree } diff --git a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentAttributeDefineSchemaBase.cs b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentAttributeDefineSchemaBase.cs new file mode 100644 index 00000000..c4a58225 --- /dev/null +++ b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentAttributeDefineSchemaBase.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace H.LowCode.MetaSchema; + +public abstract class ComponentAttributeDefineSchemaBase +{ + [JsonPropertyName("attrn")] + public string AttributeName { get; set; } + + /// + /// 组件属性值 clr 类型 + /// + [JsonPropertyName("attrt")] + public string AttributeClrType { get; set; } + + [JsonPropertyName("attrv")] + public object AttributeValue { get; set; } +} diff --git a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchemaBase.cs b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchemaBase.cs index 0cdb2dab..0dc48059 100644 --- a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchemaBase.cs +++ b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/ComponentFragmentSchemaBase.cs @@ -26,34 +26,21 @@ public abstract class ComponentFragmentSchemaBase return null; Type type = Type.GetType(ValueType); - // 值类型 - if (type.IsValueType && Nullable.GetUnderlyingType(type) == null) - { - return Activator.CreateInstance(type); - } - - // 引用类型 - return null; + return type.GetDefaultValue(); } } public record ComponentAttributeFragmentSchema { - [JsonPropertyName("n")] - public string Name { get; set; } + [JsonPropertyName("attrn")] + public string AttributeName { get; set; } - [JsonPropertyName("val")] - public object Value { get; set; } - - [JsonPropertyName("valt")] - public ComponentValueTypeEnum ValueType { get; set; } - - [JsonPropertyName("intv")] - public int IntValue { get; set; } - - [JsonPropertyName("strv")] - public string StringValue { get; set; } + /// + /// 组件属性值 clr 类型 + /// + [JsonPropertyName("attrt")] + public string AttributeClrType { get; set; } - [JsonPropertyName("strvs")] - public List StringValues { get; set; } + [JsonPropertyName("attrv")] + public object AttributeValue { get; set; } } diff --git a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/PropertyItemSchema.cs b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/PropertyItemSchema.cs index d0c022b7..45e8b593 100644 --- a/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/PropertyItemSchema.cs +++ b/src/Protocol/H.LowCode.MetaSchema/PropertySchemas/PropertyItemSchema.cs @@ -27,9 +27,9 @@ public class PropertyItemSchema public IDictionary Options { get; set; } - /// - /// 设置项类型 - /// - [JsonPropertyName("itemtype")] - public ComponentAttributeItemTypeEnum SettingItemType { get; set; } + ///// + ///// 设置项类型 + ///// + //[JsonPropertyName("itemtype")] + //public ComponentAttributeItemTypeEnum SettingItemType { get; set; } } diff --git a/src/Protocol/H.LowCode.MetaSchema/Utils/ObjectMerger.cs b/src/Protocol/H.LowCode.MetaSchema/Utils/ObjectMerger.cs index 14167d00..6577d6bb 100644 --- a/src/Protocol/H.LowCode.MetaSchema/Utils/ObjectMerger.cs +++ b/src/Protocol/H.LowCode.MetaSchema/Utils/ObjectMerger.cs @@ -58,19 +58,8 @@ public static class ObjectMerger private static bool IsDefaultValue(Type type, object value) { - // 对于值类型,比较其默认值 - if (type.IsValueType && Nullable.GetUnderlyingType(type) == null) - { - return Equals(value, Activator.CreateInstance(type)); - } - - // 对于引用类型,null 或者空字符串视为默认值 - if (value == null || (type == typeof(string) && string.IsNullOrEmpty((string)value))) - { - return true; - } - - return false; + var defaultValue = type.GetDefaultValue(); + return value == defaultValue; } private static bool IsCollectionType(Type type) diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs index 514c1c44..39c13a7f 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Abstraction/RenderEngineDynamicComponentBase.cs @@ -7,99 +7,56 @@ using H.LowCode.MetaSchema; using System.Reflection; using H.LowCode.MetaSchema.RenderEngine; using Microsoft.AspNetCore.Components.Rendering; +using H.LowCode.ComponentBase; +using AntDesign; +using System.ComponentModel; namespace H.LowCode.RenderEngine.Abstraction; -public abstract class RenderEngineDynamicComponentBase : RenderEngineLowCodeComponentBase +public abstract class RenderEngineDynamicComponentBase : LowCodeDynamicComponentBase { + [Inject] + protected new IMessageService Message { get; set; } + protected virtual RenderFragment RenderComponent( - bool isSupportDataSource, ComponentDataSourceSchema dataSource, + string componentId, bool isSupportDataSource, ComponentDataSourceSchema dataSource, ComponentFragmentSchema componentFragment) { ArgumentNullException.ThrowIfNull(componentFragment); if (string.IsNullOrEmpty(componentFragment.TypeName)) - throw new ArgumentNullException(nameof(componentFragment.TypeName)); + throw new NullReferenceException($"componentId={componentId}, {nameof(componentFragment.TypeName)}"); return builder => { Type componentType = Type.GetType(componentFragment.TypeName, true); if (componentType == null) - throw new NotSupportedException($"{componentFragment.TypeName}"); + throw new NullReferenceException($"componentId={componentId}, type={componentFragment.TypeName}"); int index = 0; builder.OpenComponent(index++, componentType); //渲染属性 - foreach (var prop in componentFragment.Attributes) - { - var propertyInfo = componentType.GetProperty(prop.Name); - if (propertyInfo == null) - continue; + RenderComponentAttributes(builder, index, componentId, componentType, + componentFragment.Attributes); - if (propertyInfo.PropertyType == typeof(RenderFragment)) - { - // 处理 RenderFragment 属性(如 ChildContent) - builder.AddAttribute(index++, prop.Name, (RenderFragment)(childBuilder => - { - childBuilder.AddContent(index++, prop.Value.ToString()); - })); - } - else if (propertyInfo.PropertyType == typeof(EventCallback)) - { - // 处理事件回调属性 - var method = GetType().GetMethod(prop.Value.ToString(), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); - if (method != null) - { - var delegateType = typeof(EventCallback); - var eventCallback = Delegate.CreateDelegate(delegateType, this, method); - builder.AddAttribute(index++, prop.Name, eventCallback); - } - } - else - { - // 设置普通属性 - //if (prop.Name == "Value" && SupportsValueBinding(componentType)) - //{ - // builder.AddAttribute(index++, "Value", prop.Value); - // builder.AddAttribute(index++, "ValueChanged", EventCallback.Factory.Create(this, (object newValue) => - // { - // prop.Value = newValue; - // ValueChanged.InvokeAsync(newValue); - // })); - //} - //else - if (prop.ValueType == ComponentValueTypeEnum.Integer) - builder.AddAttribute(index++, prop.Name, prop.IntValue); - else if (prop.ValueType == ComponentValueTypeEnum.String) - { - //if ("{self}".Equals(prop.StringValue, StringComparison.OrdinalIgnoreCase)) - // builder.AddAttribute(index++, prop.Name, component); - //else - builder.AddAttribute(index++, prop.Name, prop.StringValue); - } - else - { - throw new NotSupportedException($"{prop.ValueType}"); - } - } - } - - //渲染 ChildContent if (isSupportDataSource) { - RenderDataSource(dataSource, builder, index); + //渲染数据源 + RenderDataSource(componentId, dataSource, builder, index); } else { - RenderChildrens(componentFragment, builder, index); + //渲染 ChildContent + RenderChildrens(componentId, componentFragment, builder, index); } builder.CloseComponent(); }; } - private void RenderDataSource(ComponentDataSourceSchema dataSource, + private void RenderDataSource(string componentId, + ComponentDataSourceSchema dataSource, RenderTreeBuilder builder, int index) { if (dataSource == null) @@ -107,11 +64,10 @@ public abstract class RenderEngineDynamicComponentBase : RenderEngineLowCodeComp if (dataSource.DataSourceGroupType == ComponentDataSourceGroupTypeEnum.Option) { - switch (dataSource.DataSourceType) { case ComponentDataSourceTypeEnum.Fiexd: - RenderOptionDataSource(dataSource, builder, index); + RenderOptionDataSource(componentId, dataSource, builder, index); break; case ComponentDataSourceTypeEnum.SQL: break; @@ -123,60 +79,58 @@ public abstract class RenderEngineDynamicComponentBase : RenderEngineLowCodeComp } } - private void RenderOptionDataSource(ComponentDataSourceSchema dataSource, + private void RenderOptionDataSource(string componentId, + ComponentDataSourceSchema dataSource, RenderTreeBuilder builder, int index) { - if (dataSource.FiexdOptionDataSource != null && dataSource.FiexdOptionDataSource.Count > 0) + if (dataSource.FiexdOptionDataSource == null + || dataSource.FiexdOptionDataSource.Count == 0) + return; + + builder.AddAttribute(index++, "ChildContent", (RenderFragment)(childBuilder => { - builder.AddAttribute(index++, "ChildContent", (RenderFragment)(childBuilder => - { - if (string.IsNullOrEmpty(dataSource.DataSourceFragment.TypeName)) - throw new ArgumentNullException(nameof(dataSource.DataSourceFragment.TypeName)); + if (string.IsNullOrEmpty(dataSource.DataSourceFragment.TypeName)) + throw new NullReferenceException($"componentId={componentId}, {nameof(dataSource.DataSourceFragment.TypeName)}"); - Type childComponentType = Type.GetType(dataSource.DataSourceFragment.TypeName, true); - foreach (var option in dataSource.FiexdOptionDataSource) - { - childBuilder.OpenComponent(index++, childComponentType); - foreach(var fragAttr in dataSource.DataSourceFragment.Attributes) - { - childBuilder.AddAttribute(index++, fragAttr.Name, option.Value); - } - - //childBuilder.AddContent(index++, option.Label); - childBuilder.AddAttribute(index++, "ChildContent", (RenderFragment)((cb) => - { - cb.AddContent(index++, option.Label); - })); - - childBuilder.CloseComponent(); - } - })); - } - } + Type childComponentType = Type.GetType(dataSource.DataSourceFragment.TypeName, true); + if (childComponentType == null) + throw new NullReferenceException($"componentId={componentId}, type={dataSource.DataSourceFragment.TypeName}"); - private void RenderChildrens(ComponentFragmentSchema componentFragment, - RenderTreeBuilder builder, int index) - { - var childrens = componentFragment.Childrens; - var hasChildren = childrens != null && childrens.Length > 0; - if (hasChildren) - { - builder.AddAttribute(index++, "ChildContent", (RenderFragment)(childBuilder => + foreach (var option in dataSource.FiexdOptionDataSource) { - foreach (var child in componentFragment.Childrens) + childBuilder.OpenComponent(index++, childComponentType); + foreach (var fragAttr in dataSource.DataSourceFragment.Attributes) { - childBuilder.AddContent(index++, RenderComponent(false, null, child)); + childBuilder.AddAttribute(index++, fragAttr.AttributeName, option.Value); } - })); - } + + //childBuilder.AddContent(index++, option.Label); + childBuilder.AddAttribute(index++, "ChildContent", (RenderFragment)((cb) => + { + cb.AddContent(index++, option.Label); + })); + + childBuilder.CloseComponent(); + } + })); } - private bool SupportsValueBinding(Type componentType) + private void RenderChildrens(string componentId, ComponentFragmentSchema componentFragment, + RenderTreeBuilder builder, int index) { - // Check if the component has a "Value" parameter and a "ValueChanged" parameter - var valueProperty = componentType.GetProperty("Value"); - var valueChangedProperty = componentType.GetProperty("ValueChanged"); + var childrens = componentFragment?.Childrens; + if (childrens == null) + return; + + if (childrens.Length == 0) + return; - return valueProperty != null && valueChangedProperty != null; + builder.AddAttribute(index++, "ChildContent", (RenderFragment)(childBuilder => + { + foreach (var child in componentFragment.Childrens) + { + childBuilder.AddContent(index++, RenderComponent(componentId, false, null, child)); + } + })); } } diff --git a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/PageDomainService.cs b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/PageDomainService.cs index f37aefeb..782c8fb8 100644 --- a/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/PageDomainService.cs +++ b/src/RenderEngine/H.LowCode.RenderEngine.Domain/MetaDomainServices/PageDomainService.cs @@ -15,6 +15,19 @@ public class PageDomainService : DomainService, IPageDomainService async Task IPageDomainService.GetAsync(string appId, string pageId) { - return await _repository.GetAsync(appId, pageId); + var pageSchema = await _repository.GetAsync(appId, pageId); + + if (pageSchema?.Components != null) + { + foreach (var component in pageSchema.Components) + { + if (component == null) + continue; + + component.MergeAttributeDefineToFragment(); + } + } + + return pageSchema; } } \ No newline at end of file -- Gitee