优化cms

This commit is contained in:
biss committed 2026-08-29 16:50:01 +08:00
1 parent f56a63d4ce
commit 1f7603923e
9 files changed
+183 -42

No files matched your search

+2
View File
@@ -10,6 +10,8 @@
初始化完成后,在 **Configuration → Features** 启用 `ElectionSystem.Cms.PublicContent`。该模块的数据迁移会自动创建下列固定公开栏目和公共元数据字段;停用模块不会删除已有公开内容。 初始化完成后,在 **Configuration → Features** 启用 `ElectionSystem.Cms.PublicContent`。该模块的数据迁移会自动创建下列固定公开栏目和公共元数据字段;停用模块不会删除已有公开内容。
启用后请刷新后台(或重新登录)。左侧 **Content → Information Disclosure** 会出现八个固定栏目入口,每个入口直接打开对应内容类型的筛选列表并可新建内容。若入口不可见,确认当前角色已拥有 Orchard Core 的 **List Content** 权限;站点管理员默认具备该权限。
## 公开前台接入 ## 公开前台接入
选举主程序的 Razor Pages 通过 CMS 主机的只读 `GET /api/public-content` 接口读取内容,绝不直连 CMS 数据库。该接口只允许固定公开内容类型,并且只返回已发布版本的标题、正文、发布时间和公开元数据;草稿、历史版本、选民资料、投票状态、线下计票和内部审计记录均不会返回。 选举主程序的 Razor Pages 通过 CMS 主机的只读 `GET /api/public-content` 接口读取内容,绝不直连 CMS 数据库。该接口只允许固定公开内容类型,并且只返回已发布版本的标题、正文、发布时间和公开元数据;草稿、历史版本、选民资料、投票状态、线下计票和内部审计记录均不会返回。
@@ -13,7 +13,7 @@
"commandName": "Project", "commandName": "Project",
"dotnetRunMessages": true, "dotnetRunMessages": true,
"launchBrowser": true, "launchBrowser": true,
"launchUrl": "swagger", "launchUrl": "",
"applicationUrl": "http://localhost:5037", "applicationUrl": "http://localhost:5037",
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"
@@ -23,7 +23,7 @@
"commandName": "Project", "commandName": "Project",
"dotnetRunMessages": true, "dotnetRunMessages": true,
"launchBrowser": true, "launchBrowser": true,
"launchUrl": "swagger", "launchUrl": "",
"applicationUrl": "https://localhost:7053;http://localhost:5037", "applicationUrl": "https://localhost:7053;http://localhost:5037",
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"
@@ -0,0 +1,43 @@
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Localization;
using OrchardCore.Contents;
using OrchardCore.Navigation;
using OrchardCore.Security.Permissions;
namespace ElectionSystem.Cms.PublicContent;
/// <summary>
/// Makes the fixed election disclosure sections visible in the CMS administration menu.
/// </summary>
public sealed class AdminMenu(IStringLocalizer<AdminMenu> stringLocalizer) : AdminNavigationProvider
{
private readonly IStringLocalizer _stringLocalizer = stringLocalizer;
protected override ValueTask BuildAsync(NavigationBuilder builder)
{
builder.Add(_stringLocalizer["Content"], content => content
.Add(_stringLocalizer["Information Disclosure"], "10", disclosure => disclosure
.AddClass("election-public-content")
.Id("election-public-content")
.LinkToFirstChild(true)
.Add(_stringLocalizer["Election Notices"], "1", item => AddContentList(item, "ElectionNotice"))
.Add(_stringLocalizer["Rules and Policies"], "2", item => AddContentList(item, "PolicyDocument"))
.Add(_stringLocalizer["Candidate Disclosures"], "3", item => AddContentList(item, "CandidateDisclosure"))
.Add(_stringLocalizer["Voter Guides"], "4", item => AddContentList(item, "VoterGuide"))
.Add(_stringLocalizer["Result Announcements"], "5", item => AddContentList(item, "ResultAnnouncement"))
.Add(_stringLocalizer["Frequently Asked Questions"], "6", item => AddContentList(item, "PublicFaq"))
.Add(_stringLocalizer["Downloads"], "7", item => AddContentList(item, "DownloadAsset"))
.Add(_stringLocalizer["Archives"], "8", item => AddContentList(item, "ArchiveRecord"))));
return ValueTask.CompletedTask;
}
private static NavigationItemBuilder AddContentList(NavigationItemBuilder item, string contentType) => item
.Action("List", "Admin", new RouteValueDictionary
{
["area"] = "OrchardCore.Contents",
["contentTypeId"] = contentType
})
.Permission(CommonPermissions.ListContent)
.LocalNav();
}
Loaded 3 of 9 files, more files were not shown because too many files have changed in this diff. Show more