Route -> Component Type sütunu eklendi.
Dynamic component type
This commit is contained in:
parent
daf0d51960
commit
9875ba3041
13 changed files with 162 additions and 51 deletions
|
|
@ -7,6 +7,7 @@ public class RouteDto : EntityDto<Guid>
|
||||||
{
|
{
|
||||||
public string Key { get; set; }
|
public string Key { get; set; }
|
||||||
public string Path { get; set; }
|
public string Path { get; set; }
|
||||||
|
public string ComponentType { get; set; }
|
||||||
public string ComponentPath { get; set; }
|
public string ComponentPath { get; set; }
|
||||||
public string RouteType { get; set; }
|
public string RouteType { get; set; }
|
||||||
public string[] Authority { get; set; }
|
public string[] Authority { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -13856,6 +13856,12 @@
|
||||||
"en": "Component Path",
|
"en": "Component Path",
|
||||||
"tr": "Bileşen Yolu"
|
"tr": "Bileşen Yolu"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"resourceName": "Platform",
|
||||||
|
"key": "App.Listform.ListformField.ComponentType",
|
||||||
|
"en": "Component Type",
|
||||||
|
"tr": "Bileşen Türü"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"resourceName": "Platform",
|
"resourceName": "Platform",
|
||||||
"key": "App.Listform.ListformField.ConditionType",
|
"key": "App.Listform.ListformField.ConditionType",
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,6 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency
|
||||||
new EditingFormItemDto { Order=7, DataField = "PhoneNumber", ColSpan=1, IsRequired=false, EditorType2=EditorTypes.dxTextBox, EditorOptions=EditorOptionValues.PhoneEditorOptions },
|
new EditingFormItemDto { Order=7, DataField = "PhoneNumber", ColSpan=1, IsRequired=false, EditorType2=EditorTypes.dxTextBox, EditorOptions=EditorOptionValues.PhoneEditorOptions },
|
||||||
new EditingFormItemDto { Order=8, DataField = "FaxNumber", ColSpan=1, IsRequired=false, EditorType2=EditorTypes.dxTextBox, EditorOptions=EditorOptionValues.PhoneEditorOptions },
|
new EditingFormItemDto { Order=8, DataField = "FaxNumber", ColSpan=1, IsRequired=false, EditorType2=EditorTypes.dxTextBox, EditorOptions=EditorOptionValues.PhoneEditorOptions },
|
||||||
new EditingFormItemDto { Order=9, DataField = "IsActive", ColSpan=1, IsRequired=false, EditorType2=EditorTypes.dxCheckBox },
|
new EditingFormItemDto { Order=9, DataField = "IsActive", ColSpan=1, IsRequired=false, EditorType2=EditorTypes.dxCheckBox },
|
||||||
new EditingFormItemDto { Order=10, DataField = "MaxConcurrentUsers", ColSpan=1, IsRequired=false, EditorType2=EditorTypes.dxNumberBox },
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
new() { Order=2, ColCount=3, ColSpan=1, ItemType="group", Items =
|
new() { Order=2, ColCount=3, ColSpan=1, ItemType="group", Items =
|
||||||
|
|
@ -119,6 +118,7 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency
|
||||||
new EditingFormItemDto { Order=8, DataField = "Email", ColSpan=1, IsRequired=true, EditorType2=EditorTypes.dxTextBox },
|
new EditingFormItemDto { Order=8, DataField = "Email", ColSpan=1, IsRequired=true, EditorType2=EditorTypes.dxTextBox },
|
||||||
new EditingFormItemDto { Order=9, DataField = "Website", ColSpan=1, IsRequired=true, EditorType2=EditorTypes.dxTextBox },
|
new EditingFormItemDto { Order=9, DataField = "Website", ColSpan=1, IsRequired=true, EditorType2=EditorTypes.dxTextBox },
|
||||||
new EditingFormItemDto { Order=10, DataField = "MenuGroup", ColSpan=1, IsRequired=true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
|
new EditingFormItemDto { Order=10, DataField = "MenuGroup", ColSpan=1, IsRequired=true, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
|
||||||
|
new EditingFormItemDto { Order=11, DataField = "MaxConcurrentUsers", ColSpan=1, IsRequired=false, EditorType2=EditorTypes.dxNumberBox },
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|
@ -5469,7 +5469,7 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency
|
||||||
DeleteCommand = $"UPDATE \"{FullNameTable(TableNameEnum.Route)}\" SET \"DeleterId\"=@DeleterId, \"DeletionTime\"=CURRENT_TIMESTAMP, \"IsDeleted\"='true' WHERE \"Id\"=@Id",
|
DeleteCommand = $"UPDATE \"{FullNameTable(TableNameEnum.Route)}\" SET \"DeleterId\"=@DeleterId, \"DeletionTime\"=CURRENT_TIMESTAMP, \"IsDeleted\"='true' WHERE \"Id\"=@Id",
|
||||||
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(),
|
DeleteFieldsDefaultValueJson = DefaultDeleteFieldsDefaultValueJson(),
|
||||||
PagerOptionJson = DefaultPagerOptionJson,
|
PagerOptionJson = DefaultPagerOptionJson,
|
||||||
EditingOptionJson = DefaultEditingOptionJson(listFormName, 600, 400, true, true, true, true, false),
|
EditingOptionJson = DefaultEditingOptionJson(listFormName, 600, 550, true, true, true, true, false),
|
||||||
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>
|
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>
|
||||||
{
|
{
|
||||||
new() {
|
new() {
|
||||||
|
|
@ -5477,9 +5477,10 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency
|
||||||
[
|
[
|
||||||
new EditingFormItemDto { Order = 1, DataField = "Key", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
|
new EditingFormItemDto { Order = 1, DataField = "Key", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
|
||||||
new EditingFormItemDto { Order = 2, DataField = "Path", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
|
new EditingFormItemDto { Order = 2, DataField = "Path", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
|
||||||
new EditingFormItemDto { Order = 3, DataField = "ComponentPath", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
|
new EditingFormItemDto { Order = 3, DataField = "ComponentType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox },
|
||||||
new EditingFormItemDto { Order = 4, DataField = "RouteType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
|
new EditingFormItemDto { Order = 4, DataField = "ComponentPath", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
|
||||||
new EditingFormItemDto { Order = 5, DataField = "Authority", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }
|
new EditingFormItemDto { Order = 5, DataField = "RouteType", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
|
||||||
|
new EditingFormItemDto { Order = 6, DataField = "Authority", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|
@ -5541,6 +5542,33 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency
|
||||||
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
},
|
},
|
||||||
new()
|
new()
|
||||||
|
{
|
||||||
|
ListFormCode = listForm.ListFormCode,
|
||||||
|
CultureName = LanguageCodes.En,
|
||||||
|
SourceDbType = DbType.String,
|
||||||
|
FieldName = "ComponentType",
|
||||||
|
CaptionName = "App.Listform.ListformField.ComponentType",
|
||||||
|
Width = 0,
|
||||||
|
ListOrderNo = 5,
|
||||||
|
Visible = true,
|
||||||
|
IsActive = true,
|
||||||
|
|
||||||
|
AllowSearch = false,
|
||||||
|
LookupJson = JsonSerializer.Serialize(new LookupDto
|
||||||
|
{
|
||||||
|
DataSourceType = UiLookupDataSourceTypeEnum.StaticData,
|
||||||
|
DisplayExpr = "name",
|
||||||
|
ValueExpr = "key",
|
||||||
|
LookupQuery = JsonSerializer.Serialize(new LookupDataDto[] {
|
||||||
|
new () { Key="normal",Name="Normal" },
|
||||||
|
new () { Key="dynamic",Name="Dynamic" },
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
ValidationRuleJson = DefaultValidationRuleRequiredJson,
|
||||||
|
ColumnCustomizationJson = DefaultColumnCustomizationJson,
|
||||||
|
PermissionJson = DefaultFieldPermissionJson(listForm.Name),
|
||||||
|
},
|
||||||
|
new()
|
||||||
{
|
{
|
||||||
ListFormCode = listForm.ListFormCode,
|
ListFormCode = listForm.ListFormCode,
|
||||||
CultureName = LanguageCodes.En,
|
CultureName = LanguageCodes.En,
|
||||||
|
|
@ -5548,7 +5576,7 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency
|
||||||
FieldName = "ComponentPath",
|
FieldName = "ComponentPath",
|
||||||
CaptionName = "App.Listform.ListformField.ComponentPath",
|
CaptionName = "App.Listform.ListformField.ComponentPath",
|
||||||
Width = 0,
|
Width = 0,
|
||||||
ListOrderNo = 4,
|
ListOrderNo = 5,
|
||||||
Visible = true,
|
Visible = true,
|
||||||
IsActive = true,
|
IsActive = true,
|
||||||
|
|
||||||
|
|
@ -5565,7 +5593,7 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency
|
||||||
FieldName = "RouteType",
|
FieldName = "RouteType",
|
||||||
CaptionName = "App.Listform.ListformField.RouteType",
|
CaptionName = "App.Listform.ListformField.RouteType",
|
||||||
Width = 0,
|
Width = 0,
|
||||||
ListOrderNo = 5,
|
ListOrderNo = 6,
|
||||||
Visible = true,
|
Visible = true,
|
||||||
IsActive = true,
|
IsActive = true,
|
||||||
|
|
||||||
|
|
@ -5593,7 +5621,7 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency
|
||||||
FieldName = "Authority",
|
FieldName = "Authority",
|
||||||
CaptionName = "App.Listform.ListformField.Authority",
|
CaptionName = "App.Listform.ListformField.Authority",
|
||||||
Width = 0,
|
Width = 0,
|
||||||
ListOrderNo = 6,
|
ListOrderNo = 7,
|
||||||
Visible = true,
|
Visible = true,
|
||||||
IsActive = true,
|
IsActive = true,
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ public class RouteSeedDto
|
||||||
{
|
{
|
||||||
public string Key { get; set; }
|
public string Key { get; set; }
|
||||||
public string Path { get; set; }
|
public string Path { get; set; }
|
||||||
|
public string ComponentType { get; set; }
|
||||||
public string ComponentPath { get; set; }
|
public string ComponentPath { get; set; }
|
||||||
public string RouteType { get; set; }
|
public string RouteType { get; set; }
|
||||||
public string[] Authority { get; set; }
|
public string[] Authority { get; set; }
|
||||||
|
|
@ -79,6 +80,7 @@ public class MenuDataSeeder : IDataSeedContributor, ITransientDependency
|
||||||
await _routeRepository.InsertAsync(new Route(
|
await _routeRepository.InsertAsync(new Route(
|
||||||
item.Key,
|
item.Key,
|
||||||
item.Path,
|
item.Path,
|
||||||
|
item.ComponentType,
|
||||||
item.ComponentPath,
|
item.ComponentPath,
|
||||||
item.RouteType,
|
item.RouteType,
|
||||||
item.Authority ?? []
|
item.Authority ?? []
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,17 @@
|
||||||
{
|
{
|
||||||
"Routes": [
|
"Routes": [
|
||||||
{
|
{
|
||||||
"key": "dynamic.RoleListComponent",
|
"key": "roleListComponent",
|
||||||
"path": "/admin/RoleListComponent",
|
"path": "/admin/RoleListComponent",
|
||||||
"componentPath": "dynamic:RoleListComponent",
|
"componentType": "dynamic",
|
||||||
|
"componentPath": "RoleListComponent",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "home",
|
"key": "home",
|
||||||
"path": "/home",
|
"path": "/home",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/Home",
|
"componentPath": "@/views/public/Home",
|
||||||
"routeType": "public",
|
"routeType": "public",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -17,6 +19,7 @@
|
||||||
{
|
{
|
||||||
"key": "about",
|
"key": "about",
|
||||||
"path": "/about",
|
"path": "/about",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/About",
|
"componentPath": "@/views/public/About",
|
||||||
"routeType": "public",
|
"routeType": "public",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -24,6 +27,7 @@
|
||||||
{
|
{
|
||||||
"key": "products",
|
"key": "products",
|
||||||
"path": "/products",
|
"path": "/products",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/Products",
|
"componentPath": "@/views/public/Products",
|
||||||
"routeType": "public",
|
"routeType": "public",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -31,6 +35,7 @@
|
||||||
{
|
{
|
||||||
"key": "checkout",
|
"key": "checkout",
|
||||||
"path": "/checkout",
|
"path": "/checkout",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/Checkout",
|
"componentPath": "@/views/public/Checkout",
|
||||||
"routeType": "public",
|
"routeType": "public",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -38,6 +43,7 @@
|
||||||
{
|
{
|
||||||
"key": "payment",
|
"key": "payment",
|
||||||
"path": "/payment",
|
"path": "/payment",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/Payment",
|
"componentPath": "@/views/public/Payment",
|
||||||
"routeType": "public",
|
"routeType": "public",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -45,6 +51,7 @@
|
||||||
{
|
{
|
||||||
"key": "success",
|
"key": "success",
|
||||||
"path": "/success",
|
"path": "/success",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/Success",
|
"componentPath": "@/views/public/Success",
|
||||||
"routeType": "public",
|
"routeType": "public",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -52,6 +59,7 @@
|
||||||
{
|
{
|
||||||
"key": "services",
|
"key": "services",
|
||||||
"path": "/services",
|
"path": "/services",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/Services",
|
"componentPath": "@/views/public/Services",
|
||||||
"routeType": "public",
|
"routeType": "public",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -59,6 +67,7 @@
|
||||||
{
|
{
|
||||||
"key": "blog",
|
"key": "blog",
|
||||||
"path": "/blog",
|
"path": "/blog",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/Blog",
|
"componentPath": "@/views/public/Blog",
|
||||||
"routeType": "public",
|
"routeType": "public",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -66,6 +75,7 @@
|
||||||
{
|
{
|
||||||
"key": "blogDetail",
|
"key": "blogDetail",
|
||||||
"path": "/blog/:id",
|
"path": "/blog/:id",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/BlogDetail",
|
"componentPath": "@/views/public/BlogDetail",
|
||||||
"routeType": "public",
|
"routeType": "public",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -73,6 +83,7 @@
|
||||||
{
|
{
|
||||||
"key": "demo",
|
"key": "demo",
|
||||||
"path": "/demo",
|
"path": "/demo",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/Demo",
|
"componentPath": "@/views/public/Demo",
|
||||||
"routeType": "public",
|
"routeType": "public",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -80,6 +91,7 @@
|
||||||
{
|
{
|
||||||
"key": "contact",
|
"key": "contact",
|
||||||
"path": "/contact",
|
"path": "/contact",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/Contact",
|
"componentPath": "@/views/public/Contact",
|
||||||
"routeType": "public",
|
"routeType": "public",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -87,6 +99,7 @@
|
||||||
{
|
{
|
||||||
"key": "access-denied",
|
"key": "access-denied",
|
||||||
"path": "/access-denied",
|
"path": "/access-denied",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/AccessDenied",
|
"componentPath": "@/views/AccessDenied",
|
||||||
"routeType": "public",
|
"routeType": "public",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -94,6 +107,7 @@
|
||||||
{
|
{
|
||||||
"key": "login",
|
"key": "login",
|
||||||
"path": "/login",
|
"path": "/login",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/auth/Login",
|
"componentPath": "@/views/auth/Login",
|
||||||
"routeType": "authenticated",
|
"routeType": "authenticated",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -101,6 +115,7 @@
|
||||||
{
|
{
|
||||||
"key": "register",
|
"key": "register",
|
||||||
"path": "/register",
|
"path": "/register",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/auth/Register",
|
"componentPath": "@/views/auth/Register",
|
||||||
"routeType": "authenticated",
|
"routeType": "authenticated",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -108,6 +123,7 @@
|
||||||
{
|
{
|
||||||
"key": "forgotPassword",
|
"key": "forgotPassword",
|
||||||
"path": "/forgot-password",
|
"path": "/forgot-password",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/auth/ForgotPassword",
|
"componentPath": "@/views/auth/ForgotPassword",
|
||||||
"routeType": "authenticated",
|
"routeType": "authenticated",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -115,6 +131,7 @@
|
||||||
{
|
{
|
||||||
"key": "resetPassword",
|
"key": "resetPassword",
|
||||||
"path": "/reset-password",
|
"path": "/reset-password",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/auth/ResetPassword",
|
"componentPath": "@/views/auth/ResetPassword",
|
||||||
"routeType": "authenticated",
|
"routeType": "authenticated",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -122,6 +139,7 @@
|
||||||
{
|
{
|
||||||
"key": "sendConfirmationCode",
|
"key": "sendConfirmationCode",
|
||||||
"path": "/confirm",
|
"path": "/confirm",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/auth/SendConfirmationCode",
|
"componentPath": "@/views/auth/SendConfirmationCode",
|
||||||
"routeType": "authenticated",
|
"routeType": "authenticated",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -129,6 +147,7 @@
|
||||||
{
|
{
|
||||||
"key": "sendExtendLogin",
|
"key": "sendExtendLogin",
|
||||||
"path": "/extend-login",
|
"path": "/extend-login",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/auth/ExtendLogin",
|
"componentPath": "@/views/auth/ExtendLogin",
|
||||||
"routeType": "authenticated",
|
"routeType": "authenticated",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -136,6 +155,7 @@
|
||||||
{
|
{
|
||||||
"key": "verifyConfirmationCode",
|
"key": "verifyConfirmationCode",
|
||||||
"path": "/confirm/:userId/:token",
|
"path": "/confirm/:userId/:token",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/auth/VerifyConfirmationCode",
|
"componentPath": "@/views/auth/VerifyConfirmationCode",
|
||||||
"routeType": "authenticated",
|
"routeType": "authenticated",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -143,6 +163,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.dashboard",
|
"key": "admin.dashboard",
|
||||||
"path": "/admin/dashboard",
|
"path": "/admin/dashboard",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/Dashboard",
|
"componentPath": "@/views/Dashboard",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -150,6 +171,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.menuManager",
|
"key": "admin.menuManager",
|
||||||
"path": "/admin/menuManager",
|
"path": "/admin/menuManager",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/menu/MenuManager",
|
"componentPath": "@/views/menu/MenuManager",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Menus.Manager"]
|
"authority": ["App.Menus.Manager"]
|
||||||
|
|
@ -157,6 +179,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.listFormManagement.wizard",
|
"key": "admin.listFormManagement.wizard",
|
||||||
"path": "/admin/listform/wizard",
|
"path": "/admin/listform/wizard",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/listForm/wizard/Wizard",
|
"componentPath": "@/views/admin/listForm/wizard/Wizard",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Listforms.Wizard"]
|
"authority": ["App.Listforms.Wizard"]
|
||||||
|
|
@ -164,6 +187,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.listFormManagement.wizardManager",
|
"key": "admin.listFormManagement.wizardManager",
|
||||||
"path": "/admin/listform/wizardManager",
|
"path": "/admin/listform/wizardManager",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/listForm/wizard/WizardFileManager",
|
"componentPath": "@/views/admin/listForm/wizard/WizardFileManager",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Listforms.Wizard"]
|
"authority": ["App.Listforms.Wizard"]
|
||||||
|
|
@ -171,6 +195,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.listFormManagement.edit",
|
"key": "admin.listFormManagement.edit",
|
||||||
"path": "/admin/listform/edit/:listFormCode",
|
"path": "/admin/listform/edit/:listFormCode",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/listForm/edit/FormEdit",
|
"componentPath": "@/views/admin/listForm/edit/FormEdit",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -178,6 +203,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.forumManagement",
|
"key": "admin.forumManagement",
|
||||||
"path": "/admin/forumManagement",
|
"path": "/admin/forumManagement",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/forum/Management",
|
"componentPath": "@/views/forum/Management",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.ForumManagement"]
|
"authority": ["App.ForumManagement"]
|
||||||
|
|
@ -185,6 +211,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.ai",
|
"key": "admin.ai",
|
||||||
"path": "/admin/ai",
|
"path": "/admin/ai",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/ai/Assistant",
|
"componentPath": "@/views/ai/Assistant",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Definitions.AiBot.Asistant"]
|
"authority": ["App.Definitions.AiBot.Asistant"]
|
||||||
|
|
@ -192,6 +219,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.profile.general",
|
"key": "admin.profile.general",
|
||||||
"path": "/admin/profile/general",
|
"path": "/admin/profile/general",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/profile/Profile",
|
"componentPath": "@/views/admin/profile/Profile",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -199,6 +227,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.profile.password",
|
"key": "admin.profile.password",
|
||||||
"path": "/admin/profile/password",
|
"path": "/admin/profile/password",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/profile/Profile",
|
"componentPath": "@/views/admin/profile/Profile",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -206,6 +235,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.profile.notificationSettings",
|
"key": "admin.profile.notificationSettings",
|
||||||
"path": "/admin/profile/notification-settings",
|
"path": "/admin/profile/notification-settings",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/profile/Profile",
|
"componentPath": "@/views/admin/profile/Profile",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -213,6 +243,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.activityLog",
|
"key": "admin.activityLog",
|
||||||
"path": "/admin/activityLog",
|
"path": "/admin/activityLog",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/activityLog/ActivityLog",
|
"componentPath": "@/views/admin/activityLog/ActivityLog",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -220,6 +251,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.changeLog",
|
"key": "admin.changeLog",
|
||||||
"path": "/admin/changeLog",
|
"path": "/admin/changeLog",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/version/ChangeLog",
|
"componentPath": "@/views/version/ChangeLog",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -227,6 +259,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.settings",
|
"key": "admin.settings",
|
||||||
"path": "/admin/settings",
|
"path": "/admin/settings",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/settings/Settings",
|
"componentPath": "@/views/settings/Settings",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Setting"]
|
"authority": ["App.Setting"]
|
||||||
|
|
@ -234,6 +267,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.identity.user.detail",
|
"key": "admin.identity.user.detail",
|
||||||
"path": "/admin/users/detail/:userId",
|
"path": "/admin/users/detail/:userId",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/user-management/Details",
|
"componentPath": "@/views/admin/user-management/Details",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["AbpIdentity.Users.Update"]
|
"authority": ["AbpIdentity.Users.Update"]
|
||||||
|
|
@ -241,6 +275,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.identity.ous",
|
"key": "admin.identity.ous",
|
||||||
"path": "/admin/ous",
|
"path": "/admin/ous",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/organization-unit/OrganizationUnits",
|
"componentPath": "@/views/admin/organization-unit/OrganizationUnits",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["Abp.Identity.OrganizationUnits"]
|
"authority": ["Abp.Identity.OrganizationUnits"]
|
||||||
|
|
@ -248,6 +283,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.hr.organization",
|
"key": "admin.hr.organization",
|
||||||
"path": "/admin/organization",
|
"path": "/admin/organization",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/hr/OrgChart",
|
"componentPath": "@/views/admin/hr/OrgChart",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Definitions.Department"]
|
"authority": ["App.Definitions.Department"]
|
||||||
|
|
@ -255,6 +291,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.forum",
|
"key": "admin.forum",
|
||||||
"path": "/admin/forum",
|
"path": "/admin/forum",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/forum/Forum",
|
"componentPath": "@/views/forum/Forum",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.ForumManagement.Publish"]
|
"authority": ["App.ForumManagement.Publish"]
|
||||||
|
|
@ -262,6 +299,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.list",
|
"key": "admin.list",
|
||||||
"path": "/admin/list/:listFormCode",
|
"path": "/admin/list/:listFormCode",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/list/List",
|
"componentPath": "@/views/list/List",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -269,6 +307,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.formNew",
|
"key": "admin.formNew",
|
||||||
"path": "/admin/form/:listFormCode",
|
"path": "/admin/form/:listFormCode",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/form/FormNew",
|
"componentPath": "@/views/form/FormNew",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -276,6 +315,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.formView",
|
"key": "admin.formView",
|
||||||
"path": "/admin/form/:listFormCode/:id",
|
"path": "/admin/form/:listFormCode/:id",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/form/FormView",
|
"componentPath": "@/views/form/FormView",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -283,6 +323,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.formEdit",
|
"key": "admin.formEdit",
|
||||||
"path": "/admin/form/:listFormCode/:id/edit",
|
"path": "/admin/form/:listFormCode/:id/edit",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/form/FormEdit",
|
"componentPath": "@/views/form/FormEdit",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -290,6 +331,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.chart",
|
"key": "admin.chart",
|
||||||
"path": "/admin/chart/:listFormCode",
|
"path": "/admin/chart/:listFormCode",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/list/Chart",
|
"componentPath": "@/views/list/Chart",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -297,6 +339,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.sqlQueryManager",
|
"key": "admin.sqlQueryManager",
|
||||||
"path": "/admin/sqlQueryManager",
|
"path": "/admin/sqlQueryManager",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/developerKit/SqlQueryManager",
|
"componentPath": "@/views/developerKit/SqlQueryManager",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.SqlQueryManager"]
|
"authority": ["App.SqlQueryManager"]
|
||||||
|
|
@ -304,6 +347,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.endpoints",
|
"key": "admin.developerkit.endpoints",
|
||||||
"path": "/admin/developerkit/endpoints",
|
"path": "/admin/developerkit/endpoints",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/developerKit/CrudEndpointManager",
|
"componentPath": "@/views/developerKit/CrudEndpointManager",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.CrudEndpoints"]
|
"authority": ["App.DeveloperKit.CrudEndpoints"]
|
||||||
|
|
@ -311,6 +355,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.dynamic-services",
|
"key": "admin.developerkit.dynamic-services",
|
||||||
"path": "/admin/developerkit/dynamic-services",
|
"path": "/admin/developerkit/dynamic-services",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/developerKit/DynamicServiceManager",
|
"componentPath": "@/views/developerKit/DynamicServiceManager",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.DynamicServices"]
|
"authority": ["App.DeveloperKit.DynamicServices"]
|
||||||
|
|
@ -318,6 +363,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.dynamic-services.new",
|
"key": "admin.developerkit.dynamic-services.new",
|
||||||
"path": "/admin/developerkit/dynamic-services/new",
|
"path": "/admin/developerkit/dynamic-services/new",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/developerKit/DynamicServiceEditor",
|
"componentPath": "@/views/developerKit/DynamicServiceEditor",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.DynamicServices"]
|
"authority": ["App.DeveloperKit.DynamicServices"]
|
||||||
|
|
@ -325,6 +371,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.dynamic-services.edit",
|
"key": "admin.developerkit.dynamic-services.edit",
|
||||||
"path": "/admin/developerkit/dynamic-services/edit/:id",
|
"path": "/admin/developerkit/dynamic-services/edit/:id",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/developerKit/DynamicServiceEditor",
|
"componentPath": "@/views/developerKit/DynamicServiceEditor",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.DynamicServices"]
|
"authority": ["App.DeveloperKit.DynamicServices"]
|
||||||
|
|
@ -332,6 +379,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.components",
|
"key": "admin.developerkit.components",
|
||||||
"path": "/admin/developerkit/components",
|
"path": "/admin/developerkit/components",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/developerKit/ComponentManagerPage",
|
"componentPath": "@/views/developerKit/ComponentManagerPage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.Components"]
|
"authority": ["App.DeveloperKit.Components"]
|
||||||
|
|
@ -339,6 +387,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.components.new",
|
"key": "admin.developerkit.components.new",
|
||||||
"path": "/admin/developerkit/components/new",
|
"path": "/admin/developerkit/components/new",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/developerKit/ComponentEditorPage",
|
"componentPath": "@/views/developerKit/ComponentEditorPage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.Components"]
|
"authority": ["App.DeveloperKit.Components"]
|
||||||
|
|
@ -346,6 +395,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.components.view",
|
"key": "admin.developerkit.components.view",
|
||||||
"path": "/admin/developerkit/components/view/:id",
|
"path": "/admin/developerkit/components/view/:id",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/developerKit/ComponentEditorPage",
|
"componentPath": "@/views/developerKit/ComponentEditorPage",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.Components"]
|
"authority": ["App.DeveloperKit.Components"]
|
||||||
|
|
@ -353,6 +403,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.developerkit.components.edit",
|
"key": "admin.developerkit.components.edit",
|
||||||
"path": "/admin/developerkit/components/edit/:id",
|
"path": "/admin/developerkit/components/edit/:id",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/developerKit/ComponentCodeLayout",
|
"componentPath": "@/views/developerKit/ComponentCodeLayout",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.DeveloperKit.Components"]
|
"authority": ["App.DeveloperKit.Components"]
|
||||||
|
|
@ -360,6 +411,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.fileManagement",
|
"key": "admin.fileManagement",
|
||||||
"path": "/admin/files",
|
"path": "/admin/files",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/files/FileManager",
|
"componentPath": "@/views/admin/files/FileManager",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Files"]
|
"authority": ["App.Files"]
|
||||||
|
|
@ -367,6 +419,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.devexpressReportView",
|
"key": "admin.devexpressReportView",
|
||||||
"path": "/admin/reports/:id/view",
|
"path": "/admin/reports/:id/view",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/report/DevexpressReportViewer",
|
"componentPath": "@/views/report/DevexpressReportViewer",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -374,6 +427,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.devexpressReportDesigner",
|
"key": "admin.devexpressReportDesigner",
|
||||||
"path": "/admin/reports/:id/design",
|
"path": "/admin/reports/:id/design",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/report/DevexpressReportDesigner",
|
"componentPath": "@/views/report/DevexpressReportDesigner",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": []
|
"authority": []
|
||||||
|
|
@ -381,6 +435,7 @@
|
||||||
{
|
{
|
||||||
"key": "homeDesigner",
|
"key": "homeDesigner",
|
||||||
"path": "/admin/public/home/designer",
|
"path": "/admin/public/home/designer",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/Home",
|
"componentPath": "@/views/public/Home",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Home"]
|
"authority": ["App.Home"]
|
||||||
|
|
@ -388,6 +443,7 @@
|
||||||
{
|
{
|
||||||
"key": "aboutDesigner",
|
"key": "aboutDesigner",
|
||||||
"path": "/admin/public/about/designer",
|
"path": "/admin/public/about/designer",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/About",
|
"componentPath": "@/views/public/About",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.About"]
|
"authority": ["App.About"]
|
||||||
|
|
@ -395,6 +451,7 @@
|
||||||
{
|
{
|
||||||
"key": "servicesDesigner",
|
"key": "servicesDesigner",
|
||||||
"path": "/admin/public/services/designer",
|
"path": "/admin/public/services/designer",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/Services",
|
"componentPath": "@/views/public/Services",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Services"]
|
"authority": ["App.Services"]
|
||||||
|
|
@ -402,6 +459,7 @@
|
||||||
{
|
{
|
||||||
"key": "contactDesigner",
|
"key": "contactDesigner",
|
||||||
"path": "/admin/public/contact/designer",
|
"path": "/admin/public/contact/designer",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/public/Contact",
|
"componentPath": "@/views/public/Contact",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Contact"]
|
"authority": ["App.Contact"]
|
||||||
|
|
@ -409,6 +467,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.videoroom.dashboard",
|
"key": "admin.videoroom.dashboard",
|
||||||
"path": "/admin/videoroom/dashboard",
|
"path": "/admin/videoroom/dashboard",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/videoroom/Dashboard",
|
"componentPath": "@/views/admin/videoroom/Dashboard",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Videoroom.Dashboard"]
|
"authority": ["App.Videoroom.Dashboard"]
|
||||||
|
|
@ -416,6 +475,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.videoroom.list",
|
"key": "admin.videoroom.list",
|
||||||
"path": "/admin/videoroom/list",
|
"path": "/admin/videoroom/list",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/videoroom/RoomList",
|
"componentPath": "@/views/admin/videoroom/RoomList",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Videoroom.List"]
|
"authority": ["App.Videoroom.List"]
|
||||||
|
|
@ -423,6 +483,7 @@
|
||||||
{
|
{
|
||||||
"key": "admin.videoroom.roomdetail",
|
"key": "admin.videoroom.roomdetail",
|
||||||
"path": "/admin/videoroom/room/:id",
|
"path": "/admin/videoroom/room/:id",
|
||||||
|
"componentType": "normal",
|
||||||
"componentPath": "@/views/admin/videoroom/RoomDetail",
|
"componentPath": "@/views/admin/videoroom/RoomDetail",
|
||||||
"routeType": "protected",
|
"routeType": "protected",
|
||||||
"authority": ["App.Videoroom.RoomDetail"]
|
"authority": ["App.Videoroom.RoomDetail"]
|
||||||
|
|
|
||||||
|
|
@ -7,14 +7,16 @@ public class Route : FullAuditedEntity<Guid>
|
||||||
{
|
{
|
||||||
public string Key { get; set; }
|
public string Key { get; set; }
|
||||||
public string Path { get; set; }
|
public string Path { get; set; }
|
||||||
|
public string ComponentType { get; set; }
|
||||||
public string ComponentPath { get; set; }
|
public string ComponentPath { get; set; }
|
||||||
public string RouteType { get; set; }
|
public string RouteType { get; set; }
|
||||||
public string[] Authority { get; set; }
|
public string[] Authority { get; set; }
|
||||||
|
|
||||||
public Route(string key, string path, string componentPath, string routeType, string[] authority)
|
public Route(string key, string path, string componentType, string componentPath, string routeType, string[] authority)
|
||||||
{
|
{
|
||||||
Key = key;
|
Key = key;
|
||||||
Path = path;
|
Path = path;
|
||||||
|
ComponentType = componentType;
|
||||||
ComponentPath = componentPath;
|
ComponentPath = componentPath;
|
||||||
RouteType = routeType;
|
RouteType = routeType;
|
||||||
Authority = authority;
|
Authority = authority;
|
||||||
|
|
|
||||||
|
|
@ -254,6 +254,7 @@ public class PlatformDbContext :
|
||||||
|
|
||||||
b.Property(x => x.Key).IsRequired().HasMaxLength(128);
|
b.Property(x => x.Key).IsRequired().HasMaxLength(128);
|
||||||
b.Property(x => x.Path).IsRequired().HasMaxLength(256);
|
b.Property(x => x.Path).IsRequired().HasMaxLength(256);
|
||||||
|
b.Property(x => x.ComponentType).HasMaxLength(32);
|
||||||
b.Property(x => x.ComponentPath).IsRequired().HasMaxLength(256);
|
b.Property(x => x.ComponentPath).IsRequired().HasMaxLength(256);
|
||||||
b.Property(x => x.RouteType).HasMaxLength(64);
|
b.Property(x => x.RouteType).HasMaxLength(64);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore;
|
||||||
namespace Sozsoft.Platform.Migrations
|
namespace Sozsoft.Platform.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(PlatformDbContext))]
|
[DbContext(typeof(PlatformDbContext))]
|
||||||
[Migration("20260526185809_Initial")]
|
[Migration("20260602070242_Initial")]
|
||||||
partial class Initial
|
partial class Initial
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
|
@ -4153,6 +4153,10 @@ namespace Sozsoft.Platform.Migrations
|
||||||
.HasMaxLength(256)
|
.HasMaxLength(256)
|
||||||
.HasColumnType("nvarchar(256)");
|
.HasColumnType("nvarchar(256)");
|
||||||
|
|
||||||
|
b.Property<string>("ComponentType")
|
||||||
|
.HasMaxLength(32)
|
||||||
|
.HasColumnType("nvarchar(32)");
|
||||||
|
|
||||||
b.Property<DateTime>("CreationTime")
|
b.Property<DateTime>("CreationTime")
|
||||||
.HasColumnType("datetime2")
|
.HasColumnType("datetime2")
|
||||||
.HasColumnName("CreationTime");
|
.HasColumnName("CreationTime");
|
||||||
|
|
@ -1604,6 +1604,7 @@ namespace Sozsoft.Platform.Migrations
|
||||||
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
|
||||||
Key = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
Key = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
|
||||||
Path = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
|
Path = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
|
||||||
|
ComponentType = table.Column<string>(type: "nvarchar(32)", maxLength: 32, nullable: true),
|
||||||
ComponentPath = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
|
ComponentPath = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
|
||||||
RouteType = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
|
RouteType = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
|
||||||
Authority = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
Authority = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
||||||
|
|
@ -4150,6 +4150,10 @@ namespace Sozsoft.Platform.Migrations
|
||||||
.HasMaxLength(256)
|
.HasMaxLength(256)
|
||||||
.HasColumnType("nvarchar(256)");
|
.HasColumnType("nvarchar(256)");
|
||||||
|
|
||||||
|
b.Property<string>("ComponentType")
|
||||||
|
.HasMaxLength(32)
|
||||||
|
.HasColumnType("nvarchar(32)");
|
||||||
|
|
||||||
b.Property<DateTime>("CreationTime")
|
b.Property<DateTime>("CreationTime")
|
||||||
.HasColumnType("datetime2")
|
.HasColumnType("datetime2")
|
||||||
.HasColumnName("CreationTime");
|
.HasColumnName("CreationTime");
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ export interface RouteDto extends FullAuditedEntityDto<string> {
|
||||||
id: string;
|
id: string;
|
||||||
key: string;
|
key: string;
|
||||||
path: string;
|
path: string;
|
||||||
|
componentType: string;
|
||||||
componentPath: string;
|
componentPath: string;
|
||||||
routeType: string;
|
routeType: string;
|
||||||
authority: string[];
|
authority: string[];
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import { RouteDto } from '@/proxy/routes/models'
|
import { RouteDto } from '@/proxy/routes/models'
|
||||||
import { lazy } from 'react'
|
import { lazy } from 'react'
|
||||||
import { useComponents } from '@/contexts/ComponentContext'
|
|
||||||
|
|
||||||
// Tüm view bileşenlerini import et (vite özel)
|
// Tüm view bileşenlerini import et (vite özel)
|
||||||
// shared klasörü hariç, çünkü bu bileşenler genellikle başka yerlerde statik import ediliyor
|
// shared klasörü hariç, çünkü bu bileşenler genellikle başka yerlerde statik import ediliyor
|
||||||
|
|
@ -8,25 +7,12 @@ const modules = import.meta.glob(['../views/**/*.tsx', '!../views/shared/**/*.ts
|
||||||
|
|
||||||
const lazyComponentCache = new Map<string, React.LazyExoticComponent<React.ComponentType<any>>>()
|
const lazyComponentCache = new Map<string, React.LazyExoticComponent<React.ComponentType<any>>>()
|
||||||
|
|
||||||
// ComponentPath'in fiziksel mi yoksa dinamik mi olduğunu belirle
|
|
||||||
function isPhysicalComponent(componentPath: string): boolean {
|
|
||||||
// @ ile başlayan path'ler fiziksel dosya yolu
|
|
||||||
// Başka bir kural: dynamic: ile başlayan path'ler dinamik
|
|
||||||
return componentPath.startsWith('@/') || componentPath.startsWith('../')
|
|
||||||
}
|
|
||||||
|
|
||||||
function isDynamicComponent(componentPath: string): boolean {
|
|
||||||
// dynamic: ile başlayan path'ler dinamik komponent
|
|
||||||
return componentPath.startsWith('dynamic:')
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fiziksel komponent yükleme (mevcut mantık)
|
// Fiziksel komponent yükleme (mevcut mantık)
|
||||||
function loadPhysicalComponent(componentPath: string) {
|
function loadPhysicalComponent(componentPath: string) {
|
||||||
const cleanedPath = componentPath.replace(/^@\//, '')
|
const cleanedPath = componentPath.replace(/^@\//, '')
|
||||||
const fullPath = `../${cleanedPath}.tsx`
|
const fullPath = `../${cleanedPath}.tsx`
|
||||||
|
|
||||||
if (lazyComponentCache.has(fullPath)) {
|
if (lazyComponentCache.has(fullPath)) {
|
||||||
// console.log(`Physical component loaded from cache: ${fullPath}`)
|
|
||||||
return lazyComponentCache.get(fullPath)!
|
return lazyComponentCache.get(fullPath)!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -43,53 +29,65 @@ function loadPhysicalComponent(componentPath: string) {
|
||||||
|
|
||||||
// Dinamik komponent yükleme (yeni mantık)
|
// Dinamik komponent yükleme (yeni mantık)
|
||||||
function loadDynamicComponent(
|
function loadDynamicComponent(
|
||||||
componentPath: string,
|
componentPath: string,
|
||||||
registeredComponents: Record<string, React.ComponentType<unknown>>,
|
registeredComponents: Record<string, React.ComponentType<unknown>>,
|
||||||
renderComponent?: (name: string, props?: any) => React.ReactNode,
|
renderComponent?: (name: string, props?: any) => React.ReactNode,
|
||||||
isComponentRegistered?: (name: string) => boolean
|
isComponentRegistered?: (name: string) => boolean,
|
||||||
) {
|
) {
|
||||||
const componentName = componentPath.replace('dynamic:', '')
|
|
||||||
|
|
||||||
if (lazyComponentCache.has(componentPath)) {
|
if (lazyComponentCache.has(componentPath)) {
|
||||||
// console.log(`Dynamic component loaded from cache: ${componentName}`)
|
// console.log(`Dynamic component loaded from cache: ${componentName}`)
|
||||||
return lazyComponentCache.get(componentPath)!
|
return lazyComponentCache.get(componentPath)!
|
||||||
}
|
}
|
||||||
|
|
||||||
// Önce manuel registered komponentleri kontrol et
|
// Önce manuel registered komponentleri kontrol et
|
||||||
let DynamicComponent = registeredComponents[componentName]
|
let DynamicComponent = registeredComponents[componentPath]
|
||||||
|
|
||||||
// Eğer manuel registered'da yoksa, database compiled komponentleri kontrol et
|
// Eğer manuel registered'da yoksa, database compiled komponentleri kontrol et
|
||||||
if (!DynamicComponent && isComponentRegistered && renderComponent && isComponentRegistered(componentName)) {
|
if (
|
||||||
DynamicComponent = (props: any) => renderComponent(componentName, props) as React.ReactElement
|
!DynamicComponent &&
|
||||||
|
isComponentRegistered &&
|
||||||
|
renderComponent &&
|
||||||
|
isComponentRegistered(componentPath)
|
||||||
|
) {
|
||||||
|
DynamicComponent = (props: any) => renderComponent(componentPath, props) as React.ReactElement
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!DynamicComponent) {
|
if (!DynamicComponent) {
|
||||||
if (isComponentRegistered) {
|
if (isComponentRegistered) {
|
||||||
console.log('Database component registry available - checking...')
|
console.log('Database component registry available - checking...')
|
||||||
}
|
}
|
||||||
throw new Error(`Dynamic component not found: ${componentName}`)
|
throw new Error(`Dynamic component not found: ${componentPath}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
// console.log(`Dynamic component loaded: ${componentName}`)
|
// console.log(`Dynamic component loaded: ${componentPath}`)
|
||||||
// Dinamik komponent için lazy wrapper oluştur
|
// Dinamik komponent için lazy wrapper oluştur
|
||||||
const LazyComponent = lazy(() => Promise.resolve({ default: DynamicComponent as React.ComponentType<any> }))
|
const LazyComponent = lazy(() =>
|
||||||
|
Promise.resolve({ default: DynamicComponent as React.ComponentType<any> }),
|
||||||
|
)
|
||||||
lazyComponentCache.set(componentPath, LazyComponent)
|
lazyComponentCache.set(componentPath, LazyComponent)
|
||||||
return LazyComponent
|
return LazyComponent
|
||||||
}
|
}
|
||||||
|
|
||||||
export function loadComponent(
|
export function loadComponent(
|
||||||
componentPath: string,
|
componentType: string,
|
||||||
|
componentPath: string,
|
||||||
registeredComponents?: Record<string, React.ComponentType<unknown>>,
|
registeredComponents?: Record<string, React.ComponentType<unknown>>,
|
||||||
renderComponent?: (name: string, props?: any) => React.ReactNode,
|
renderComponent?: (name: string, props?: any) => React.ReactNode,
|
||||||
isComponentRegistered?: (name: string) => boolean
|
isComponentRegistered?: (name: string) => boolean,
|
||||||
) {
|
) {
|
||||||
if (isPhysicalComponent(componentPath)) {
|
if (componentType === 'normal') {
|
||||||
return loadPhysicalComponent(componentPath)
|
return loadPhysicalComponent(componentPath)
|
||||||
} else if (isDynamicComponent(componentPath)) {
|
} else if (componentType === 'dynamic') {
|
||||||
if (!registeredComponents) {
|
if (!registeredComponents) {
|
||||||
throw new Error('Registered components required for dynamic component loading')
|
throw new Error('Registered components required for dynamic component loading')
|
||||||
}
|
}
|
||||||
return loadDynamicComponent(componentPath, registeredComponents, renderComponent, isComponentRegistered)
|
return loadDynamicComponent(
|
||||||
|
componentPath,
|
||||||
|
registeredComponents,
|
||||||
|
renderComponent,
|
||||||
|
isComponentRegistered,
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
// Backward compatibility: varsayılan olarak fiziksel komponent kabul et
|
// Backward compatibility: varsayılan olarak fiziksel komponent kabul et
|
||||||
return loadPhysicalComponent(componentPath)
|
return loadPhysicalComponent(componentPath)
|
||||||
|
|
@ -103,13 +101,12 @@ export interface DynamicReactRoute {
|
||||||
getComponent: (
|
getComponent: (
|
||||||
registeredComponents?: Record<string, React.ComponentType<unknown>>,
|
registeredComponents?: Record<string, React.ComponentType<unknown>>,
|
||||||
renderComponent?: (name: string, props?: any) => React.ReactNode,
|
renderComponent?: (name: string, props?: any) => React.ReactNode,
|
||||||
isComponentRegistered?: (name: string) => boolean
|
isComponentRegistered?: (name: string) => boolean,
|
||||||
) => React.LazyExoticComponent<React.ComponentType<any>>
|
) => React.LazyExoticComponent<React.ComponentType<any>>
|
||||||
routeType: string
|
routeType: string
|
||||||
authority?: string[]
|
authority?: string[]
|
||||||
|
componentType: string
|
||||||
componentPath: string
|
componentPath: string
|
||||||
isPhysical: boolean
|
|
||||||
isDynamic: boolean
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// API'den gelen route objesini, React Router için uygun hale getirir
|
// API'den gelen route objesini, React Router için uygun hale getirir
|
||||||
|
|
@ -117,12 +114,17 @@ export function mapDynamicRoutes(routes: RouteDto[]): DynamicReactRoute[] {
|
||||||
return routes.map((route) => ({
|
return routes.map((route) => ({
|
||||||
key: route.path,
|
key: route.path,
|
||||||
path: route.path,
|
path: route.path,
|
||||||
getComponent: (registeredComponents, renderComponent, isComponentRegistered) =>
|
getComponent: (registeredComponents, renderComponent, isComponentRegistered) =>
|
||||||
loadComponent(route.componentPath, registeredComponents, renderComponent, isComponentRegistered),
|
loadComponent(
|
||||||
|
route.componentType,
|
||||||
|
route.componentPath,
|
||||||
|
registeredComponents,
|
||||||
|
renderComponent,
|
||||||
|
isComponentRegistered,
|
||||||
|
),
|
||||||
routeType: route.routeType,
|
routeType: route.routeType,
|
||||||
authority: route.authority,
|
authority: route.authority,
|
||||||
|
componentType: route.componentType,
|
||||||
componentPath: route.componentPath,
|
componentPath: route.componentPath,
|
||||||
isPhysical: isPhysicalComponent(route.componentPath),
|
|
||||||
isDynamic: isDynamicComponent(route.componentPath),
|
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -178,8 +178,6 @@ export const MenuItemComponent: React.FC<MenuItemComponentProps> = ({
|
||||||
>
|
>
|
||||||
{translate('::' + item.displayName)}
|
{translate('::' + item.displayName)}
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
{item.url && <FaExternalLinkAlt size={12} className="flex-shrink-0 text-gray-400 dark:text-gray-500" />}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="flex items-center gap-2 flex-shrink-0">
|
<div className="flex items-center gap-2 flex-shrink-0">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue