├── .gitignore ├── LICENSE ├── README.en.md ├── README.md ├── doc ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png └── fscms同步加载wiki.gif ├── src ├── FsCms.Entity │ ├── ArticleComment.cs │ ├── ArticleContent.cs │ ├── ArticleType.cs │ ├── BaseEntity.cs │ ├── Common │ │ ├── DataPage.cs │ │ ├── EnumDescription.cs │ │ ├── PageInfo.cs │ │ ├── ServiceResult.cs │ │ ├── SortInfo.cs │ │ └── TreeNode.cs │ ├── Enum │ │ ├── CommonEnum.cs │ │ ├── MenuButton.cs │ │ ├── SortEnum.cs │ │ └── UserType.cs │ ├── FsCms.Entity.csproj │ ├── SiteInfo.cs │ ├── SysAttachment.cs │ ├── SysDictionary.cs │ ├── SysMenu.cs │ ├── SysMenuButton.cs │ ├── SysRole.cs │ ├── SysRoleButton.cs │ ├── SysRoleMenu.cs │ ├── SysUpdateLog.cs │ ├── SysUser.cs │ ├── SysUserRole.cs │ └── TemplateExample.cs ├── FsCms.Service │ ├── DAL │ │ ├── ArticleCommentDAL.cs │ │ ├── ArticleContentDAL.cs │ │ ├── ArticleTypeDAL.cs │ │ ├── BaseDAL.cs │ │ ├── Db.cs │ │ ├── SiteInfoDAL.cs │ │ ├── SysAttachmentDAL.cs │ │ ├── SysDictionaryDAL.cs │ │ ├── SysMenuButtonDAL.cs │ │ ├── SysMenuDAL.cs │ │ ├── SysRoleButtonDAL.cs │ │ ├── SysRoleDAL.cs │ │ ├── SysRoleMenuDAL.cs │ │ ├── SysUpdateLogDAL.cs │ │ ├── SysUserDAL.cs │ │ ├── SysUserRoleDAL.cs │ │ └── TemplateExampleDAL.cs │ ├── ExpressionBuilder.cs │ ├── Extensions │ │ └── AutoException.cs │ ├── FsCms.Service.csproj │ ├── Helper │ │ ├── AppSettingsManager.cs │ │ └── EnumHelper.cs │ ├── Ioc │ │ ├── IDependencyRegistrar.cs │ │ ├── IIocManager.cs │ │ ├── IRegisterByAttribute.cs │ │ ├── IRegisterByConstructor.cs │ │ ├── IRegisterFlag.cs │ │ ├── ISingletonDependency.cs │ │ ├── ITransientDependency.cs │ │ ├── IocManager.cs │ │ └── intercept │ │ │ └── AOPIntercept.cs │ ├── JqGridHelper.cs │ └── SysTool.cs ├── FsCms.Web │ ├── Areas │ │ └── Admin │ │ │ ├── Controllers │ │ │ ├── ArticleController.cs │ │ │ ├── ArticleTypeController.cs │ │ │ ├── HomeController.cs │ │ │ ├── LoginController.cs │ │ │ ├── ServiceController.cs │ │ │ ├── SiteInfoController.cs │ │ │ ├── SysDictionaryController.cs │ │ │ ├── SysMenuController.cs │ │ │ ├── SysRoleController.cs │ │ │ ├── SysUpdateLogController.cs │ │ │ ├── SysUserController.cs │ │ │ └── TemplateExampleController.cs │ │ │ ├── Models │ │ │ └── LoginModel.cs │ │ │ └── Views │ │ │ ├── Article │ │ │ ├── CreateModule.cshtml │ │ │ ├── Index.cshtml │ │ │ └── UpdateModule.cshtml │ │ │ ├── ArticleType │ │ │ ├── CreateModule.cshtml │ │ │ ├── Index.cshtml │ │ │ └── UpdateModule.cshtml │ │ │ ├── Home │ │ │ └── Index.cshtml │ │ │ ├── Login │ │ │ └── Index.cshtml │ │ │ ├── Service │ │ │ └── Error.cshtml │ │ │ ├── Shared │ │ │ └── _LayoutAdmin.cshtml │ │ │ ├── SiteInfo │ │ │ └── Index.cshtml │ │ │ ├── SysDictionary │ │ │ ├── CreateModule.cshtml │ │ │ ├── Index.cshtml │ │ │ └── UpdateModule.cshtml │ │ │ ├── SysMenu │ │ │ ├── CreateModule.cshtml │ │ │ ├── Index.cshtml │ │ │ └── UpdateModule.cshtml │ │ │ ├── SysRole │ │ │ ├── AuthModule.cshtml │ │ │ ├── CreateModule.cshtml │ │ │ ├── Index.cshtml │ │ │ └── UpdateModule.cshtml │ │ │ ├── SysUpdateLog │ │ │ ├── CreateModule.cshtml │ │ │ ├── Index.cshtml │ │ │ └── UpdateModule.cshtml │ │ │ ├── SysUser │ │ │ ├── CreateModule.cshtml │ │ │ ├── Index.cshtml │ │ │ └── UpdateModule.cshtml │ │ │ ├── TemplateExample │ │ │ ├── CreateModule.cshtml │ │ │ ├── Index.cshtml │ │ │ └── UpdateModule.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ └── _ViewStart.cshtml │ ├── Common │ │ ├── AutoMapperConfigs.cs │ │ ├── CommonExtensions.cs │ │ ├── Const │ │ │ ├── AreasName.cs │ │ │ └── AuthorizeName.cs │ │ ├── Help │ │ │ └── ReadWikiHepler.cs │ │ └── HtmlHelperViewExtensions.cs │ ├── Controllers │ │ ├── AdminBaseController1.cs │ │ ├── BBSController.cs │ │ ├── DocController.cs │ │ ├── ExampleController.cs │ │ ├── HomeController.cs │ │ └── TemplateController.cs │ ├── Dockerfile │ ├── Dockerfile.original │ ├── FsCms.Web.csproj │ ├── Models │ │ ├── ErrorViewModel.cs │ │ ├── ToolBarActionButton.cs │ │ └── TreeDataConvert.cs │ ├── Program.cs │ ├── Startup.cs │ ├── Startups │ │ ├── ControllerPack.cs │ │ ├── EntityPack.cs │ │ └── SeedData.cs │ ├── Views │ │ ├── BBS │ │ │ └── Index.cshtml │ │ ├── Doc │ │ │ ├── Create.cshtml │ │ │ ├── Details.cshtml │ │ │ └── Index.cshtml │ │ ├── Example │ │ │ └── Index.cshtml │ │ ├── Home │ │ │ ├── About.cshtml │ │ │ ├── Contact.cshtml │ │ │ ├── Header.cshtml │ │ │ ├── Index.cshtml │ │ │ └── Privacy.cshtml │ │ ├── Shared │ │ │ ├── Error.cshtml │ │ │ ├── _CookieConsentPartial.cshtml │ │ │ ├── _Layout.cshtml │ │ │ ├── _LayoutAdmin.cshtml │ │ │ └── _ValidationScriptsPartial.cshtml │ │ ├── Template │ │ │ └── Index.cshtml │ │ ├── _ViewImports.cshtml │ │ └── _ViewStart.cshtml │ ├── appsettings.Development.json │ ├── appsettings.json │ ├── wwwroot │ │ ├── css │ │ │ ├── admin.css │ │ │ ├── admin.min.css │ │ │ ├── app.css │ │ │ ├── login.css │ │ │ ├── login.min.css │ │ │ ├── site.css │ │ │ └── site.min.css │ │ ├── data2.json │ │ ├── demo1.json │ │ ├── favicon.ico │ │ ├── file │ │ │ ├── codefirst.md │ │ │ ├── dbfirst.md │ │ │ ├── delete.md │ │ │ ├── generator.md │ │ │ ├── insert.md │ │ │ ├── select.md │ │ │ └── update.md │ │ ├── images │ │ │ ├── banner1.jpg │ │ │ ├── banner1.svg │ │ │ ├── banner2.jpg │ │ │ ├── banner2.svg │ │ │ ├── banner3.jpg │ │ │ ├── banner3.svg │ │ │ ├── banner_index.jpg │ │ │ └── bg1.jpg │ │ ├── js │ │ │ ├── common.js │ │ │ ├── common.min.js │ │ │ ├── login.js │ │ │ ├── login.min.js │ │ │ ├── site.js │ │ │ └── site.min.js │ │ └── lib │ │ │ ├── JqGrid │ │ │ ├── css │ │ │ │ ├── ui.jqgrid-bootstrap-ui.css │ │ │ │ ├── ui.jqgrid-bootstrap.css │ │ │ │ └── ui.jqgrid.css │ │ │ ├── js │ │ │ │ ├── Changes.txt │ │ │ │ ├── i18n │ │ │ │ │ ├── grid.locale-ar.js │ │ │ │ │ ├── grid.locale-bg.js │ │ │ │ │ ├── grid.locale-ca.js │ │ │ │ │ ├── grid.locale-cn.js │ │ │ │ │ ├── grid.locale-cs.js │ │ │ │ │ ├── grid.locale-de.js │ │ │ │ │ ├── grid.locale-dk.js │ │ │ │ │ ├── grid.locale-el.js │ │ │ │ │ ├── grid.locale-en.js │ │ │ │ │ ├── grid.locale-es.js │ │ │ │ │ ├── grid.locale-fa.js │ │ │ │ │ ├── grid.locale-fi.js │ │ │ │ │ ├── grid.locale-fr.js │ │ │ │ │ ├── grid.locale-gl.js │ │ │ │ │ ├── grid.locale-he.js │ │ │ │ │ ├── grid.locale-hr.js │ │ │ │ │ ├── grid.locale-hu.js │ │ │ │ │ ├── grid.locale-id.js │ │ │ │ │ ├── grid.locale-is.js │ │ │ │ │ ├── grid.locale-it.js │ │ │ │ │ ├── grid.locale-ja.js │ │ │ │ │ ├── grid.locale-kr.js │ │ │ │ │ ├── grid.locale-lt.js │ │ │ │ │ ├── grid.locale-me.js │ │ │ │ │ ├── grid.locale-nl.js │ │ │ │ │ ├── grid.locale-no.js │ │ │ │ │ ├── grid.locale-pl.js │ │ │ │ │ ├── grid.locale-pt-br.js │ │ │ │ │ ├── grid.locale-pt.js │ │ │ │ │ ├── grid.locale-ro.js │ │ │ │ │ ├── grid.locale-ru.js │ │ │ │ │ ├── grid.locale-sk.js │ │ │ │ │ ├── grid.locale-sq.js │ │ │ │ │ ├── grid.locale-sr-latin.js │ │ │ │ │ ├── grid.locale-sr.js │ │ │ │ │ ├── grid.locale-sv.js │ │ │ │ │ ├── grid.locale-th.js │ │ │ │ │ ├── grid.locale-tr.js │ │ │ │ │ ├── grid.locale-tw.js │ │ │ │ │ ├── grid.locale-uk.js │ │ │ │ │ └── grid.locale-vi.js │ │ │ │ ├── install.txt │ │ │ │ ├── jquery-1.11.0.min.js │ │ │ │ └── jquery.jqGrid.min.js │ │ │ ├── plugins │ │ │ │ ├── grid.addons.js │ │ │ │ ├── grid.postext.js │ │ │ │ ├── grid.setcolumns.js │ │ │ │ ├── jquery.contextmenu.js │ │ │ │ ├── jquery.searchFilter.js │ │ │ │ ├── jquery.tablednd.js │ │ │ │ ├── searchFilter.css │ │ │ │ ├── ui.multiselect.css │ │ │ │ └── ui.multiselect.js │ │ │ └── src │ │ │ │ ├── css │ │ │ │ ├── ui.jqgrid-bootstrap-ui.css │ │ │ │ ├── ui.jqgrid-bootstrap.css │ │ │ │ ├── ui.jqgrid.css │ │ │ │ └── ui.multiselect.css │ │ │ │ ├── grid.base.js │ │ │ │ ├── grid.celledit.js │ │ │ │ ├── grid.common.js │ │ │ │ ├── grid.export.js │ │ │ │ ├── grid.filter.js │ │ │ │ ├── grid.formedit.js │ │ │ │ ├── grid.grouping.js │ │ │ │ ├── grid.import.js │ │ │ │ ├── grid.inlinedit.js │ │ │ │ ├── grid.jqueryui.js │ │ │ │ ├── grid.pivot.js │ │ │ │ ├── grid.subgrid.js │ │ │ │ ├── grid.treegrid.js │ │ │ │ ├── grid.utils.js │ │ │ │ ├── i18n │ │ │ │ ├── grid.locale-ar.js │ │ │ │ ├── grid.locale-bg.js │ │ │ │ ├── grid.locale-ca.js │ │ │ │ ├── grid.locale-cn.js │ │ │ │ ├── grid.locale-cs.js │ │ │ │ ├── grid.locale-de.js │ │ │ │ ├── grid.locale-dk.js │ │ │ │ ├── grid.locale-el.js │ │ │ │ ├── grid.locale-en.js │ │ │ │ ├── grid.locale-es.js │ │ │ │ ├── grid.locale-fa.js │ │ │ │ ├── grid.locale-fi.js │ │ │ │ ├── grid.locale-fr.js │ │ │ │ ├── grid.locale-gl.js │ │ │ │ ├── grid.locale-he.js │ │ │ │ ├── grid.locale-hr.js │ │ │ │ ├── grid.locale-hu.js │ │ │ │ ├── grid.locale-id.js │ │ │ │ ├── grid.locale-is.js │ │ │ │ ├── grid.locale-it.js │ │ │ │ ├── grid.locale-ja.js │ │ │ │ ├── grid.locale-kr.js │ │ │ │ ├── grid.locale-lt.js │ │ │ │ ├── grid.locale-me.js │ │ │ │ ├── grid.locale-nl.js │ │ │ │ ├── grid.locale-no.js │ │ │ │ ├── grid.locale-pl.js │ │ │ │ ├── grid.locale-pt-br.js │ │ │ │ ├── grid.locale-pt.js │ │ │ │ ├── grid.locale-ro.js │ │ │ │ ├── grid.locale-ru.js │ │ │ │ ├── grid.locale-sk.js │ │ │ │ ├── grid.locale-sq.js │ │ │ │ ├── grid.locale-sr-latin.js │ │ │ │ ├── grid.locale-sr.js │ │ │ │ ├── grid.locale-sv.js │ │ │ │ ├── grid.locale-th.js │ │ │ │ ├── grid.locale-tr.js │ │ │ │ ├── grid.locale-tw.js │ │ │ │ ├── grid.locale-uk.js │ │ │ │ └── grid.locale-vi.js │ │ │ │ ├── jqDnR.js │ │ │ │ ├── jqModal.js │ │ │ │ ├── jquery.fmatter.js │ │ │ │ ├── jquery.jqGrid.js │ │ │ │ └── jquery.sortable.js │ │ │ ├── bootstrap │ │ │ ├── .bower.json │ │ │ ├── LICENSE │ │ │ └── dist │ │ │ │ ├── css │ │ │ │ ├── bootstrap-theme.css │ │ │ │ ├── bootstrap-theme.css.map │ │ │ │ ├── bootstrap-theme.min.css │ │ │ │ ├── bootstrap-theme.min.css.map │ │ │ │ ├── bootstrap.css │ │ │ │ ├── bootstrap.css.map │ │ │ │ ├── bootstrap.min.css │ │ │ │ └── bootstrap.min.css.map │ │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ │ └── js │ │ │ │ ├── bootstrap.js │ │ │ │ ├── bootstrap.min.js │ │ │ │ └── npm.js │ │ │ ├── extends │ │ │ └── authtree.js │ │ │ ├── jquery-validation-unobtrusive │ │ │ ├── .bower.json │ │ │ ├── LICENSE.txt │ │ │ ├── jquery.validate.unobtrusive.js │ │ │ └── jquery.validate.unobtrusive.min.js │ │ │ ├── jquery-validation │ │ │ ├── .bower.json │ │ │ ├── LICENSE.md │ │ │ └── dist │ │ │ │ ├── additional-methods.js │ │ │ │ ├── additional-methods.min.js │ │ │ │ ├── jquery.validate.js │ │ │ │ └── jquery.validate.min.js │ │ │ ├── jquery │ │ │ ├── .bower.json │ │ │ ├── LICENSE.txt │ │ │ └── dist │ │ │ │ ├── jquery.js │ │ │ │ ├── jquery.min.js │ │ │ │ └── jquery.min.map │ │ │ └── layui │ │ │ ├── css │ │ │ ├── layui.css │ │ │ ├── layui.mobile.css │ │ │ └── modules │ │ │ │ ├── code.css │ │ │ │ ├── laydate │ │ │ │ └── default │ │ │ │ │ ├── font.css │ │ │ │ │ └── laydate.css │ │ │ │ ├── layer │ │ │ │ └── default │ │ │ │ │ ├── icon-ext.png │ │ │ │ │ ├── icon.png │ │ │ │ │ ├── layer.css │ │ │ │ │ ├── loading-0.gif │ │ │ │ │ ├── loading-1.gif │ │ │ │ │ └── loading-2.gif │ │ │ │ └── selectY.css │ │ │ ├── ext │ │ │ ├── laymd │ │ │ │ ├── laymd.css │ │ │ │ ├── laymd.js │ │ │ │ ├── marked.min.js │ │ │ │ └── preview.css │ │ │ └── treetable │ │ │ │ ├── css │ │ │ │ ├── frame.css │ │ │ │ └── globle.css │ │ │ │ └── img │ │ │ │ ├── header.png │ │ │ │ └── statistics.png │ │ │ ├── font │ │ │ ├── iconfont.eot │ │ │ ├── iconfont.svg │ │ │ ├── iconfont.ttf │ │ │ └── iconfont.woff │ │ │ ├── images │ │ │ └── face │ │ │ │ ├── 0.gif │ │ │ │ ├── 1.gif │ │ │ │ ├── 10.gif │ │ │ │ ├── 11.gif │ │ │ │ ├── 12.gif │ │ │ │ ├── 13.gif │ │ │ │ ├── 14.gif │ │ │ │ ├── 15.gif │ │ │ │ ├── 16.gif │ │ │ │ ├── 17.gif │ │ │ │ ├── 18.gif │ │ │ │ ├── 19.gif │ │ │ │ ├── 2.gif │ │ │ │ ├── 20.gif │ │ │ │ ├── 21.gif │ │ │ │ ├── 22.gif │ │ │ │ ├── 23.gif │ │ │ │ ├── 24.gif │ │ │ │ ├── 25.gif │ │ │ │ ├── 26.gif │ │ │ │ ├── 27.gif │ │ │ │ ├── 28.gif │ │ │ │ ├── 29.gif │ │ │ │ ├── 3.gif │ │ │ │ ├── 30.gif │ │ │ │ ├── 31.gif │ │ │ │ ├── 32.gif │ │ │ │ ├── 33.gif │ │ │ │ ├── 34.gif │ │ │ │ ├── 35.gif │ │ │ │ ├── 36.gif │ │ │ │ ├── 37.gif │ │ │ │ ├── 38.gif │ │ │ │ ├── 39.gif │ │ │ │ ├── 4.gif │ │ │ │ ├── 40.gif │ │ │ │ ├── 41.gif │ │ │ │ ├── 42.gif │ │ │ │ ├── 43.gif │ │ │ │ ├── 44.gif │ │ │ │ ├── 45.gif │ │ │ │ ├── 46.gif │ │ │ │ ├── 47.gif │ │ │ │ ├── 48.gif │ │ │ │ ├── 49.gif │ │ │ │ ├── 5.gif │ │ │ │ ├── 50.gif │ │ │ │ ├── 51.gif │ │ │ │ ├── 52.gif │ │ │ │ ├── 53.gif │ │ │ │ ├── 54.gif │ │ │ │ ├── 55.gif │ │ │ │ ├── 56.gif │ │ │ │ ├── 57.gif │ │ │ │ ├── 58.gif │ │ │ │ ├── 59.gif │ │ │ │ ├── 6.gif │ │ │ │ ├── 60.gif │ │ │ │ ├── 61.gif │ │ │ │ ├── 62.gif │ │ │ │ ├── 63.gif │ │ │ │ ├── 64.gif │ │ │ │ ├── 65.gif │ │ │ │ ├── 66.gif │ │ │ │ ├── 67.gif │ │ │ │ ├── 68.gif │ │ │ │ ├── 69.gif │ │ │ │ ├── 7.gif │ │ │ │ ├── 70.gif │ │ │ │ ├── 71.gif │ │ │ │ ├── 8.gif │ │ │ │ └── 9.gif │ │ │ ├── lay │ │ │ ├── all-mobile.js │ │ │ ├── all.js │ │ │ └── modules │ │ │ │ ├── authtree.js │ │ │ │ ├── carousel.js │ │ │ │ ├── code.js │ │ │ │ ├── colorpicker.js │ │ │ │ ├── element.js │ │ │ │ ├── flow.js │ │ │ │ ├── form.js │ │ │ │ ├── global.js │ │ │ │ ├── jquery.js │ │ │ │ ├── laydate.js │ │ │ │ ├── layedit.js │ │ │ │ ├── layer.js │ │ │ │ ├── laypage.js │ │ │ │ ├── laytpl.js │ │ │ │ ├── markdown.bak.js │ │ │ │ ├── markdown.full.js │ │ │ │ ├── markdown.js │ │ │ │ ├── mobile.js │ │ │ │ ├── mobile │ │ │ │ ├── layer-mobile.js │ │ │ │ ├── layim-mobile-open.js │ │ │ │ ├── upload-mobile.js │ │ │ │ └── zepto.js │ │ │ │ ├── rate.js │ │ │ │ ├── selectY.js │ │ │ │ ├── slider.js │ │ │ │ ├── table.js │ │ │ │ ├── tree.js │ │ │ │ ├── treeTable.js │ │ │ │ ├── upload.js │ │ │ │ └── util.js │ │ │ └── layui.js │ └── xxxtb.db └── FsCms.sln └── test └── TestConsole ├── App1.config ├── Program.cs └── TestConsole.csproj /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 hogan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.en.md: -------------------------------------------------------------------------------- 1 | # FreeSqlCms 2 | 3 | #### Description 4 | 内容管理系统,使用freesql进行开发 5 | 6 | #### Software Architecture 7 | Software architecture description 8 | 9 | #### Installation 10 | 11 | 1. xxxx 12 | 2. xxxx 13 | 3. xxxx 14 | 15 | #### Instructions 16 | 17 | 1. xxxx 18 | 2. xxxx 19 | 3. xxxx 20 | 21 | #### Contribution 22 | 23 | 1. Fork the repository 24 | 2. Create Feat_xxx branch 25 | 3. Commit your code 26 | 4. Create Pull Request 27 | 28 | 29 | #### Gitee Feature 30 | 31 | 1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md 32 | 2. Gitee blog [blog.gitee.com](https://blog.gitee.com) 33 | 3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) 34 | 4. The most valuable open source project [GVP](https://gitee.com/gvp) 35 | 5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) 36 | 6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #### 介绍 2 | 内容管理系统,动态同步md文件生成文档。 3 | 4 | #### 软件架构 5 | 6 | 1. Asp.net core mvc (已升级到.net core 3.1) 7 | 2. [FreeSql](https://github.com/2881099/FreeSql) 8 | 3. [Layui](https://www.layui.com/) 9 | 10 | #### 项目进度 11 | 12 | - [x] 接入FreeSql,封装数据库操作; 13 | - [x] 使用FreeSql,自由切换多种数据库,MySql/SqlServer/PostgreSQL/Oracle/Sqlite; 14 | - [x] 后台管理功能开发结果设计; 15 | - [x] 使用layui搭建后台开发框架,封装通用处理JS; 16 | - [x] AutoFac接入; 17 | - [x] 开发权限管理模块; 18 | - [x] 开发文章管理; 19 | - [x] 开发文章分类; 20 | - [ ] 开发模板管理模块; 21 | - [ ] 开发论坛管理模块; 22 | - [x] 设计与开发前端站点; 23 | - [x] 同步解析wiki目录; 24 | 25 | #### [码云地址](https://gitee.com/HoganCode/FreeSqlCms) 26 | 27 | #### 项目结果 28 | 29 | 30 | ![输入图片说明](./doc/1.png "1.png") 31 | 32 | #### 项目截图 33 | ![输入图片说明](./doc/2.png "2.png") 34 | 35 | ![输入图片说明](./doc/3.png "3.png") 36 | 37 | ![输入图片说明](./doc/4.png "4.png") 38 | 39 | ![输入图片说明](./doc/5.png "5.png") 40 | 41 | ![输入图片说明](./doc/6.png "6.png") 42 | 43 | ![输入图片说明](./doc/7.png "7.png") 44 | 45 | #### 同步操作说明 46 | ![同步操作说明](./doc/fscms同步加载wiki.gif) 47 | 48 | 1. Fork 本仓库 49 | 2. 新建 Feat_xxx 分支 50 | 3. 提交代码 51 | 4. 新建 Pull Request 52 | -------------------------------------------------------------------------------- /doc/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/doc/1.png -------------------------------------------------------------------------------- /doc/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/doc/2.png -------------------------------------------------------------------------------- /doc/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/doc/3.png -------------------------------------------------------------------------------- /doc/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/doc/4.png -------------------------------------------------------------------------------- /doc/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/doc/5.png -------------------------------------------------------------------------------- /doc/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/doc/6.png -------------------------------------------------------------------------------- /doc/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/doc/7.png -------------------------------------------------------------------------------- /doc/fscms同步加载wiki.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/doc/fscms同步加载wiki.gif -------------------------------------------------------------------------------- /src/FsCms.Entity/ArticleComment.cs: -------------------------------------------------------------------------------- 1 | //using FreeSql.DataAnnotations; 2 | using FreeSql.DataAnnotations; 3 | using System; 4 | using System.ComponentModel.DataAnnotations; 5 | 6 | namespace FsCms.Entity 7 | { 8 | public class ArticleComment:BaseEntity 9 | { 10 | /// 11 | /// 功能类型(文章、模板、示例等) 12 | /// 13 | public int FunctionType { get; set; } 14 | 15 | /// 16 | /// 功能ID 文章、模板、示例等 17 | /// 18 | public int FunctionID { get; set; } 19 | 20 | /// 21 | /// 是否匿名访问 22 | /// 23 | public int IsAnonymous { get; set; } 24 | 25 | /// 26 | /// 评论人 27 | /// 28 | [MaxLength(100)] 29 | public string Commentator { get; set; } 30 | 31 | /// 32 | /// 评论者IP 33 | /// 34 | [MaxLength(100)] 35 | public string CommentatorIp { get; set; } 36 | 37 | /// 38 | /// 回复评论编号 39 | /// 40 | public int ReplyID { get; set; } 41 | 42 | /// 43 | /// 评论内容 44 | /// 45 | [Column(DbType = "text")] 46 | public string CommentContent { get; set; } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/FsCms.Entity/ArticleContent.cs: -------------------------------------------------------------------------------- 1 | //using FreeSql.DataAnnotations; 2 | using FreeSql.DataAnnotations; 3 | using System; 4 | using System.ComponentModel.DataAnnotations; 5 | 6 | namespace FsCms.Entity 7 | { 8 | /// 9 | /// 数据库实体 10 | /// 11 | public class ArticleContent : BaseEntity 12 | { 13 | /// 14 | /// 类型编号 15 | /// 16 | public long? TypeID { get; set; } 17 | 18 | /// 19 | /// 父节点文章 20 | /// 21 | public long? ParentArticleID { get; set; } 22 | 23 | /// 24 | /// 标题 25 | /// 26 | [MaxLength(200)] 27 | public string Title { get; set; } 28 | 29 | /// 30 | /// 摘要 31 | /// 32 | [MaxLength(500)] 33 | public string Abstract { get; set; } 34 | 35 | /// 36 | /// 内容来源类型(0 当前记录 1=Url地址 37 | /// 38 | public int OriginType { get; set; } 39 | 40 | /// 41 | /// 来源地址 42 | /// 43 | [MaxLength(200)] 44 | public string OriginUrl { get; set; } 45 | 46 | /// 47 | /// 编辑器模式 (=0 Markdown =1 HTML编辑器 ) 48 | /// 49 | public int EditorMode { get; set; } 50 | 51 | /// 52 | /// 文档内容 53 | /// 54 | [Column(DbType = "text")] 55 | public string DocContent { get; set; } 56 | 57 | /// 58 | /// 查看次数 59 | /// 60 | public int WatchCount { get; set; } 61 | 62 | /// 63 | /// Star统计 64 | /// 65 | public int StarCount { get; set; } 66 | 67 | /// 68 | /// 序号 69 | /// 70 | public int SortNum { get; set; } 71 | 72 | /// 73 | /// 修改时间 74 | /// 75 | public DateTime? UpdateDt { get; set; } 76 | 77 | /// 78 | /// 修改人 79 | /// 80 | public string UpdateBy { get; set; } 81 | 82 | /// 83 | /// 层级编码 84 | /// 85 | public int LevelNum { get; set; } = 0; 86 | } 87 | 88 | /// 89 | /// 返回实体内容 90 | /// 91 | public class DocumentContentView : ArticleContent 92 | { 93 | 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /src/FsCms.Entity/ArticleType.cs: -------------------------------------------------------------------------------- 1 | //using FreeSql.DataAnnotations; 2 | using FreeSql.DataAnnotations; 3 | using FsCms.Entity.Common; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.ComponentModel.DataAnnotations; 7 | using System.Linq; 8 | 9 | namespace FsCms.Entity 10 | { 11 | public class ArticleType : BaseEntity 12 | { 13 | /// 14 | /// 类型名称 15 | /// 16 | [MaxLength(100)] 17 | public string TypeName { get; set; } 18 | 19 | /// 20 | /// 上级类型名称 21 | /// 22 | public long? UpID { get; set; } 23 | 24 | /// 25 | /// 序号 26 | /// 27 | public int SortNum { get; set; } 28 | 29 | /// 30 | /// 标签 31 | /// 32 | [MaxLength(200)] 33 | public string Tag { get; set; } 34 | 35 | public DateTime? UpdateDt { get; set; } 36 | 37 | public string UpdateBy { get; set; } 38 | } 39 | 40 | /// 41 | /// 类型树形结构 42 | /// 43 | public class ArticleTypeTreeNode : TreeNode 44 | { 45 | public ArticleTypeTreeNode() 46 | { 47 | 48 | } 49 | 50 | 51 | //构造函数自动转换层级 52 | public ArticleTypeTreeNode(List list, ArticleType t) 53 | { 54 | this.id = t.Id.ToString(); 55 | this.name = t.TypeName; 56 | this.pid = t.UpID.ToString(); 57 | this.tag = t.Tag; 58 | this.createdt = t.CreateDt; 59 | this.children = (from p in list 60 | where p.UpID == t.Id 61 | select new ArticleTypeTreeNode(list, p) { }).ToList(); 62 | } 63 | 64 | /// 65 | /// 标签 66 | /// 67 | public string tag { get; set; } 68 | 69 | /// 70 | /// 创建时间 71 | /// 72 | public DateTime? createdt { get; set; } 73 | 74 | /// 75 | /// 子集节点 76 | /// 77 | public List children { get; set; } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/FsCms.Entity/BaseEntity.cs: -------------------------------------------------------------------------------- 1 | //using FreeSql.DataAnnotations; 2 | using FreeSql.DataAnnotations; 3 | using System; 4 | using System.ComponentModel.DataAnnotations; 5 | 6 | namespace FsCms.Entity 7 | { 8 | public class BaseEntity 9 | { 10 | [Column(IsIdentity = true, IsPrimary = true)] 11 | public long Id { get; set; } = 0; 12 | 13 | /// 14 | /// 状态 15 | /// 16 | public int Status { get; set; } = 1; 17 | 18 | public DateTime? CreateDt { get; set; } = DateTime.Now; 19 | 20 | [MaxLength(50)] 21 | public string CreateBy { get; set; } = "admin"; 22 | 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/FsCms.Entity/Common/DataPage.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace FsCms.Entity.Common 6 | { 7 | /// 8 | /// 列表数据返回对象 9 | /// 10 | /// 11 | public class DataPage 12 | where T : class 13 | { 14 | /// 15 | /// 返回成功与否 16 | /// 17 | public string code { get; set; } 18 | 19 | /// 20 | /// 如果返回报错,具体报错内容 21 | /// 22 | public string msg { get; set; } 23 | 24 | /// 25 | /// 总计记录行数 26 | /// 27 | public long count { get; set; } 28 | 29 | /// 30 | /// 返回具体的数据 31 | /// 32 | public List data { get; set; } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/FsCms.Entity/Common/PageInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace FsCms.Entity.Common 6 | { 7 | /// 8 | /// 列表数据返回对象 9 | /// 10 | /// 11 | public class PageInfo 12 | { 13 | /// 14 | /// 排序字段 15 | /// 16 | public string Order { get; set; } 17 | 18 | /// 19 | /// 页码 20 | /// 21 | public int PageIndex { get; set; } 22 | 23 | /// 24 | /// 页记录数 25 | /// 26 | public int PageSize { get; set; } 27 | 28 | /// 29 | /// 排序方式 30 | /// 31 | public string Sort { get; set; } 32 | 33 | /// 34 | /// 总计数量 35 | /// 36 | public int Total { get; set; } 37 | 38 | /// 39 | /// 是否获取总数 40 | /// 41 | public bool IsPaging { get; set; } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/FsCms.Entity/Common/ServiceResult.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.Threading.Tasks; 5 | 6 | namespace FsCms.Entity.Common 7 | { 8 | /// 9 | /// ServiceResult操作结果 10 | /// 11 | public enum EnumServiceResult 12 | { 13 | /// 14 | /// 操作成功 15 | /// 16 | Success = 1, 17 | /// 18 | /// 操作失败 19 | /// 20 | Failure = 0 21 | } 22 | 23 | /// 24 | /// 方法错误结果 25 | /// 26 | [Serializable] 27 | public class ServiceResult 28 | { 29 | /// 30 | /// 返回结果 =1 表示成功 否则失败 31 | /// 32 | public int Status { get; set; } 33 | 34 | /// 35 | /// 返回结果信息 36 | /// 37 | public string Msg { get; set; } 38 | } 39 | 40 | [Serializable] 41 | public class ServiceResult : ServiceResult 42 | { 43 | /// 44 | /// 数据返回 45 | /// 46 | public T Data { get; set; } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/FsCms.Entity/Common/SortInfo.cs: -------------------------------------------------------------------------------- 1 | using FsCms.Entity.Enum; 2 | using System; 3 | using System.Collections; 4 | using System.Collections.Generic; 5 | using System.Linq.Expressions; 6 | using System.Reflection; 7 | using System.Text; 8 | 9 | namespace FsCms.Entity 10 | { 11 | /// 12 | /// 列表数据返回对象 13 | /// 14 | /// 15 | public class SortInfo 16 | { 17 | /// 18 | /// 排序字段 19 | /// 20 | public Expression> Orderby { get; set; } 21 | 22 | /// 23 | /// 页码 24 | /// 25 | public SortEnum SortMethods { get; set; } 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/FsCms.Entity/Common/TreeNode.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace FsCms.Entity.Common 6 | { 7 | public class TreeNode 8 | { 9 | public string id { get; set; } 10 | 11 | public string pid { get; set; } 12 | 13 | public string name { get; set; } 14 | public string title { get; set; } 15 | 16 | public bool disabled { get; set; } 17 | 18 | /// 19 | /// 是否选中 20 | /// 21 | public bool ischecked { get; set; } = false; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/FsCms.Entity/Enum/CommonEnum.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace FsCms.Entity.Enum 6 | { 7 | /// 8 | /// 用户类型 9 | /// 10 | public enum ExampleOrTemplate 11 | { 12 | Other = 0, 13 | Example = 1, 14 | Template = 2 15 | } 16 | 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/FsCms.Entity/Enum/MenuButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace FsCms.Entity.Enum 6 | { 7 | public enum SysModuleButtonCategory 8 | { 9 | [EnumDescription("公共")] 10 | GeneralButton = 0, 11 | [EnumDescription("工具条按钮")] 12 | ToolbarButton = 1, 13 | [EnumDescription("列表按钮")] 14 | ListButton = 2 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/FsCms.Entity/Enum/SortEnum.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace FsCms.Entity.Enum 6 | { 7 | /// 8 | /// 用户类型 9 | /// 10 | public enum SortEnum 11 | { 12 | Asc = 1, 13 | Desc = 2 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/FsCms.Entity/Enum/UserType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace FsCms.Entity.Enum 6 | { 7 | /// 8 | /// 用户类型 9 | /// 10 | public enum UserType 11 | { 12 | SuperUser = 1, 13 | OrdinaryUser = 2 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/FsCms.Entity/FsCms.Entity.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netstandard2.1 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/FsCms.Entity/SiteInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel.DataAnnotations; 4 | using System.Text; 5 | 6 | namespace FsCms.Entity 7 | { 8 | public class SiteInfo : BaseEntity 9 | { 10 | /// 11 | /// 站点信息 12 | /// 13 | [MaxLength(200)] 14 | public string SiteName { get; set; } 15 | 16 | /// 17 | /// 标题语 18 | /// 19 | [MaxLength(500)] 20 | public string Headline { get; set; } 21 | 22 | /// 23 | /// 摘要 24 | /// 25 | [MaxLength(500)] 26 | public string Abstract { get; set; } 27 | 28 | 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/FsCms.Entity/SysAttachment.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel.DataAnnotations; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FsCms.Entity 9 | { 10 | public class SysAttachment:BaseEntity 11 | { 12 | [Required] 13 | [MaxLength(100)] 14 | [Display(Name = "附件名称")] 15 | public string FileName { get; set; } 16 | 17 | [Required] 18 | [Display(Name = "附件大小")] 19 | public int? FileSize { get; set; } 20 | 21 | [MaxLength(10)] 22 | [Display(Name = "附件扩展名")] 23 | public string ExtName { get; set; } 24 | 25 | [MaxLength(50)] 26 | [Display(Name = "保存的文件名称")] 27 | public string LocalName { get; set; } 28 | 29 | [MaxLength(200)] 30 | [Display(Name = "附件路径")] 31 | public string FilePath { get; set; } 32 | 33 | [Display(Name = "所属对象编号")] 34 | public string objectid { get; set; } 35 | 36 | /// 37 | /// 38 | /// 39 | /// 20 保险单的图片 40 | /// 21 保险单的文件 41 | /// 42 | [Required] 43 | [Display(Name = "附件标识")] 44 | public int? objectflag { get; set; } 45 | 46 | /// 47 | /// 操作人 48 | /// 49 | [MaxLength(50)] 50 | [Display(Name = "操作人")] 51 | public string UpdateBy { get; set; } 52 | 53 | /// 54 | /// 操作时间 55 | /// 56 | [Display(Name = "操作时间")] 57 | public DateTime? UpdateDt { get; set; } 58 | 59 | 60 | } 61 | } 62 | 63 | 64 | -------------------------------------------------------------------------------- /src/FsCms.Entity/SysDictionary.cs: -------------------------------------------------------------------------------- 1 | using FsCms.Entity.Common; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel.DataAnnotations; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | 9 | namespace FsCms.Entity 10 | { 11 | public class SysDictionary : BaseEntity 12 | { 13 | [Required] 14 | [MaxLength(300)] 15 | [Display(Name = "字典名称")] 16 | public string DictName { get; set; } 17 | 18 | [Required] 19 | [MaxLength(200)] 20 | [Display(Name = "字典编号")] 21 | public string DictNo { get; set; } 22 | 23 | [Display(Name = "父节点ID")] 24 | public long? ParentID { get; set; } 25 | 26 | [Display(Name = "排序")] 27 | public int? Sort { get; set; } 28 | 29 | [MaxLength(250)] 30 | [Display(Name = "描述")] 31 | public string Description { get; set; } 32 | 33 | /// 34 | /// 操作人 35 | /// 36 | [MaxLength(50)] 37 | [Display(Name = "操作人")] 38 | public string UpdateBy { get; set; } 39 | 40 | /// 41 | /// 操作时间 42 | /// 43 | [Display(Name = "操作时间")] 44 | public DateTime? UpdateDt { get; set; } 45 | 46 | [Newtonsoft.Json.JsonIgnore] 47 | public virtual SysDictionary Parent { get; set; } 48 | } 49 | 50 | /// 51 | /// 类型树形结构 52 | /// 53 | public class SysDictionaryTreeNode : TreeNode 54 | { 55 | public SysDictionaryTreeNode() 56 | { 57 | 58 | } 59 | 60 | 61 | //构造函数自动转换层级 62 | public SysDictionaryTreeNode(List list, SysDictionary t) 63 | { 64 | this.id = t.Id.ToString(); 65 | this.name = t.DictName; 66 | this.pid = t.ParentID.ToString(); 67 | this.Description = t.Description; 68 | this.DictNo = t.DictNo; 69 | this.createdt = t.CreateDt; 70 | this.children = (from p in list 71 | where p.ParentID == t.Id 72 | select new SysDictionaryTreeNode(list, p) { }).ToList(); 73 | } 74 | 75 | /// 76 | /// 菜单地址 77 | /// 78 | public string DictNo { get; set; } 79 | 80 | /// 81 | /// 菜单图标 82 | /// 83 | public string IconUrl { get; set; } 84 | 85 | /// 86 | /// 子集节点 87 | /// 88 | public List children { get; set; } 89 | 90 | /// 91 | /// 标签 92 | /// 93 | public string Description { get; set; } 94 | 95 | /// 96 | /// 创建时间 97 | /// 98 | public DateTime? createdt { get; set; } 99 | 100 | } 101 | 102 | } 103 | 104 | 105 | -------------------------------------------------------------------------------- /src/FsCms.Entity/SysMenuButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel.DataAnnotations; 4 | using System.ComponentModel.DataAnnotations.Schema; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | 9 | namespace FsCms.Entity 10 | { 11 | [Serializable] 12 | public class SysMenuButton : BaseEntity 13 | { 14 | [MaxLength(20)] 15 | [Display(Name = "编按钮码")] 16 | public string ButtonCode { get; set; } 17 | 18 | [MaxLength(50)] 19 | [Display(Name = "按钮名称")] 20 | public string ButtonName { get; set; } 21 | 22 | [Display(Name = "所属模块ID")] 23 | public long MenuID { get; set; } 24 | 25 | [Display(Name = "分类")] 26 | public int Category { get; set; } 27 | 28 | [Display(Name = "序号")] 29 | public int Sort { get; set; } 30 | 31 | [MaxLength(500)] 32 | [Display(Name = "备注")] 33 | public string Remark { get; set; } 34 | 35 | [Newtonsoft.Json.JsonIgnore] 36 | [ForeignKey("MenuId")] 37 | public virtual SysMenu Menu { get; set; } 38 | } 39 | } 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/FsCms.Entity/SysRole.cs: -------------------------------------------------------------------------------- 1 | using FreeSql.DataAnnotations; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel.DataAnnotations; 5 | 6 | namespace FsCms.Entity 7 | { 8 | public class SysRole : BaseEntity 9 | { 10 | [Display(Name = "角色编码")] 11 | [MaxLength(50)] 12 | public string RoleCode { get; set; } 13 | 14 | [MaxLength(100)] 15 | [Display(Name = "角色名称")] 16 | public string RoleName { get; set; } 17 | 18 | [MaxLength(500)] 19 | [Display(Name = "描述")] 20 | public string Description { get; set; } 21 | 22 | [MaxLength(50)] 23 | [Display(Name = "修改人")] 24 | public string UpdateBy { get; set; } 25 | 26 | [Display(Name = "修改时间")] 27 | public DateTime? UpdateDt { get; set; } 28 | 29 | [Display(Name = "来源类型 =1 商家添加 否则为商家添加")] 30 | public int OriginType { get; set; } 31 | 32 | [Newtonsoft.Json.JsonIgnore] 33 | public virtual List SysRoleMenu { get; set; } 34 | 35 | } 36 | 37 | public class SysRoleView : SysRole 38 | { 39 | /// 40 | /// 授权菜单权限id 41 | /// 42 | public string authids { get; set; } 43 | 44 | /// 45 | /// 授权菜单按钮权限id 46 | /// 47 | public string btnids { get; set; } 48 | } 49 | } 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/FsCms.Entity/SysRoleButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel.DataAnnotations; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FsCms.Entity 9 | { 10 | public class SysRoleButton : BaseEntity 11 | { 12 | [Required] 13 | [Display(Name = "角色ID")] 14 | public long RoleId { get; set; } 15 | 16 | [Required] 17 | [Display(Name = "按钮ID")] 18 | public long ButtonId{ get; set; } 19 | 20 | /// 21 | /// 操作人 22 | /// 23 | [MaxLength(50)] 24 | [Display(Name = "操作人")] 25 | public string UpdateBy { get; set; } 26 | 27 | /// 28 | /// 操作时间 29 | /// 30 | [Display(Name = "操作时间")] 31 | public DateTime? UpdateDt { get; set; } 32 | 33 | 34 | } 35 | } 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/FsCms.Entity/SysRoleMenu.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | using System.ComponentModel.DataAnnotations.Schema; 4 | 5 | namespace FsCms.Entity 6 | { 7 | public class SysRoleMenu : BaseEntity 8 | { 9 | [Display(Name = "角色ID")] 10 | public long RoleId { get; set; } 11 | 12 | [Display(Name = "菜单ID")] 13 | public long MenuId { get; set; } 14 | 15 | [Display(Name = "授权按钮")] 16 | [MaxLength(100)] 17 | public string ButtonCodes { get; set; } 18 | 19 | [Newtonsoft.Json.JsonIgnore] 20 | [ForeignKey("MenuId")] 21 | public virtual SysMenu Menu { get; set; } 22 | 23 | [Newtonsoft.Json.JsonIgnore] 24 | [ForeignKey("RoleId")] 25 | public virtual SysRole Role { get; set; } 26 | } 27 | } 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/FsCms.Entity/SysUpdateLog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel.DataAnnotations; 4 | using System.Text; 5 | 6 | namespace FsCms.Entity 7 | { 8 | /// 9 | /// 系统更新日志 10 | /// 11 | public class SysUpdateLog : BaseEntity 12 | { 13 | /// 14 | /// 版本号 15 | /// 16 | [MaxLength(20)] 17 | public string VersionNum { get; set; } 18 | 19 | /// 20 | /// 版本说明 21 | /// 22 | [MaxLength(500)] 23 | public string Remark { get; set; } 24 | 25 | /// 26 | /// 操作人 27 | /// 28 | [MaxLength(50)] 29 | [Display(Name = "操作人")] 30 | public string UpdateBy { get; set; } 31 | 32 | /// 33 | /// 操作时间 34 | /// 35 | [Display(Name = "操作时间")] 36 | public DateTime? UpdateDt { get; set; } 37 | 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/FsCms.Entity/SysUser.cs: -------------------------------------------------------------------------------- 1 | using FreeSql.DataAnnotations; 2 | using FsCms.Entity.Enum; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.ComponentModel.DataAnnotations; 6 | 7 | namespace FsCms.Entity 8 | { 9 | public class SysUser : BaseEntity 10 | { 11 | [MaxLength(50)] 12 | public string UserName { get; set; } 13 | 14 | [Display(Name = "密码")] 15 | [MaxLength(50)] 16 | public string Password { get; set; } 17 | 18 | [MaxLength(100)] 19 | [Display(Name = "姓名")] 20 | public string RealName { get; set; } 21 | 22 | [MaxLength(500)] 23 | [Display(Name = "头像")] 24 | public string Img { get; set; } 25 | 26 | [Display(Name = "用户类别")] 27 | [Column(MapType = typeof(int))] 28 | public UserType UserType { get; set; } 29 | 30 | [MaxLength(50)] 31 | [RegularExpression(@"^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$")] 32 | [Display(Name = "邮箱")] 33 | public string Email { get; set; } 34 | 35 | [MaxLength(15)] 36 | [Display(Name = "联系电话")] 37 | public string MobilePhone { get; set; } 38 | 39 | [MaxLength(36)] 40 | [Display(Name = "所属组织")] 41 | public string OrgID { get; set; } 42 | 43 | [MaxLength(50)] 44 | [Display(Name = "最后访问IP")] 45 | public string LastViewIP { get; set; } 46 | 47 | [Display(Name = "最后访问时间")] 48 | public DateTime? LastViewDate { get; set; } 49 | 50 | [MaxLength(50)] 51 | [Display(Name = "修改人")] 52 | public string UpdateBy { get; set; } 53 | 54 | [Display(Name = "修改时间")] 55 | public DateTime? UpdateDt { get; set; } 56 | 57 | [Display(Name = "微信OpenId")] 58 | [MaxLength(50)] 59 | public string OpenId { get; set; } 60 | 61 | [Display(Name = "备注")] 62 | [MaxLength(500)] 63 | public string Remark { get; set; } 64 | 65 | } 66 | 67 | 68 | public class SysUserView : SysUser 69 | { 70 | /// 71 | /// 用户角色 72 | /// 73 | public string userrole { get; set; } 74 | } 75 | } 76 | 77 | 78 | -------------------------------------------------------------------------------- /src/FsCms.Entity/SysUserRole.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | using System.ComponentModel.DataAnnotations.Schema; 3 | 4 | namespace FsCms.Entity 5 | { 6 | public class SysUserRole : BaseEntity 7 | { 8 | [Display(Name = "角色ID")] 9 | public long RoleId { get; set; } 10 | 11 | [Display(Name = "用户ID")] 12 | public long UserId { get; set; } 13 | 14 | [Newtonsoft.Json.JsonIgnore] 15 | [ForeignKey("UserId")] 16 | public virtual SysUser User { get; set; } 17 | 18 | [Newtonsoft.Json.JsonIgnore] 19 | [ForeignKey("RoleId")] 20 | public virtual SysRole Role { get; set; } 21 | } 22 | 23 | public class SysUserRoleView : SysUserRole 24 | { 25 | public string UserName { get; set; } 26 | 27 | public string RealName { get; set; } 28 | 29 | public string RoleName { get; set; } 30 | 31 | public string RoleCode { get; set; } 32 | 33 | } 34 | } 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/FsCms.Entity/TemplateExample.cs: -------------------------------------------------------------------------------- 1 | using FreeSql.DataAnnotations; 2 | using FsCms.Entity.Enum; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.ComponentModel.DataAnnotations; 6 | using System.Text; 7 | 8 | namespace FsCms.Entity 9 | { 10 | /// 11 | /// 模板示例 12 | /// 13 | public class TemplateExample : BaseEntity 14 | { 15 | /// 16 | /// 类型编号 17 | /// 18 | [Display(Name = "分类编号")] 19 | public long? TypeID { get; set; } 20 | 21 | /// 22 | /// 数据类型(示例或者模板) 23 | /// 24 | [Display(Name = "数据类型")] 25 | [Column(MapType = typeof(int))] 26 | public ExampleOrTemplate? DataType { get; set; } 27 | 28 | /// 29 | /// 模板图片 30 | /// 31 | [MaxLength(2000)] 32 | public string TemplateImg { get; set; } 33 | 34 | /// 35 | /// 模板名称 36 | /// 37 | [Display(Name = "模板名称")] 38 | [MaxLength(100)] 39 | public string TempateName { get; set; } 40 | 41 | /// 42 | /// 描述 43 | /// 44 | [Display(Name = "描述")] 45 | [Column(DbType = "text")] 46 | public string Describe { get; set; } 47 | 48 | /// 49 | /// 模板路径 例如Github地址 50 | /// 51 | [Display(Name = "模板路径")] 52 | [MaxLength(300)] 53 | 54 | public string TemplatePath { get; set; } 55 | 56 | /// 57 | /// 查看次数 58 | /// 59 | [Display(Name = "查看次数")] 60 | 61 | public int WatchCount { get; set; } 62 | 63 | /// 64 | /// 下载统计 65 | /// 66 | [Display(Name = "下载统计")] 67 | 68 | public int DownloadCount { get; set; } 69 | 70 | /// 71 | /// Star统计 72 | /// 73 | [Display(Name = "Star统计")] 74 | 75 | public int StarCount { get; set; } 76 | 77 | /// 78 | /// 修改时间 79 | /// 80 | [Display(Name = "修改时间")] 81 | 82 | public DateTime? UpdateDt { get; set; } 83 | 84 | /// 85 | /// 修改人 86 | /// 87 | [Display(Name = "修改人")] 88 | [MaxLength(50)] 89 | public string UpdateBy { get; set; } 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/ArticleCommentDAL.cs: -------------------------------------------------------------------------------- 1 | using FsCms.Entity; 2 | 3 | namespace FsCms.Service.DAL 4 | { 5 | public class ArticleCommentDAL : BaseDAL, Ioc.ISingletonDependency 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/ArticleContentDAL.cs: -------------------------------------------------------------------------------- 1 | using FsCms.Entity; 2 | 3 | namespace FsCms.Service.DAL 4 | { 5 | public class ArticleContentDAL : BaseDAL, Ioc.ISingletonDependency 6 | { 7 | ///// 8 | ///// 新增 9 | ///// 10 | ///// 11 | ///// 12 | //public long Insert(DocumentContent model) 13 | //{ 14 | // return DbType.DB().Insert(model).ExecuteIdentity(); 15 | //} 16 | 17 | ///// 18 | ///// 修改 19 | ///// 20 | ///// 21 | ///// 22 | //public bool Update(DocumentContent model) 23 | //{ 24 | // var runsql = DbType.DB().Update().SetSource(model); 25 | // return runsql.ExecuteAffrows() > 0; 26 | //} 27 | 28 | ///// 29 | ///// 删除 30 | ///// 31 | ///// 32 | ///// 33 | //public bool Delete(long id) 34 | //{ 35 | // return DbType.DB().Delete(id).ExecuteDeleted().Count > 0; 36 | //} 37 | 38 | ///// 39 | ///// 获取一条数据 40 | ///// 41 | ///// 42 | ///// 43 | //public DocumentContent GetByOne(Expression> where) 44 | //{ 45 | // return DbType.DB().Select() 46 | // .Where(where).ToOne(); 47 | //} 48 | 49 | 50 | ///// 51 | ///// 获取一条数据 52 | ///// 53 | ///// 54 | ///// 55 | //public long Count(Expression> where) 56 | //{ 57 | // return DbType.DB().Select() 58 | // .Where(where).Count(); 59 | //} 60 | 61 | ///// 62 | ///// 查询功能 63 | ///// 64 | ///// 65 | ///// 66 | ///// 67 | //public (List list, long count) Query(Expression> where, 68 | // Expression> orderby = null, PageInfo pageInfo = null) 69 | //{ 70 | // //设置查询条件 71 | // var list = DbType.DB().Select() 72 | // .Where(where); 73 | 74 | // //设置排序 75 | // if (orderby != null) list = list.OrderBy(b => b.CreateDt); 76 | 77 | // var count = list.Count(); 78 | // //设置分页操作 79 | // if (pageInfo != null && pageInfo.IsPaging) 80 | // list.Skip(pageInfo.PageIndex * pageInfo.PageSize).Limit(pageInfo.PageSize); 81 | 82 | // //执行查询 83 | // return (list.ToList(), count); 84 | //} 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/ArticleTypeDAL.cs: -------------------------------------------------------------------------------- 1 | //using FsCms.Entity; 2 | using FsCms.Entity; 3 | using FsCms.Entity.Common; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq.Expressions; 7 | using System.Text; 8 | 9 | namespace FsCms.Service.DAL 10 | { 11 | public class ArticleTypeDAL : BaseDAL, Ioc.ISingletonDependency 12 | { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/Db.cs: -------------------------------------------------------------------------------- 1 | using FreeSql; 2 | using FsCms.Service.Helper; 3 | using System; 4 | using System.Diagnostics; 5 | using System.Linq; 6 | using System.Reflection; 7 | 8 | namespace FsCms.Service.DAL 9 | { 10 | public static class Db 11 | { 12 | public static System.Collections.Generic.Dictionary ConnectionPool = new System.Collections.Generic.Dictionary(); 13 | 14 | private static string getConnectionString(string sDatabaseType) 15 | { 16 | return AppSettingsManager.Get($"DbContexts:{sDatabaseType}:ConnectionString"); 17 | } 18 | 19 | private static IFreeSql SelectDBType(DataType enum_dbtype) 20 | { 21 | var dbtype = enum_dbtype.ToString(); 22 | if (!ConnectionPool.ContainsKey(dbtype)) 23 | { 24 | var freesql = new FreeSql.FreeSqlBuilder() 25 | .UseConnectionString(enum_dbtype, getConnectionString(dbtype)) 26 | .UseAutoSyncStructure(true) 27 | .UseMonitorCommand( 28 | cmd => 29 | { 30 | Trace.WriteLine(cmd.CommandText); 31 | }, //监听SQL命令对象,在执行前 32 | (cmd, traceLog) => 33 | { 34 | Console.WriteLine(traceLog); 35 | }) //监听SQL命令对象,在执行后 36 | .UseLazyLoading(true) 37 | .Build(); 38 | 39 | freesql.Aop.ConfigEntityProperty += Aop_ConfigEntityProperty; 40 | 41 | ConnectionPool.Add(dbtype, freesql); 42 | } 43 | return ConnectionPool[dbtype]; 44 | } 45 | 46 | private static void Aop_ConfigEntityProperty(object s, FreeSql.Aop.ConfigEntityPropertyEventArgs e) 47 | { 48 | //默认设置主键 49 | if (e.Property.GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.KeyAttribute), false).Any()) 50 | { 51 | e.ModifyResult.IsPrimary = true; 52 | } 53 | ////设置maxlength 54 | //if (e.Property.PropertyType == typeof(string)) 55 | //{ 56 | // var strLen = e.Property.GetCustomAttribute(); 57 | // if (strLen != null) 58 | // { 59 | // e.ModifyResult.DbType = FreeSql.ICodeFirst.GetDbInfo(e.Property.PropertyType)?.dbtype + "(" + strLen.Length + ")"; 60 | // } 61 | //} 62 | } 63 | 64 | public static IFreeSql DB(this DataType t) 65 | { 66 | return SelectDBType(t); 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/SiteInfoDAL.cs: -------------------------------------------------------------------------------- 1 | //using FsCms.Entity; 2 | using FsCms.Entity; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq.Expressions; 6 | using System.Text; 7 | 8 | namespace FsCms.Service.DAL 9 | { 10 | public class SiteInfoDAL : BaseDAL, Ioc.ISingletonDependency 11 | { 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/SysAttachmentDAL.cs: -------------------------------------------------------------------------------- 1 | //using FsCms.Entity; 2 | using FsCms.Entity; 3 | using FsCms.Entity.Common; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq.Expressions; 7 | using System.Text; 8 | 9 | namespace FsCms.Service.DAL 10 | { 11 | public class SysAttachmentDAL : BaseDAL, Ioc.ISingletonDependency 12 | { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/SysDictionaryDAL.cs: -------------------------------------------------------------------------------- 1 | //using FsCms.Entity; 2 | using FsCms.Entity; 3 | using FsCms.Entity.Common; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq.Expressions; 7 | using System.Text; 8 | 9 | namespace FsCms.Service.DAL 10 | { 11 | public class SysDictionaryDAL : BaseDAL, Ioc.ISingletonDependency 12 | { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/SysMenuButtonDAL.cs: -------------------------------------------------------------------------------- 1 | //using FsCms.Entity; 2 | using FsCms.Entity; 3 | using FsCms.Entity.Common; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq.Expressions; 7 | using System.Text; 8 | 9 | namespace FsCms.Service.DAL 10 | { 11 | public class SysMenuButtonDAL : BaseDAL, Ioc.ISingletonDependency 12 | { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/SysMenuDAL.cs: -------------------------------------------------------------------------------- 1 | //using FsCms.Entity; 2 | using FsCms.Entity; 3 | using FsCms.Entity.Common; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq.Expressions; 7 | using System.Text; 8 | 9 | namespace FsCms.Service.DAL 10 | { 11 | public class SysMenuDAL : BaseDAL, Ioc.ISingletonDependency 12 | { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/SysRoleButtonDAL.cs: -------------------------------------------------------------------------------- 1 | //using FsCms.Entity; 2 | using FsCms.Entity; 3 | using FsCms.Entity.Common; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq.Expressions; 7 | using System.Text; 8 | 9 | namespace FsCms.Service.DAL 10 | { 11 | public class SysRoleButtonDAL : BaseDAL, Ioc.ISingletonDependency 12 | { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/SysRoleDAL.cs: -------------------------------------------------------------------------------- 1 | //using FsCms.Entity; 2 | using FsCms.Entity; 3 | using FsCms.Entity.Common; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq.Expressions; 7 | using System.Text; 8 | 9 | namespace FsCms.Service.DAL 10 | { 11 | public class SysRoleDAL : BaseDAL, Ioc.ISingletonDependency 12 | { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/SysRoleMenuDAL.cs: -------------------------------------------------------------------------------- 1 | //using FsCms.Entity; 2 | using FreeSql; 3 | using FsCms.Entity; 4 | using FsCms.Entity.Common; 5 | using System; 6 | using System.Collections.Generic; 7 | using System.Linq.Expressions; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | 11 | namespace FsCms.Service.DAL 12 | { 13 | public class SysRoleMenuDAL : BaseDAL, Ioc.ISingletonDependency 14 | { 15 | public async Task<(List list, long count)> QueryUserRole(Expression> where, Expression> orderby = null, PageInfo pageInfo = null) 16 | { 17 | //设置查询条件 18 | var select = DbType.DB().Select(); 19 | 20 | var list = select.LeftJoin((a, b) => a.MenuId == b.Id) 21 | .LeftJoin((a, c) => a.RoleId == c.Id) 22 | .Where(where); 23 | 24 | BaseEntity baseEntity = new BaseEntity(); 25 | //设置排序 26 | if (orderby != null) list = list.OrderBy(nameof(baseEntity.CreateDt) + " desc "); 27 | 28 | var count = list.Count(); 29 | //设置分页操作 30 | if (pageInfo != null && pageInfo.IsPaging) 31 | list.Skip((pageInfo.PageIndex - 1) * pageInfo.PageSize).Limit(pageInfo.PageSize); 32 | 33 | var resultList = await list.ToListAsync(); 34 | 35 | //执行查询 36 | return (resultList, count); 37 | } 38 | 39 | /// 40 | /// 获取用户菜单权限 41 | /// 42 | /// 43 | /// 44 | /// 45 | /// 46 | public async Task<(List list, long count)> QueryUserMenu(long userid) 47 | { 48 | //设置查询条件 49 | var select = DbType.DB() 50 | .Select(); 51 | var list = select.LeftJoin((a, b) => a.RoleId == b.RoleId) 52 | .LeftJoin((a, c) => a.MenuId == c.Id) 53 | .Where((rm, ur) => ur.UserId == userid); 54 | var count = list.Count(); 55 | var resultList = await list.ToListAsync(); 56 | //执行查询 57 | return (resultList, count); 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/SysUpdateLogDAL.cs: -------------------------------------------------------------------------------- 1 | //using FsCms.Entity; 2 | using FsCms.Entity; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq.Expressions; 6 | using System.Text; 7 | 8 | namespace FsCms.Service.DAL 9 | { 10 | public class SysUpdateLogDAL : BaseDAL, Ioc.ISingletonDependency 11 | { 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/SysUserDAL.cs: -------------------------------------------------------------------------------- 1 | //using FsCms.Entity; 2 | using FsCms.Entity; 3 | using FsCms.Entity.Common; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq.Expressions; 7 | using System.Text; 8 | 9 | namespace FsCms.Service.DAL 10 | { 11 | public class SysUserDAL : BaseDAL, Ioc.ISingletonDependency 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/SysUserRoleDAL.cs: -------------------------------------------------------------------------------- 1 | //using FsCms.Entity; 2 | using FreeSql; 3 | using FsCms.Entity; 4 | using FsCms.Entity.Common; 5 | using System; 6 | using System.Collections.Generic; 7 | using System.Linq.Expressions; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | 11 | namespace FsCms.Service.DAL 12 | { 13 | public class SysUserRoleDAL : BaseDAL, Ioc.ISingletonDependency 14 | { 15 | public async Task<(List list, long count)> QueryUserRole(Expression> where, Expression> orderby = null, PageInfo pageInfo = null) 16 | { 17 | //设置查询条件 18 | var select = DbType.DB().Select(); 19 | 20 | var list = select.LeftJoin((a, b) => a.UserId == b.Id) 21 | .LeftJoin((a, c) => a.RoleId == c.Id) 22 | .Where(where); 23 | 24 | BaseEntity baseEntity = new BaseEntity(); 25 | //设置排序 26 | if (orderby != null) list = list.OrderBy(nameof(baseEntity.CreateDt) + " desc "); 27 | 28 | var count = list.Count(); 29 | //设置分页操作 30 | if (pageInfo != null && pageInfo.IsPaging) 31 | list.Skip((pageInfo.PageIndex - 1) * pageInfo.PageSize).Limit(pageInfo.PageSize); 32 | 33 | var resultList = await list.ToListAsync(); 34 | 35 | //执行查询 36 | return (resultList, count); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/FsCms.Service/DAL/TemplateExampleDAL.cs: -------------------------------------------------------------------------------- 1 | //using FsCms.Entity; 2 | using FsCms.Entity; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq.Expressions; 6 | using System.Text; 7 | 8 | namespace FsCms.Service.DAL 9 | { 10 | public class TemplateExampleDAL : BaseDAL, Ioc.ISingletonDependency 11 | { 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/FsCms.Service/ExpressionBuilder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq.Expressions; 4 | using System.Text; 5 | 6 | namespace FsCms.Service 7 | { 8 | public static class ExpressionBuilder 9 | { 10 | public static Expression> True() { return f => true; } 11 | 12 | public static Expression> False() { return f => false; } 13 | 14 | public static Expression> And( 15 | this Expression> first, 16 | Expression> second) 17 | { 18 | return first.AndAlso(second, Expression.AndAlso); 19 | } 20 | 21 | public static Expression> Or( 22 | this Expression> first, 23 | Expression> second) 24 | { 25 | return first.AndAlso(second, Expression.OrElse); 26 | } 27 | 28 | private static Expression> AndAlso( 29 | this Expression> expr1, 30 | Expression> expr2, 31 | Func func) 32 | { 33 | var parameter = Expression.Parameter(typeof(T)); 34 | 35 | var leftVisitor = new ReplaceExpressionVisitor(expr1.Parameters[0], parameter); 36 | var left = leftVisitor.Visit(expr1.Body); 37 | 38 | var rightVisitor = new ReplaceExpressionVisitor(expr2.Parameters[0], parameter); 39 | var right = rightVisitor.Visit(expr2.Body); 40 | 41 | return Expression.Lambda>( 42 | func(left, right), parameter); 43 | } 44 | 45 | private class ReplaceExpressionVisitor 46 | : ExpressionVisitor 47 | { 48 | private readonly Expression _oldValue; 49 | private readonly Expression _newValue; 50 | 51 | public ReplaceExpressionVisitor(Expression oldValue, Expression newValue) 52 | { 53 | _oldValue = oldValue; 54 | _newValue = newValue; 55 | } 56 | 57 | public override Expression Visit(Expression node) 58 | { 59 | if (node == _oldValue) 60 | return _newValue; 61 | return base.Visit(node); 62 | } 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/FsCms.Service/Extensions/AutoException.cs: -------------------------------------------------------------------------------- 1 | using FsCms.Entity.Common; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Transactions; 7 | 8 | namespace FsCms.Service 9 | { 10 | public class AutoException 11 | { 12 | /// 13 | /// 执行方法外壳,包括异常抓取,固定格式返回 14 | /// 15 | /// 16 | /// 17 | /// 18 | /// 19 | public async static Task> Excute( 20 | Action> action, bool isTransaction = false) 21 | { 22 | TransactionScope ts = null; 23 | if (isTransaction) ts = new TransactionScope(); 24 | ServiceResult result = new ServiceResult() { Status = EnumServiceResult.Success.GetHashCode() }; 25 | try 26 | { 27 | await Task.Run(() => action(result)); 28 | if (isTransaction) ts.Complete(); 29 | } 30 | catch (Exception ex) 31 | { 32 | result.Msg = ex.Message; 33 | result.Status = EnumServiceResult.Failure.GetHashCode(); 34 | } 35 | finally 36 | { 37 | if (isTransaction) ts.Dispose(); 38 | } 39 | return result; 40 | } 41 | 42 | /// 43 | /// 规范接口调用方法 44 | /// 45 | /// 返回值参数 46 | /// 执行方法内容 47 | /// 是否启用事务 48 | /// 49 | public static ServiceResult Execute(Action action, bool isTransaction = false) 50 | { 51 | TransactionScope ts = null; 52 | if (isTransaction) ts = new TransactionScope(); 53 | ServiceResult result = new ServiceResult() { Status = EnumServiceResult.Success.GetHashCode(), Msg = "保存成功" }; 54 | try 55 | { 56 | action.Invoke(result); 57 | if (result.Status == EnumServiceResult.Success.GetHashCode()) 58 | { 59 | if (isTransaction) ts.Complete(); 60 | } 61 | } 62 | catch (Exception ex) 63 | { 64 | result.Msg = ex.Message; 65 | result.Status = EnumServiceResult.Failure.GetHashCode(); 66 | } 67 | finally 68 | { 69 | if (isTransaction) ts.Dispose(); 70 | } 71 | return result; 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/FsCms.Service/FsCms.Service.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netstandard2.1 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/FsCms.Service/Helper/AppSettingsManager.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using Microsoft.Extensions.Configuration; 3 | using Newtonsoft.Json; 4 | 5 | namespace FsCms.Service.Helper 6 | { 7 | /// 8 | /// 配置管理器 9 | /// 10 | public static class AppSettingsManager 11 | { 12 | private static IConfiguration _configuration; 13 | 14 | static AppSettingsManager() 15 | { 16 | BuildConfiguration(); 17 | } 18 | 19 | private static void BuildConfiguration() 20 | { 21 | var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()) 22 | .AddJsonFile("appsettings.json", false).AddJsonFile("appsettings.Development.json", true); 23 | _configuration = builder.Build(); 24 | } 25 | 26 | /// 27 | /// 读取指定节点信息 28 | /// 29 | /// 节点名称,多节点以:分隔 30 | public static string Get(string key) 31 | { 32 | return _configuration[key]; 33 | } 34 | 35 | /// 36 | /// 读取指定节点信息 37 | /// 38 | public static T Get(string key) 39 | { 40 | string json = Get(key); 41 | return JsonConvert.DeserializeObject(json); 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /src/FsCms.Service/Ioc/IDependencyRegistrar.cs: -------------------------------------------------------------------------------- 1 | using Autofac; 2 | using System; 3 | using System.Collections.Generic; 4 | 5 | namespace FsCms.Service.Ioc 6 | { 7 | /// 8 | /// 依赖注册接口 9 | /// 10 | public interface IDependencyRegistrar 11 | { 12 | /// 13 | /// Register services and interfaces 14 | /// 15 | /// Container builder 16 | /// Config 17 | void Register(ContainerBuilder builder, List listType); 18 | 19 | /// 20 | /// Order of this dependency registrar implementation 21 | /// 22 | int Order { get; } 23 | } 24 | } -------------------------------------------------------------------------------- /src/FsCms.Service/Ioc/IIocManager.cs: -------------------------------------------------------------------------------- 1 | using Autofac; 2 | using Autofac.Core; 3 | using System; 4 | using System.Collections.Generic; 5 | 6 | namespace FsCms.Service.Ioc 7 | { 8 | public interface IIocManager 9 | { 10 | IContainer Container { get; } 11 | 12 | bool IsRegistered(Type serviceType, ILifetimeScope scope = null); 13 | 14 | object Resolve(Type type, ILifetimeScope scope = null); 15 | 16 | T Resolve(string key = "", ILifetimeScope scope = null) where T : class; 17 | 18 | T Resolve(params Parameter[] parameters) where T : class; 19 | 20 | T[] ResolveAll(string key = "", ILifetimeScope scope = null); 21 | 22 | object ResolveOptional(Type serviceType, ILifetimeScope scope = null); 23 | 24 | object ResolveUnregistered(Type type, ILifetimeScope scope = null); 25 | 26 | T ResolveUnregistered(ILifetimeScope scope = null) where T : class; 27 | 28 | ILifetimeScope Scope(); 29 | 30 | bool TryResolve(Type serviceType, ILifetimeScope scope, out object instance); 31 | } 32 | } -------------------------------------------------------------------------------- /src/FsCms.Service/Ioc/IRegisterByAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace FsCms.Service.Ioc 6 | { 7 | /// 8 | /// 通过属性注册表示 9 | /// 10 | public interface IRegisterByAttribute 11 | { 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/FsCms.Service/Ioc/IRegisterByConstructor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace FsCms.Service.Ioc 6 | { 7 | /// 8 | /// 通过属性注册表示 9 | /// 10 | public interface IRegisterByConstructor 11 | { 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/FsCms.Service/Ioc/IRegisterFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace FsCms.Service.Ioc 6 | { 7 | 8 | /// 9 | /// 注册接口标识 10 | /// 11 | public interface IRegisterFlag 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/FsCms.Service/Ioc/ISingletonDependency.cs: -------------------------------------------------------------------------------- 1 | namespace FsCms.Service.Ioc 2 | { 3 | /// 4 | /// 单例接口 5 | /// 6 | public interface ISingletonDependency 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /src/FsCms.Service/Ioc/ITransientDependency.cs: -------------------------------------------------------------------------------- 1 | namespace FsCms.Service.Ioc 2 | { 3 | 4 | /// 5 | /// 所有接口的依赖接口,每次创建新实例 6 | /// 7 | /// 8 | /// 用于Autofac自动注册时,查找所有依赖该接口的实现。 9 | /// 实现自动注册功能 10 | /// 11 | public interface ITransientDependency 12 | { 13 | } 14 | } -------------------------------------------------------------------------------- /src/FsCms.Service/Ioc/intercept/AOPIntercept.cs: -------------------------------------------------------------------------------- 1 | using Castle.DynamicProxy; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | 7 | namespace Support.AutofacModule.intercept 8 | { 9 | public class AOPIntercept : IInterceptor 10 | { 11 | public void Intercept(IInvocation invocation) 12 | { 13 | Console.WriteLine("你正在调用方法 \"{0}\" 参数是 {1}... ", 14 | invocation.Method.Name, 15 | string.Join(", ", invocation.Arguments.Select(a => (a ?? "").ToString()).ToArray())); 16 | 17 | invocation.Proceed(); 18 | if (invocation.ReturnValue != null && invocation.ReturnValue is string) 19 | { 20 | //在返回接口上拼上LogInterceptor 21 | invocation.ReturnValue += " LogInterceptor"; 22 | } 23 | Console.WriteLine("方法执行完毕,返回结果:{0}", invocation.ReturnValue); 24 | 25 | Console.WriteLine("开始记录日志...."); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Security.Claims; 5 | using System.Threading.Tasks; 6 | using FsCms.Entity; 7 | using FsCms.Entity.Enum; 8 | using FsCms.Service.DAL; 9 | using Microsoft.AspNetCore.Mvc; 10 | 11 | 12 | namespace FsCms.Web.Areas.Admin.Controllers 13 | { 14 | [Microsoft.AspNetCore.Authorization.Authorize(Roles = AuthorizeName.Items)] 15 | //[Area(AreasName.Admin)] 16 | [Area("Admin")] 17 | //[Route("Admin/[controller]/[action]")] 18 | public class HomeController : AdminBaseController 19 | { 20 | public SysRoleMenuDAL SysRoleMenuDAL { get; set; } 21 | public SysMenuDAL SysMenuDAL { get; set; } 22 | 23 | public async Task Index(int type) 24 | { 25 | var sid = this.UserID; 26 | var usertype = this.UserType; 27 | 28 | List list = new List { }; 29 | if (usertype == UserType.SuperUser) 30 | { 31 | var menus = await SysMenuDAL.QueryAsync(w => w.Status == 1, null, null); 32 | list = menus.list; 33 | } 34 | else 35 | { 36 | var userMenus = await SysRoleMenuDAL.QueryUserMenu(Convert.ToInt64(sid)); 37 | userMenus.list.ForEach(m => 38 | { 39 | list.Add(m.Menu); 40 | }); 41 | } 42 | 43 | ViewBag.menuList = (from p in list 44 | where (p.ParentID ?? 0) == 0 45 | select new SysMenuTreeNode(list, p)).ToList(); 46 | return View(); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Controllers/ServiceController.cs: -------------------------------------------------------------------------------- 1 |  2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Security.Claims; 6 | using System.Threading.Tasks; 7 | using FsCms.Entity; 8 | using FsCms.Entity.Enum; 9 | using FsCms.Service.DAL; 10 | using Microsoft.AspNetCore.Mvc; 11 | 12 | 13 | namespace FsCms.Web.Areas.Admin.Controllers 14 | { 15 | [Area(AreasName.Admin)] 16 | public class ServiceController : AdminBaseController 17 | { 18 | public IActionResult Error(string msg = "") 19 | { 20 | ViewBag.Msg = msg; 21 | return View(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Models/LoginModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace FsCms.Web.Areas.Admin.Models 7 | { 8 | 9 | public class LoginModel 10 | { 11 | /// 12 | /// 用户名 13 | /// 14 | public string userName { get; set; } 15 | 16 | /// 17 | /// 密码 18 | /// 19 | public string password { get; set; } 20 | 21 | /// 22 | /// 验证码 23 | /// 24 | public string verifycode { get; set; } 25 | 26 | /// 27 | /// 登录成功-跳转页面 28 | /// 29 | public string returnUrl { get; set; } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/ArticleType/CreateModule.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Entity; 2 | @model FsCms.Entity.ArticleType 3 | @{ Layout = ""; } 4 | 5 |
6 |
7 |
8 | 9 |
10 | @Html.HiddenFor(m => m.Id) 11 | @Html.HiddenFor(m => m.CreateBy) 12 | @Html.HiddenFor(m => m.CreateDt) 13 | @Html.DropDownList("UpID", ViewBag.ArticleTypeList as List, "", new Dictionary { { "class", "plate_text" } }) 14 |
15 |
16 | 17 |
18 | 19 |
20 | @Html.TextBoxFor(m => m.TypeName, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 21 |
22 |
23 |
24 | 25 |
26 | @Html.TextBoxFor(m => m.Tag, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入摘要" } }) 27 |
28 |
29 | 30 |
31 | 32 |
33 | @Html.TextBoxFor(m => m.SortNum, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "SortNum" } }) 34 |
35 |
36 | 37 |
38 | 39 |
40 | 41 | 42 |
43 |
44 |
45 | @**@ 48 |
-------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/ArticleType/UpdateModule.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Entity; 2 | @model FsCms.Entity.ArticleType 3 | @{ Layout = ""; } 4 | 5 |
6 |
7 |
8 | 9 |
10 | @Html.HiddenFor(m => m.Id) 11 | @Html.HiddenFor(m => m.CreateBy) 12 | @Html.HiddenFor(m => m.CreateDt) 13 | @Html.DropDownList("UpID", ViewBag.ArticleTypeList as List, "", new Dictionary { { "class", "plate_text" } }) 14 |
15 |
16 | 17 |
18 | 19 |
20 | @Html.TextBoxFor(m => m.TypeName, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 21 |
22 |
23 |
24 | 25 |
26 | @Html.TextBoxFor(m => m.Tag, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入摘要" } }) 27 |
28 |
29 | 30 |
31 | 32 |
33 | @Html.TextBoxFor(m => m.SortNum, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "SortNum" } }) 34 |
35 |
36 | 37 |
38 | 39 |
40 | 41 | 42 |
43 |
44 |
45 | @**@ 48 |
-------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/Service/Error.cshtml: -------------------------------------------------------------------------------- 1 | @using Microsoft.AspNetCore.Mvc.Rendering; 2 | @using FsCms.Entity; 3 | @{ 4 | ViewData["Title"] = ".NETCore最方便的ORM"; 5 | } 6 |

7 | @ViewBag.Msg 8 |

-------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/Shared/_LayoutAdmin.cshtml: -------------------------------------------------------------------------------- 1 | @**@ 8 | @RenderBody() 9 | -------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/SysDictionary/CreateModule.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Entity; 2 | @model FsCms.Entity.SysDictionary 3 | @{ Layout = ""; } 4 | 5 |
6 |
7 |
8 | 9 |
10 | @Html.HiddenFor(m => m.Id) 11 | @Html.HiddenFor(m => m.CreateBy) 12 | @Html.HiddenFor(m => m.CreateDt) 13 | @Html.HiddenFor(m => m.Status) 14 | @Html.DropDownList("ParentID", ViewBag.SysDictionaryList as List, "", new Dictionary { { "class", "plate_text" } }) 15 |
16 |
17 | 18 |
19 | 20 |
21 | @Html.TextBoxFor(m => m.DictNo, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 22 |
23 |
24 | 25 |
26 | 27 |
28 | @Html.TextBoxFor(m => m.DictName, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 29 |
30 |
31 | 32 |
33 | 34 |
35 | @Html.TextBoxFor(m => m.Sort, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入摘要" } }) 36 |
37 |
38 | 39 |
40 | 41 |
42 | @Html.TextAreaFor(m => m.Description, 3, 3, new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 43 |
44 |
45 |
46 | @**@ 49 |
-------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/SysDictionary/UpdateModule.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Entity; 2 | @model FsCms.Entity.SysDictionary 3 | @{ Layout = ""; } 4 | 5 |
6 |
7 |
8 | 9 |
10 | @Html.HiddenFor(m => m.Id) 11 | @Html.HiddenFor(m => m.CreateBy) 12 | @Html.HiddenFor(m => m.CreateDt) 13 | @Html.HiddenFor(m => m.Status) 14 | @Html.DropDownList("ParentID", ViewBag.SysDictionaryList as List, "", new Dictionary { { "class", "plate_text" } }) 15 |
16 |
17 | 18 |
19 | 20 |
21 | @Html.TextBoxFor(m => m.DictNo, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 22 |
23 |
24 | 25 |
26 | 27 |
28 | @Html.TextBoxFor(m => m.DictName, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 29 |
30 |
31 | 32 |
33 | 34 |
35 | @Html.TextBoxFor(m => m.Sort, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入摘要" } }) 36 |
37 |
38 | 39 |
40 | 41 |
42 | @Html.TextAreaFor(m => m.Description, 3, 3, new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 43 |
44 |
45 |
46 | @**@ 49 |
-------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/SysMenu/CreateModule.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Entity; 2 | @model FsCms.Entity.SysMenuView 3 | @{ Layout = ""; } 4 | 5 |
6 |
7 |
8 | 9 |
10 | @Html.HiddenFor(m => m.Id) 11 | @Html.HiddenFor(m => m.CreateBy) 12 | @Html.HiddenFor(m => m.CreateDt) 13 | @Html.HiddenFor(m => m.Status) 14 | @Html.HiddenFor(m => m.menubuttons) 15 | @Html.DropDownList("ParentID", ViewBag.SysMenuList as List, "", new Dictionary { { "class", "plate_text" } }) 16 |
17 |
18 | 19 |
20 | 21 |
22 | @Html.TextBoxFor(m => m.MenuName, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 23 |
24 |
25 | 26 | 27 |
28 | 29 |
30 | @Html.TextBoxFor(m => m.MenuUrl, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入摘要" } }) 31 |
32 |
33 | 34 |
35 | 36 |
37 | @Html.TextBoxFor(m => m.Sort, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入摘要" } }) 38 |
39 |
40 | 41 |
42 | 43 |
44 | @Html.TextAreaFor(m => m.Description, 3, 3, new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 45 |
46 |
47 |
48 |
49 | 50 |
51 | @foreach (var item in (ViewBag.ButtonList as List)) 52 | { 53 | 54 | } 55 |
56 |
57 |
58 |
59 | @**@ 62 |
-------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/SysMenu/UpdateModule.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Entity; 2 | @model FsCms.Entity.SysMenuView 3 | @{ Layout = ""; } 4 | 5 |
6 |
7 |
8 | 9 |
10 | @Html.HiddenFor(m => m.Id) 11 | @Html.HiddenFor(m => m.CreateBy) 12 | @Html.HiddenFor(m => m.CreateDt) 13 | @Html.HiddenFor(m => m.Status) 14 | @Html.HiddenFor(m => m.menubuttons) 15 | @Html.DropDownList("ParentID", ViewBag.SysMenuList as List, "", new Dictionary { { "class", "plate_text" } }) 16 |
17 |
18 | 19 |
20 | 21 |
22 | @Html.TextBoxFor(m => m.MenuName, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 23 |
24 |
25 | 26 | 27 |
28 | 29 |
30 | @Html.TextBoxFor(m => m.MenuUrl, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入摘要" } }) 31 |
32 |
33 | 34 |
35 | 36 |
37 | @Html.TextBoxFor(m => m.Sort, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入摘要" } }) 38 |
39 |
40 | 41 |
42 | 43 |
44 | @Html.TextAreaFor(m => m.Description, 3, 3, new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 45 |
46 |
47 |
48 |
49 | 50 |
51 | @foreach (var item in (ViewBag.ButtonList as List)) 52 | { 53 | 54 | } 55 |
56 |
57 |
58 |
59 | @**@ 62 |
-------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/SysRole/AuthModule.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Entity; 2 | @model FsCms.Entity.SysRole 3 | @{ Layout = ""; } 4 |
5 | @Html.HiddenFor(m => m.Id) 6 | @Html.HiddenFor(m => m.CreateBy) 7 | @Html.HiddenFor(m => m.CreateDt) 8 |
9 | 10 |
11 | @*
*@ 12 |
13 | @* 14 | 菜单名称 按钮1 按钮2 按钮2 按钮4 按钮5 按钮6 按钮7 按钮8 按钮9 ... 15 | ----------------------------------------------------------------- 16 | 菜单1 17 | --菜单1-1 18 | --菜单1-2 19 | 菜单2 20 | --菜单2-1 21 | --菜单2-2 22 | *@ 23 |
24 |
25 |
26 | -------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/SysRole/CreateModule.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Entity; 2 | @model FsCms.Entity.SysRole 3 | @{ Layout = ""; } 4 | 5 |
6 |
7 |
8 | 9 |
10 | 11 | @Html.HiddenFor(m => m.CreateBy) 12 | @Html.HiddenFor(m => m.CreateDt) 13 | @Html.TextBoxFor(m => m.RoleName, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 14 |
15 |
16 |
17 | 18 |
19 | @Html.TextBoxFor(m => m.RoleCode, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入摘要" } }) 20 |
21 |
22 | 23 |
24 | 25 |
26 | @Html.TextAreaFor(m => m.Description, new Dictionary { { "class", "layui-textarea" }, { "maxlength", 500 }, { "data-msg-maxlength", "最大长度为:500" } }) 27 |
28 |
29 |
30 |
-------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/SysRole/UpdateModule.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Entity; 2 | @model FsCms.Entity.SysRole 3 | @{ Layout = ""; } 4 |
5 | @Html.HiddenFor(m => m.Id) 6 | @Html.HiddenFor(m => m.CreateBy) 7 | @Html.HiddenFor(m => m.CreateDt) 8 |
9 |
10 | 11 |
12 | @Html.TextBoxFor(m => m.RoleName, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 13 |
14 |
15 |
16 | 17 |
18 | @Html.TextBoxFor(m => m.RoleCode, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入摘要" } }) 19 |
20 |
21 | 22 |
23 | 24 |
25 | @Html.TextAreaFor(m => m.Description, new Dictionary { { "class", "layui-textarea" }, { "maxlength", 500 }, { "data-msg-maxlength", "最大长度为:500" } }) 26 |
27 |
28 |
29 |
30 | -------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/SysUpdateLog/CreateModule.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Entity; 2 | @model FsCms.Entity.SysUpdateLog 3 | @{ Layout = ""; } 4 | 5 |
6 |
7 |
8 | 9 |
10 | @(string.IsNullOrEmpty(ViewBag.OldVersionName) ? "" : ("上次版本号:" + ViewBag.OldVersionName)) 11 |
12 |
13 |
14 | 15 |
16 | @Html.HiddenFor(m => m.Id) 17 | @Html.HiddenFor(m => m.Status) 18 | @Html.HiddenFor(m => m.CreateBy) 19 | @Html.HiddenFor(m => m.CreateDt) 20 | @Html.TextBoxFor(m => m.VersionNum, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入版本号" } }) 21 |
22 |
23 | 24 |
25 | 26 |
27 | @Html.TextAreaFor(m => m.Remark, new Dictionary { { "class", "layui-textarea" }, { "maxlength", 500 }, { "data-msg-maxlength", "最大长度为:500" } }) 28 |
29 |
30 |
31 | @**@ 34 |
-------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/SysUpdateLog/UpdateModule.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Entity; 2 | @model FsCms.Entity.SysUpdateLog 3 | @{ Layout = ""; } 4 | 5 |
6 |
7 |
8 | 9 |
10 | @Html.HiddenFor(m => m.Id) 11 | @Html.HiddenFor(m => m.Status) 12 | @Html.HiddenFor(m => m.CreateBy) 13 | @Html.HiddenFor(m => m.CreateDt) 14 | @Html.TextBoxFor(m => m.VersionNum, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 15 |
16 |
17 | 18 |
19 | 20 |
21 | @Html.TextAreaFor(m => m.Remark, new Dictionary { { "class", "layui-textarea" }, { "maxlength", 500 }, { "data-msg-maxlength", "最大长度为:500" } }) 22 |
23 |
24 |
25 | @**@ 28 |
-------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/TemplateExample/CreateModule.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Entity; 2 | @model FsCms.Entity.TemplateExample 3 | @{ Layout = ""; } 4 | 5 |
6 |
7 |
8 | 9 |
10 | @Html.HiddenFor(m => m.Id) 11 | @Html.HiddenFor(m => m.CreateBy) 12 | @Html.HiddenFor(m => m.CreateDt) 13 | @Html.HiddenFor(m => m.TemplatePath) 14 | @{ ViewBag.DataTypeList = FsCms.Service.Helper.EnumHelper.ToSelectList(typeof(FsCms.Entity.Enum.ExampleOrTemplate));} 15 | @Html.DropDownList("DataType", ViewBag.DataTypeList as List, "", new Dictionary { { "class", "plate_text" } }) 16 |
17 |
18 | 19 |
20 | 21 |
22 | @Html.TextBoxFor(m => m.TempateName, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 23 |
24 |
25 | 26 |
27 | 28 |
29 | @Html.TextBoxFor(m => m.TemplatePath, "", new Dictionary { { "autocomplete", "off" }, { "class", "layui-input " }, { "lay-verify", "title" }, { "placeholder", "请输入标题" } }) 30 |
31 |
32 |
33 | 34 |
35 |
36 | 37 |
38 | 39 |

40 |
41 |
42 |
43 |
44 | 45 |
46 | 47 |
48 | 49 | 50 |
51 |
52 |
53 | 54 |
55 | @Html.TextAreaFor(m => m.Describe, new Dictionary { { "class", "layui-textarea" }, { "maxlength", 500 }, { "data-msg-maxlength", "最大长度为:500" } }) 56 |
57 |
58 |
59 | @**@ 62 |
-------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Web 2 | @using FsCms.Web.Models 3 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 4 | -------------------------------------------------------------------------------- /src/FsCms.Web/Areas/Admin/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Views/Shared/_LayoutAdmin.cshtml"; 3 | } -------------------------------------------------------------------------------- /src/FsCms.Web/Common/AutoMapperConfigs.cs: -------------------------------------------------------------------------------- 1 | using AutoMapper; 2 | using FsCms.Entity; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | 8 | namespace FsCms.Web 9 | { 10 | public class AutoMapperConfigs : Profile 11 | { 12 | //添加你的实体映射关系. 13 | public AutoMapperConfigs() 14 | { 15 | CreateMap(); 16 | CreateMap(); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/FsCms.Web/Common/Const/AreasName.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace FsCms.Web 7 | { 8 | public class AreasName 9 | { 10 | public const string Admin = "Admin"; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/FsCms.Web/Common/Const/AuthorizeName.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace FsCms.Web 7 | { 8 | public class AuthorizeName 9 | { 10 | public const string PermissionButton = "PermissionButton"; 11 | 12 | public const string Items = "Admin"; 13 | 14 | public static string AutoSet(string t) 15 | { 16 | return "admin,system,SuperUser"; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/FsCms.Web/Controllers/BBSController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using FsCms.Web.Models; 6 | using Microsoft.AspNetCore.Mvc; 7 | 8 | namespace FsCms.Web.Controllers 9 | { 10 | public class BBSController : Controller 11 | { 12 | public IActionResult Index() 13 | { 14 | return View(); 15 | } 16 | 17 | public IActionResult Ask() { 18 | return View(); 19 | } 20 | 21 | } 22 | } -------------------------------------------------------------------------------- /src/FsCms.Web/Controllers/ExampleController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using FsCms.Entity; 6 | using FsCms.Service.DAL; 7 | using FsCms.Web.Models; 8 | using Microsoft.AspNetCore.Mvc; 9 | 10 | namespace FsCms.Web.Controllers 11 | { 12 | public class ExampleController : Controller 13 | { 14 | public ArticleTypeDAL ArticleTypeDAL { get; set; } 15 | 16 | public TemplateExampleDAL TemplateExampleDAL { get; set; } 17 | 18 | public IActionResult Index(int id = 1) 19 | { 20 | var typeList = ArticleTypeDAL.Query(d => d.Id != 0).list.OrderBy(s => s.SortNum).ToList(); 21 | var contentlist = TemplateExampleDAL.Query(d => d.Status == 1, new List> 22 | { 23 | new SortInfo{ Orderby=s=>s.Id, SortMethods= Entity.Enum.SortEnum.Asc} 24 | }).list.OrderBy(s => s.Id).ToList(); 25 | 26 | //适应两层结构即可 27 | var query = (from p in typeList 28 | where p.UpID == null || p.UpID == 0 29 | select new TreeData(p, typeList)).ToList();//.AddChildrens(GetContentTreeData(p.Id, contentlist), (tid) => GetContentTreeData(tid, contentlist))).ToList(); 30 | 31 | ViewBag.DocumentList = query; 32 | ViewBag.DocID = contentlist.Exists(e => e.Id == id) ? id : contentlist.FirstOrDefault()?.Id; 33 | return View(); 34 | } 35 | 36 | private List GetContentTreeData(long id, List contentlist) 37 | { 38 | return contentlist.Where(w => w.TypeID == id).Select(s => new TreeData 39 | { 40 | id = s.Id, 41 | text = s.TempateName, 42 | intextfield = 0, 43 | datatype = 1 44 | }).ToList(); 45 | } 46 | 47 | } 48 | } -------------------------------------------------------------------------------- /src/FsCms.Web/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using Microsoft.AspNetCore.Mvc; 7 | using FsCms.Web.Models; 8 | using FsCms.Service.DAL; 9 | 10 | namespace FsCms.Web.Controllers 11 | { 12 | public class HomeController : Controller 13 | { 14 | public ArticleContentDAL ArticleContentDAL { get; set; } 15 | public SysDictionaryDAL SysDictionaryDAL { get; set; } 16 | 17 | 18 | public IActionResult Index() 19 | { 20 | ViewBag.sketchlist = SysDictionaryDAL.Query(s => s.Parent.DictNo == "Index_Sketch", null, null); 21 | return View(); 22 | } 23 | 24 | public IActionResult Header() 25 | { 26 | ViewBag.pathUrl = this.HttpContext.Request.Path.Value; 27 | ViewBag.ArticleList = ArticleContentDAL.Query(s => s.Status == 1, null, null); 28 | return PartialView(); 29 | } 30 | 31 | public IActionResult About() 32 | { 33 | ViewData["Message"] = "Your application description page."; 34 | 35 | return View(); 36 | } 37 | 38 | public IActionResult Contact() 39 | { 40 | ViewData["Message"] = "Your contact page."; 41 | 42 | return View(); 43 | } 44 | 45 | public IActionResult Privacy() 46 | { 47 | return View(); 48 | } 49 | 50 | [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] 51 | public IActionResult Error() 52 | { 53 | return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/FsCms.Web/Controllers/TemplateController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | 7 | namespace FsCms.Web.Controllers 8 | { 9 | public class TemplateController : Controller 10 | { 11 | public IActionResult Index() 12 | { 13 | return View(); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/FsCms.Web/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM microsoft/dotnet:2.1-sdk 2 | WORKDIR /app 3 | 4 | # copy csproj and restore as distinct layers 5 | COPY *.csproj ./ 6 | RUN dotnet restore 7 | 8 | # copy and build everything else 9 | COPY . ./ 10 | RUN dotnet publish -c Release -o out 11 | ENTRYPOINT ["dotnet", "out/FsCms.dll"] -------------------------------------------------------------------------------- /src/FsCms.Web/Dockerfile.original: -------------------------------------------------------------------------------- 1 | #Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed. 2 | #For more information, please see https://aka.ms/containercompat 3 | 4 | FROM microsoft/dotnet:2.1-aspnetcore-runtime-nanoserver-1803 AS base 5 | WORKDIR /app 6 | EXPOSE 57198 7 | EXPOSE 44324 8 | 9 | FROM microsoft/dotnet:2.1-sdk-nanoserver-1803 AS build 10 | WORKDIR /src 11 | COPY ["../FsCms.Web/FsCms.Web.csproj", "../FsCms.Web/"] 12 | RUN dotnet restore "../FsCms.Web/FsCms.Web.csproj" 13 | COPY . . 14 | WORKDIR "/src/../FsCms.Web" 15 | RUN dotnet build "FsCms.Web.csproj" -c Release -o /app 16 | 17 | FROM build AS publish 18 | RUN dotnet publish "FsCms.Web.csproj" -c Release -o /app 19 | 20 | FROM base AS final 21 | WORKDIR /app 22 | COPY --from=publish /app . 23 | ENTRYPOINT ["dotnet", "FsCms.Web.dll"] -------------------------------------------------------------------------------- /src/FsCms.Web/FsCms.Web.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netcoreapp3.1 5 | Windows 6 | e7d282f5-6679-45e6-a5c8-de91014ed475 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | PreserveNewest 26 | 27 | 28 | PreserveNewest 29 | 30 | 31 | PreserveNewest 32 | 33 | 34 | PreserveNewest 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/FsCms.Web/Models/ErrorViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace FsCms.Web.Models 4 | { 5 | public class ErrorViewModel 6 | { 7 | public string RequestId { get; set; } 8 | 9 | public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); 10 | } 11 | } -------------------------------------------------------------------------------- /src/FsCms.Web/Models/ToolBarActionButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace FsCms.Web 7 | { 8 | public enum Dirtect 9 | { 10 | 11 | //在公共按钮后添加 12 | Behind, 13 | //在公共按钮前添加 14 | Front 15 | } 16 | 17 | public class ToolBarActionButton 18 | { 19 | /// 20 | /// 必须用用于控件权限 21 | /// 22 | public string Name { set; get; } 23 | /// 24 | /// 按钮文本 25 | /// 26 | public string Text { set; get; } 27 | /// 28 | /// 自写样式 29 | /// 30 | public string Style { get; set; } 31 | /// 32 | /// 按钮的样式 33 | /// 34 | public string ClassName { set; get; } 35 | //public Dirtect Direct { set; get; } 36 | /// 37 | /// 按钮的扩展属性 38 | /// 39 | public Dictionary Attributes { set; get; } 40 | } 41 | 42 | public interface IToolBarActionButtonRight 43 | { 44 | void LoadToolBarActionButtonRight(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/FsCms.Web/Models/TreeDataConvert.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using FsCms.Entity; 6 | 7 | namespace FsCms.Web.Models 8 | { 9 | public class TreeData 10 | { 11 | public TreeData() { } 12 | 13 | public TreeData(ArticleType type) 14 | { 15 | this.id = type.Id; 16 | this.text = type.TypeName; 17 | } 18 | 19 | public TreeData(ArticleType type, List list) 20 | { 21 | this.id = type.Id; 22 | this.text = type.TypeName; 23 | this.children = (from l in list where l.UpID == type.Id select new TreeData(l, list)).ToList(); 24 | } 25 | 26 | /// 27 | /// 唯一编号 28 | /// 29 | public long id { get; set; } 30 | 31 | /// 32 | /// 标题 33 | /// 34 | public string text { get; set; } 35 | 36 | /// 37 | /// 类型 =0 表示类型 =1 表示内容 38 | /// 39 | public int datatype { get; set; } = 0; 40 | 41 | /// 42 | /// 扩展父节id 43 | /// 44 | public int intextfield { get; set; } 45 | 46 | public List children { get; set; } 47 | 48 | public TreeData AddChildrens(List list, Func> bind = null) 49 | { 50 | if (this.children != null && bind != null) 51 | { 52 | this.children.ForEach(f => 53 | { 54 | f.children = bind(f.id); 55 | }); 56 | } 57 | this.children?.AddRange(list); 58 | return this; 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/FsCms.Web/Program.cs: -------------------------------------------------------------------------------- 1 | using Autofac.Extensions.DependencyInjection; 2 | using Microsoft.AspNetCore.Hosting; 3 | using Microsoft.Extensions.Hosting; 4 | 5 | namespace FsCms.Web 6 | { 7 | public class Program 8 | { 9 | public static void Main(string[] args) 10 | { 11 | CreateHostBuilder(args).Build().Run(); 12 | } 13 | 14 | public static IHostBuilder CreateHostBuilder(string[] args) => 15 | Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder => 16 | { 17 | webBuilder.UseStartup(); 18 | }).UseServiceProviderFactory(new AutofacServiceProviderFactory()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/FsCms.Web/Startups/ControllerPack.cs: -------------------------------------------------------------------------------- 1 | using Autofac; 2 | using Autofac.Extras.DynamicProxy; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using Microsoft.AspNetCore.Mvc; 7 | 8 | using FsCms.Service.Ioc; 9 | 10 | namespace FsCms.Web.Startups 11 | { 12 | public class ControllerPack : IDependencyRegistrar 13 | { 14 | /// 15 | /// 16 | /// 17 | public int Order 18 | { 19 | get 20 | { 21 | return 3; 22 | } 23 | } 24 | 25 | /// 26 | /// 27 | /// 28 | /// 29 | /// 30 | public void Register(ContainerBuilder builder, List listType) 31 | { 32 | Console.WriteLine("Controller:控制器注册开始"); 33 | builder.RegisterType(typeof(Support.AutofacModule.intercept.AOPIntercept)); 34 | //注册Controller,实现属性注入 35 | var registrarType = typeof(Controller); 36 | var arrControllerType = listType.Where(t => t.BaseType == registrarType || t.BaseType == typeof(AdminBaseController)).ToArray(); 37 | 38 | foreach (var item in arrControllerType) 39 | { 40 | Console.WriteLine($"Controller.List:{item.FullName}"); 41 | } 42 | builder.RegisterTypes(arrControllerType) 43 | .AsSelf() 44 | .OnRegistered(e => Console.WriteLine("Controller:OnRegistered在注册的时候调用!")) 45 | .OnPreparing(e => Console.WriteLine("Controller:OnPreparing在准备创建的时候调用!")) 46 | .OnActivating(e => Console.WriteLine("Controller:OnActivating在创建之前调用!")) 47 | .OnActivated(e => Console.WriteLine("Controller:OnActivated创建之后调用!")) 48 | .OnRelease(e => Console.WriteLine("Controller:OnRelease在释放占用的资源之前调用!")) 49 | .EnableClassInterceptors() 50 | .InstancePerLifetimeScope() 51 | .PropertiesAutowired(); 52 | 53 | 54 | //var DALFactoryType = typeof(DALFactory); 55 | //var DALFactoryTypes = listType.Where(t => t == DALFactoryType).ToArray(); 56 | //foreach (var item in DALFactoryTypes) 57 | //{ 58 | // Console.WriteLine($"Controller.Factory:{item.FullName}"); 59 | //} 60 | //builder.RegisterTypes(DALFactoryTypes) 61 | // .AsSelf() 62 | // //.OnRegistered(e => Console.WriteLine("Controller:OnRegistered在注册的时候调用!")) 63 | // //.OnPreparing(e => Console.WriteLine("Controller:OnPreparing在准备创建的时候调用!")) 64 | // //.OnActivating(e => Console.WriteLine("Controller:OnActivating在创建之前调用!")) 65 | // //.OnActivated(e => Console.WriteLine("Controller:OnActivated创建之后调用!")) 66 | // //.OnRelease(e => Console.WriteLine("Controller:OnRelease在释放占用的资源之前调用!")) 67 | // .EnableClassInterceptors() 68 | // .InstancePerLifetimeScope() 69 | // .PropertiesAutowired(); 70 | 71 | Console.WriteLine("Controller:控制器注册成功"); 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/FsCms.Web/Startups/EntityPack.cs: -------------------------------------------------------------------------------- 1 | using Autofac; 2 | using FsCms.Service.Ioc; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | 8 | namespace FsCms.Web.Startups 9 | { 10 | public class EntityPack : IDependencyRegistrar 11 | { 12 | /// 13 | /// 14 | /// 15 | public int Order 16 | { 17 | get 18 | { 19 | return 1; 20 | } 21 | } 22 | 23 | public void Register(ContainerBuilder builder, List listType) 24 | { 25 | Console.WriteLine("service:服务注册开始"); 26 | var registrarType = typeof(ISingletonDependency); 27 | var arrControllerType = listType.Where(t => registrarType.IsAssignableFrom(t) && t != registrarType).ToArray(); 28 | 29 | foreach (var item in arrControllerType) 30 | { 31 | Console.WriteLine($"service:{item.FullName}"); 32 | } 33 | 34 | //构造函数注册 35 | builder.RegisterTypes(listType.Where(t => registrarType.IsAssignableFrom(t) && t != registrarType).ToArray()) 36 | .AsSelf() 37 | .InstancePerLifetimeScope() 38 | .PropertiesAutowired(); 39 | 40 | ////属性注册 41 | //var attributeRegisterType = typeof(IRegisterByAttribute); 42 | //var arrDALType = listType.Where(t => attributeRegisterType.IsAssignableFrom(t) && t != attributeRegisterType).ToArray(); 43 | 44 | //foreach (var item in arrDALType) 45 | //{ 46 | // Console.WriteLine($"service:Attribute:{item.FullName}"); 47 | //} 48 | 49 | //builder.RegisterTypes(arrDALType) 50 | // .AsSelf() 51 | // .OnRegistered(e => Console.WriteLine("service:OnRegistered在注册的时候调用!" + listType.Where(t => attributeRegisterType.IsAssignableFrom(t) && t != attributeRegisterType).ToArray().Count())) 52 | // .OnPreparing(e => Console.WriteLine("service:OnPreparing在准备创建的时候调用!")) 53 | // .OnActivating(e => Console.WriteLine("service:OnActivating在创建之前调用!")) 54 | // .OnActivated(e => Console.WriteLine("service:OnActivated创建之后调用!")) 55 | // .OnRelease(e => Console.WriteLine("service:OnRelease在释放占用的资源之前调用!")) 56 | // .InstancePerLifetimeScope() 57 | // .PropertiesAutowired(); 58 | Console.WriteLine("service:服务注册结束"); 59 | } 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /src/FsCms.Web/Views/BBS/Index.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | 3 | } 4 |
5 |
6 |
    7 |
    8 |
    9 |
    10 | 论坛功能正在开发中...... 11 |
    12 |
    13 |
    14 |
    15 | 16 |
    -------------------------------------------------------------------------------- /src/FsCms.Web/Views/Doc/Create.cshtml: -------------------------------------------------------------------------------- 1 | @* 2 | For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 3 | *@ 4 | @{ 5 | 6 | } 7 | -------------------------------------------------------------------------------- /src/FsCms.Web/Views/Doc/Details.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = null; 3 | var documentinfo = (ArticleContent)ViewBag.DocumentInfo; 4 | } 5 | 6 | @if (ViewBag.DocumentInfo == null) 7 | { 8 | 文章不存在,请选择其它文章查看! 9 | } 10 | else 11 | { 12 | { documentinfo.DocContent = "\n" + documentinfo.DocContent; } 13 |

    @documentinfo.Title

    14 | 17 | 81 | } -------------------------------------------------------------------------------- /src/FsCms.Web/Views/Doc/Index.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | 3 | } 4 |
    5 |
    6 | 33 |
    34 |
    35 | @Html.Action("Details", new RouteValueDictionary { { "id", ViewBag.DocID } }) 36 |
    37 |
    38 |
    39 | 40 |
    -------------------------------------------------------------------------------- /src/FsCms.Web/Views/Home/About.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "About"; 3 | } 4 |

    @ViewData["Title"]

    5 |

    @ViewData["Message"]

    6 | 7 |

    Use this area to provide additional information.

    8 | -------------------------------------------------------------------------------- /src/FsCms.Web/Views/Home/Contact.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Contact"; 3 | } 4 |

    @ViewData["Title"]

    5 |

    @ViewData["Message"]

    6 | 7 |
    8 | One Microsoft Way
    9 | Redmond, WA 98052-6399
    10 | P: 11 | 425.555.0100 12 |
    13 | 14 |
    15 | Support: Support@example.com
    16 | Marketing: Marketing@example.com 17 |
    18 | -------------------------------------------------------------------------------- /src/FsCms.Web/Views/Home/Privacy.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Privacy Policy"; 3 | } 4 |

    @ViewData["Title"]

    5 | 6 |

    Use this page to detail your site's privacy policy.

    7 | -------------------------------------------------------------------------------- /src/FsCms.Web/Views/Shared/Error.cshtml: -------------------------------------------------------------------------------- 1 | @model ErrorViewModel 2 | @{ 3 | ViewData["Title"] = "Error"; 4 | } 5 | 6 |

    Error.

    7 |

    An error occurred while processing your request.

    8 | 9 | @if (Model.ShowRequestId) 10 | { 11 |

    12 | Request ID: @Model.RequestId 13 |

    14 | } 15 | 16 |

    Development Mode

    17 |

    18 | Swapping to Development environment will display more detailed information about the error that occurred. 19 |

    20 |

    21 | Development environment should not be enabled in deployed applications, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the ASPNETCORE_ENVIRONMENT environment variable to Development, and restarting the application. 22 |

    23 | -------------------------------------------------------------------------------- /src/FsCms.Web/Views/Shared/_CookieConsentPartial.cshtml: -------------------------------------------------------------------------------- 1 | @using Microsoft.AspNetCore.Http.Features 2 | 3 | @{ 4 | var consentFeature = Context.Features.Get(); 5 | var showBanner = false; 6 | var cookieString = consentFeature?.CreateConsentCookie(); 7 | } 8 | 9 | @if (showBanner) 10 | { 11 | 33 | 41 | } -------------------------------------------------------------------------------- /src/FsCms.Web/Views/Shared/_Layout.cshtml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | @ViewData["Title"] 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | @Html.Action("Header", "Home") 38 |
    39 | @RenderBody() 40 | 51 | @**@ 52 |
    53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 74 | 75 | @RenderSection("Scripts", required: false) 76 | 77 | 78 | -------------------------------------------------------------------------------- /src/FsCms.Web/Views/Shared/_ValidationScriptsPartial.cshtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /src/FsCms.Web/Views/Template/Index.cshtml: -------------------------------------------------------------------------------- 1 | @* 2 | For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860 3 | *@ 4 |
    5 |
    6 |
      7 |
      8 |
      9 |
      10 | 模板功能正在开发中...... 11 |
      12 |
      13 |
      14 |
      15 | 16 |
      -------------------------------------------------------------------------------- /src/FsCms.Web/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using FsCms.Web 2 | @using FsCms.Web.Models 3 | @using FsCms.Entity 4 | @using Microsoft.AspNetCore.Routing 5 | 6 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 7 | -------------------------------------------------------------------------------- /src/FsCms.Web/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /src/FsCms.Web/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "ConnectionStrings": { 3 | "DefaultDbContext": "Data Source=127.0.0.1;Port=3307;User ID=root;Password=abc123456;Database=freesqltest2;Charset=utf8;SslMode=none;Max pool size=10" 4 | }, 5 | "DbContexts": { 6 | "DbType": "MySql", 7 | "SqlServer": { 8 | "ConnectionString": "Data Source=127.0.0.1;Initial Catalog=fscms;User Id=sa;Password=password123;", 9 | "IsAutoMigration": true 10 | }, 11 | "MySql": { 12 | "ConnectionString": "Data Source=127.0.0.1;Port=3307;User ID=root;Password=abc123456;Database=fscms;Charset=utf8;SslMode=none;Max pool size=10", 13 | "IsAutoMigration": true 14 | }, 15 | "PostgreSQL": { 16 | "ConnectionString": "PORT=5432;DATABASE=fscms;HOST=127.0.0.1;PASSWORD=root;USER ID=postgres", 17 | "IsAutoMigration": true 18 | }, 19 | "Oracle": { 20 | "ConnectionString": "Data Source=fscms;User Id=fscms;Password=abc123456;Integrated Security=no;", 21 | "IsAutoMigration": true 22 | }, 23 | "Sqlite": { 24 | "ConnectionString": "Data Source=|DataDirectory|\\document.db;Pooling=true;Max Pool Size=10", 25 | "IsAutoMigration": true 26 | 27 | } 28 | }, 29 | "PathConfig": { 30 | "IsClearDataSync": "false", 31 | "InitDocFiles": "E:\\GitHub\\FreeSqlCms\\src\\FsCms.Web\\wwwroot\\file\\FreeSql.wiki" 32 | }, 33 | "Logging": { 34 | "LogLevel": { 35 | "Default": "Warning" 36 | } 37 | }, 38 | "AllowedHosts": "*" 39 | } 40 | -------------------------------------------------------------------------------- /src/FsCms.Web/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "ConnectionStrings": { 3 | "DefaultDbContext": "Data Source=127.0.0.1;Port=3307;User ID=root;Password=abc123456;Database=freesqltest2;Charset=utf8;SslMode=none;Max pool size=10" 4 | }, 5 | "DbContexts": { 6 | "DbType": "MySql", 7 | "SqlServer": { 8 | "ConnectionString": "Data Source=127.0.0.1;Initial Catalog=fscms;User Id=sa;Password=password123;", 9 | "IsAutoMigration": true 10 | }, 11 | "MySql": { 12 | "ConnectionString": "Data Source=127.0.0.1;Port=3307;User ID=root;Password=abc123456;Database=fscms;Charset=utf8;SslMode=none;Max pool size=10", 13 | "IsAutoMigration": true 14 | }, 15 | "PostgreSQL": { 16 | "ConnectionString": "PORT=5432;DATABASE=fscms;HOST=127.0.0.1;PASSWORD=root;USER ID=postgres", 17 | "IsAutoMigration": true 18 | }, 19 | "Oracle": { 20 | "ConnectionString": "Data Source=fscms;User Id=fscms;Password=abc123456;Integrated Security=no;", 21 | "IsAutoMigration": true 22 | }, 23 | "Sqlite": { 24 | "ConnectionString": "Data Source=|DataDirectory|\\document.db;Pooling=true;Max Pool Size=10", 25 | "IsAutoMigration": true 26 | 27 | } 28 | }, 29 | "PathConfig": { 30 | "IsClearDataSync": false, 31 | "InitDocFiles": "E:/GitHub/FreeSqlCms/src/FsCms.Web/wwwroot/file/FreeSql.wiki" 32 | }, 33 | "Logging": { 34 | "LogLevel": { 35 | "Default": "Warning" 36 | } 37 | }, 38 | "AllowedHosts": "*" 39 | } 40 | -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/css/admin.min.css: -------------------------------------------------------------------------------- 1 | body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}.carousel-caption p{font-size:20px;line-height:1.4}.carousel-inner .item img[src$=".svg"]{width:100%}#qrCode{margin:15px}@media screen and (max-width:767px){.carousel-caption{display:none}} -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/css/app.css: -------------------------------------------------------------------------------- 1 | .list-wall { 2 | padding: 10px 10px 5px 10px; 3 | } 4 | .demoTable .layui-form-item { 5 | margin-bottom: 0px; 6 | clear: both; 7 | } 8 | .demoTable .layui-input, .demoTable .layui-textarea { 9 | display: block; 10 | width: 100%; 11 | padding-left: 10px; 12 | font-size: 13px; 13 | } 14 | 15 | .demoTable .layui-input, .demoTable .layui-select, .demoTable .layui-textarea { 16 | height: 30px; 17 | line-height: 1.2; 18 | border-width: 1px; 19 | border-style: solid; 20 | background-color: #fff; 21 | border-radius: 2px; 22 | } 23 | 24 | .layui-table td, .layui-table th { 25 | position: relative; 26 | padding: 6px 10px; 27 | min-height: 20px; 28 | line-height: 20px; 29 | font-size: 13px; 30 | } 31 | .layui-table-view .layui-table td, .layui-table-view .layui-table th { 32 | padding: 3px 0; 33 | border-top: none; 34 | border-left: none; 35 | } -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/css/login.min.css: -------------------------------------------------------------------------------- 1 | body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}.carousel-caption p{font-size:20px;line-height:1.4}.carousel-inner .item img[src$=".svg"]{width:100%}#qrCode{margin:15px}@media screen and (max-width:767px){.carousel-caption{display:none}} -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/css/site.min.css: -------------------------------------------------------------------------------- 1 | body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}.carousel-caption p{font-size:20px;line-height:1.4}.carousel-inner .item img[src$=".svg"]{width:100%}#qrCode{margin:15px}@media screen and (max-width:767px){.carousel-caption{display:none}} -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/data2.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "1", 4 | "pid": "0", 5 | "title": "水果" 6 | }, 7 | { 8 | "id": "101", 9 | "pid": "1", 10 | "title": "苹果" 11 | }, 12 | { 13 | "id": "102", 14 | "pid": "1", 15 | "title": "香蕉" 16 | }, 17 | { 18 | "id": "103", 19 | "pid": "1", 20 | "title": "梨" 21 | }, 22 | { 23 | "id": "10101", 24 | "pid": "101", 25 | "title": "红富士苹果" 26 | }, 27 | { 28 | "id": "10102", 29 | "pid": "101", 30 | "title": "红星苹果" 31 | }, 32 | { 33 | "id": "10103", 34 | "pid": "101", 35 | "title": "嘎拉" 36 | }, 37 | { 38 | "id": "10104", 39 | "pid": "101", 40 | "title": "桑萨" 41 | }, 42 | { 43 | "id": "10201", 44 | "pid": "102", 45 | "title": "千层蕉" 46 | }, 47 | { 48 | "id": "10202", 49 | "pid": "102", 50 | "title": "仙人蕉" 51 | }, 52 | { 53 | "id": "10203", 54 | "pid": "102", 55 | "title": "吕宋蕉" 56 | } 57 | ] -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/demo1.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": 0 3 | ,"msg": "" 4 | ,"count": 3000000 5 | ,"data": [{ 6 | "id": "10001" 7 | ,"username": "杜甫" 8 | ,"email": "xianxin@layui.com" 9 | ,"sex": "男" 10 | ,"city": "浙江杭州" 11 | ,"sign": "鼠标移动到此处,可以通过点击单元格右侧的下拉图标,查看到被隐藏的全部内容。" 12 | ,"experience": "7" 13 | ,"ip": "192.168.0.8" 14 | ,"logins": null 15 | ,"joinTime": "2016-10-14" 16 | }, { 17 | "id": "10002" 18 | ,"username": "李白" 19 | ,"email": "xianxin@layui.com" 20 | ,"sex": "男" 21 | ,"city": "浙江杭州" 22 | ,"sign": "君不见,黄河之水天上来,奔流到海不复回。 君不见,高堂明镜悲白发,朝如青丝暮成雪。 人生得意须尽欢,莫使金樽空对月。 天生我材必有用,千金散尽还复来。 烹羊宰牛且为乐,会须一饮三百杯。 岑夫子,丹丘生,将进酒,杯莫停。 与君歌一曲,请君为我倾耳听。(倾耳听 一作:侧耳听) 钟鼓馔玉不足贵,但愿长醉不复醒。(不足贵 一作:何足贵;不复醒 一作:不愿醒/不用醒) 古来圣贤皆寂寞,惟有饮者留其名。(古来 一作:自古;惟 通:唯) 陈王昔时宴平乐,斗酒十千恣欢谑。 主人何为言少钱,径须沽取对君酌。 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。" 23 | ,"experience": "9" 24 | ,"ip": "192.168.0.8" 25 | ,"logins": "106" 26 | ,"joinTime": "2016-10-14" 27 | ,"LAY_CHECKED": true 28 | }, { 29 | "id": "10003" 30 | ,"username": "王勃" 31 | ,"email": "xianxin@layui.com" 32 | ,"sex": "男" 33 | ,"city": "浙江杭州" 34 | ,"sign": "人生恰似一场修行" 35 | ,"experience": "8" 36 | ,"ip": "192.168.0.8" 37 | ,"logins": null 38 | ,"joinTime": "2016-10-14" 39 | }, { 40 | "id": "10004" 41 | ,"username": "李清照" 42 | ,"email": "xianxin@layui.com" 43 | ,"sex": "女" 44 | ,"city": "浙江杭州" 45 | ,"sign": "人生恰似一场修行" 46 | ,"experience": "6" 47 | ,"ip": "192.168.0.8" 48 | ,"logins": "106" 49 | ,"joinTime": "2016-10-14" 50 | }, { 51 | "id": "10005" 52 | ,"username": "冰心" 53 | ,"email": "xianxin@layui.com" 54 | ,"sex": "女" 55 | ,"city": "浙江杭州" 56 | ,"sign": "人生恰似一场修行" 57 | ,"experience": "64" 58 | ,"ip": "192.168.0.8" 59 | ,"logins": "106" 60 | ,"joinTime": "2016-10-14" 61 | }, { 62 | "id": "10006" 63 | ,"username": "贤心" 64 | ,"email": "xianxin@layui.com" 65 | ,"sex": "男" 66 | ,"city": "浙江杭州" 67 | ,"sign": "人生恰似一场修行" 68 | ,"experience": "65" 69 | ,"ip": "192.168.0.8" 70 | ,"logins": "106" 71 | ,"joinTime": "2016-10-14" 72 | }, { 73 | "id": "10007" 74 | ,"username": "贤心" 75 | ,"email": "xianxin@layui.com" 76 | ,"sex": "男" 77 | ,"city": "浙江杭州" 78 | ,"sign": "人生恰似一场修行" 79 | ,"experience": "49" 80 | ,"ip": "192.168.0.8" 81 | ,"logins": "106" 82 | ,"joinTime": "2016-10-14" 83 | }, { 84 | "id": "10008" 85 | ,"username": "贤心" 86 | ,"email": "xianxin@layui.com" 87 | ,"sex": "男" 88 | ,"city": "浙江杭州" 89 | ,"sign": "人生恰似一场修行" 90 | ,"experience": "5" 91 | ,"ip": "192.168.0.8" 92 | ,"logins": "106" 93 | ,"joinTime": "2016-10-14" 94 | }] 95 | } -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/favicon.ico -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/file/dbfirst.md: -------------------------------------------------------------------------------- 1 | # DbFirst 2 | 3 | ```csharp 4 | IFreeSql fsql = new FreeSql.FreeSqlBuilder() 5 | .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10") 6 | .Build(); 7 | ``` 8 | 9 | ### 获取所有数据库 10 | 11 | ```csharp 12 | var t1 = fsql.DbFirst.GetDatabases(); 13 | //返回字符串数组, ["cccddd", "test"] 14 | ``` 15 | 16 | ### 获取指定数据库的表信息 17 | 18 | ```csharp 19 | var t2 = fsql.DbFirst.GetTablesByDatabase(fsql.DbFirst.GetDatabases()[0]); 20 | //返回包括表、列详情、主键、唯一键、索引、外键 21 | ``` 22 | 23 | # 生成器 24 | 25 | 生成器是基于 dbfirst 开发的辅助工具,适用老项目一键生成实体。生成器采用模板的方式,作者实现了三种生成模板: 26 | 27 | | 模板名称 | 路径 | 类型映射 | 外键导航属性 | 缓存管理 | 失血 | 贫血 | 充血 | 28 | | ------------- | - | - |- | - |- | - |- | 29 | | simple-entity | ../Templates/MySql/simple-entity | √ | X | X | √ | X | X | 30 | | simple-entity-navigation-object | ../Templates/MySql/simple-entity-navigation-object | √ | √ | X | √ | X | X | 31 | | rich-entity-navigation-object | ../Templates/MySql/rich-entity-navigation-object | √ | √ | √ | X | √ | X | 32 | 33 | > 更多模板逐步开发中。。。 34 | 35 | ```csharp 36 | //创建模板生成类现实 37 | var gen = new FreeSql.Generator.TemplateGenerator(); 38 | gen.Build(fsql.DbFirst, 39 | @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity", //模板目录(事先下载) 40 | @"C:\Users\28810\Desktop\新建文件夹 (9)", //生成后保存的目录 41 | "cccddd" //数据库 42 | ); 43 | ``` 44 | 45 | ## 模板语法 46 | 47 | ```html 48 | 49 | 50 | {#title} 51 | 52 | 53 | 54 | 55 | {#表达式} 56 | {##表达式} 当表达式可能发生runtime错误时使用,性能没有上面的高 57 | 58 | 59 | {include ../header.html} 60 |
      61 |

      aaa

      62 |

      bbb {#i}

      63 |

      ccc {#i}

      64 |
      65 | 66 | 67 | {module module_name1 parms1, 2, 3...} 68 | {/module} 69 | {module module_name2 parms1, 2, 3...} 70 | {/module} 71 | 72 | 73 | {import ../module.html as myname} 74 | {#myname.module_name(parms1, 2, 3...)} 75 | 76 | 77 | {extends ../inc/layout.html} 78 | {block body}{/block} 79 | 80 | 81 | {% 82 | for (var a = 0; a < 100; a++) 83 | print(a); 84 | %} 85 | 86 | 87 | {if i === 50} 88 | {elseif i > 60} 89 | {else} 90 | {/if} 91 | 92 | 93 | {for i 1,101} 可自定义名 {for index2 表达式1 in 表达式2} 94 | 95 | {for item,index in items} 可选参数称 index 96 | 可自定义名 {for item2, index99 in 数组表达式} 97 | 98 | {for key,item,index on json} 可选参数 item, index, 99 | 可自定义名 {for key2, item2, index99 in 对象表达式} 100 | {/for} 101 | 102 | 103 | {miss} 104 | 此块内容不被bmw.js解析 105 | {/miss} 106 | 107 | 108 | 109 | ``` -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/file/delete.md: -------------------------------------------------------------------------------- 1 | # 删除数据 2 | 3 | | 方法 | 返回值 | 参数 | 描述 | 4 | | - | - | - | - | 5 | | Where | \ | Lambda | 表达式条件,仅支持实体基础成员(不包含导航对象) | 6 | | Where | \ | string, parms | 原生sql语法条件,Where("id = ?id", new { id = 1 }) | 7 | | Where | \ | T1 \| IEnumerable | 传入实体或集合,将其主键作为条件 | 8 | | WhereExists | \ | ISelect | 子查询是否存在 | 9 | | ToSql | string | | 返回即将执行的SQL语句 | 10 | | ExecuteAffrows | long | | 执行SQL语句,返回影响的行数 | 11 | | ExecuteDeleted | List\ | | 执行SQL语句,返回被删除的记录 | 12 | 13 | ### 测试代码 14 | 15 | ```csharp 16 | IFreeSql fsql = new FreeSql.FreeSqlBuilder() 17 | .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10") 18 | .Build(); 19 | IDelete delete => fsql.Delete(); 20 | 21 | [Table(Name = "tb_topic")] 22 | class Topic { 23 | [Column(IsIdentity = true, IsPrimary = true)] 24 | public int Id { get; set; } 25 | public int Clicks { get; set; } 26 | public TestTypeInfo Type { get; set; } 27 | public string Title { get; set; } 28 | public DateTime CreateTime { get; set; } 29 | } 30 | ``` 31 | 32 | ### 动态条件 33 | ```csharp 34 | Delete(object dywhere) 35 | ``` 36 | dywhere 支持 37 | 38 | * 主键值 39 | * new[] { 主键值1, 主键值2 } 40 | * Topic对象 41 | * new[] { Topic对象1, Topic对象2 } 42 | * new { id = 1 } 43 | 44 | ```csharp 45 | var t1 = fsql.Delete(new[] { 1, 2 }).ToSql(); 46 | //DELETE FROM `tb_topic` WHERE (`Id` = 1 OR `Id` = 2) 47 | 48 | var t2 = fsql.Delete(new Topic { Id = 1, Title = "test" }).ToSql(); 49 | //DELETE FROM `tb_topic` WHERE (`Id` = 1) 50 | 51 | var t3 = fsql.Delete(new[] { new Topic { Id = 1, Title = "test" }, new Topic { Id = 2, Title = "test" } }).ToSql(); 52 | //DELETE FROM `tb_topic` WHERE (`Id` = 1 OR `Id` = 2) 53 | 54 | var t4 = fsql.Delete(new { id = 1 }).ToSql(); 55 | //DELETE FROM `tb_topic` WHERE (`Id` = 1) 56 | ``` 57 | 58 | ### 删除条件 59 | 60 | ```csharp 61 | var t5 = delete.Where(a => a.Id == 1).ToSql().Replace("\r\n", ""); 62 | //DELETE FROM `tb_topic` WHERE (`Id` = 1) 63 | 64 | var t6 = delete.Where("id = ?id", new { id = 1 }).ToSql().Replace("\r\n", ""); 65 | //DELETE FROM `tb_topic` WHERE (id = ?id) 66 | 67 | var item = new Topic { Id = 1, Title = "newtitle" }; 68 | var t7 = delete.Where(item).ToSql().Replace("\r\n", ""); 69 | //DELETE FROM `tb_topic` WHERE (`Id` = 1) 70 | 71 | var items = new List(); 72 | for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 }); 73 | var t8 = delete.Where(items).ToSql().Replace("\r\n", ""); 74 | //DELETE FROM `tb_topic` WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10)) 75 | ``` 76 | 77 | ### 执行命令 78 | 79 | | 方法 | 返回值 | 参数 | 描述 | 80 | | - | - | - | - | 81 | | ExecuteAffrows | long | | 执行SQL语句,返回影响的行数 | 82 | | ExecuteDeleted | List\ | | 执行SQL语句,返回被删除的记录 | -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/file/generator.md: -------------------------------------------------------------------------------- 1 | # 生成器 2 | 3 | 生成器是基于 dbfirst 开发的辅助工具,适用老项目一键生成实体。生成器采用模板的方式,作者实现了三种生成模板: 4 | 5 | | 模板名称 | 类型映射 | 外键导航属性 | 缓存管理 | 失血 | 贫血 | 充血 | 6 | | ------------- | - | - |- | - |- | - | 7 | | simple-entity | √ | X | X | √ | X | X | 8 | | simple-entity-navigation-object | √ | √ | X | √ | X | X | 9 | | rich-entity-navigation-object | √ | √ | √ | X | √ | X | 10 | 11 | 模板在项目目录:/Templates/MySql 12 | 13 | > 更多模板逐步开发中。。。 14 | 15 | ```csharp 16 | //定义 mysql FreeSql 17 | var mysql = new FreeSql.FreeSqlBuilder() 18 | .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10") 19 | .Build(); 20 | 21 | //创建模板生成类现实 22 | var gen = new FreeSql.Generator.TemplateGenerator(); 23 | gen.Build(mysql.DbFirst, 24 | @"C:\Users\28810\Desktop\github\FreeSql\Templates\MySql\simple-entity", //模板目录(事先下载) 25 | @"C:\Users\28810\Desktop\新建文件夹 (9)", //生成后保存的目录 26 | "cccddd" //数据库 27 | ); 28 | ``` 29 | 30 | ## 模板语法 31 | 32 | ```html 33 | 34 | 35 | {#title} 36 | 37 | 38 | 39 | 40 | {#表达式} 41 | {##表达式} 当表达式可能发生runtime错误时使用,性能没有上面的高 42 | 43 | 44 | {include ../header.html} 45 |
      46 |

      aaa

      47 |

      bbb {#i}

      48 |

      ccc {#i}

      49 |
      50 | 51 | 52 | {module module_name1 parms1, 2, 3...} 53 | {/module} 54 | {module module_name2 parms1, 2, 3...} 55 | {/module} 56 | 57 | 58 | {import ../module.html as myname} 59 | {#myname.module_name(parms1, 2, 3...)} 60 | 61 | 62 | {extends ../inc/layout.html} 63 | {block body}{/block} 64 | 65 | 66 | {% 67 | for (var a = 0; a < 100; a++) 68 | print(a); 69 | %} 70 | 71 | 72 | {if i === 50} 73 | {elseif i > 60} 74 | {else} 75 | {/if} 76 | 77 | 78 | {for i 1,101} 可自定义名 {for index2 表达式1 in 表达式2} 79 | 80 | {for item,index in items} 可选参数称 index 81 | 可自定义名 {for item2, index99 in 数组表达式} 82 | 83 | {for key,item,index on json} 可选参数 item, index, 84 | 可自定义名 {for key2, item2, index99 in 对象表达式} 85 | {/for} 86 | 87 | 88 | {miss} 89 | 此块内容不被bmw.js解析 90 | {/miss} 91 | 92 | 93 | 94 | ``` -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/images/banner1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/images/banner1.jpg -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/images/banner2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/images/banner2.jpg -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/images/banner3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/images/banner3.jpg -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/images/banner_index.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/images/banner_index.jpg -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/images/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/images/bg1.jpg -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/js/common.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/js/common.min.js -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/js/login.js: -------------------------------------------------------------------------------- 1 | // Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification 2 | // for details on configuring this project to bundle and minify static web assets. 3 | 4 | // Write your JavaScript code. 5 | -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/js/login.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/js/login.min.js -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/js/site.js: -------------------------------------------------------------------------------- 1 | // Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification 2 | // for details on configuring this project to bundle and minify static web assets. 3 | 4 | // Write your JavaScript code. 5 | -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/js/site.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/js/site.min.js -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/JqGrid/css/ui.jqgrid-bootstrap-ui.css: -------------------------------------------------------------------------------- 1 | /* 2 | To change this license header, choose License Headers in Project Properties. 3 | To change this template file, choose Tools | Templates 4 | and open the template in the editor. 5 | */ 6 | /* 7 | Created on : Mar 16, 2015, 10:24:01 AM 8 | Author : tony 9 | */ 10 | 11 | .ui-jqgrid tr.jqgrow td { height: 26px;} 12 | .ui-jqgrid .ui-pg-input,.ui-jqgrid .ui-jqgrid-toppager .ui-pg-input { height:20px } 13 | .ui-state-hover 14 | { 15 | border: .15em solid; 16 | border-color: inherit; 17 | 18 | } 19 | .ui-jqdialog .ui-jqdialog-titlebar { 20 | height:29px; 21 | border-color: inherit; 22 | } 23 | 24 | .ui-jqdialog-content input.FormElement { 25 | padding: 0.25em; 26 | } 27 | 28 | .fm-button { 29 | height:30px; 30 | } 31 | #nData, #pData { height:20px; width:18px; } -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/JqGrid/js/install.txt: -------------------------------------------------------------------------------- 1 | Installation 2 | 3 | Download the jqGrid package from the www.trirand/blog site section downloads. 4 | Note the new download manager where you can choose which modules you want to 5 | include in the download. 6 | 7 | In order to use jqGrid 3.5, first a UI theme css file should be loaded. 8 | Download the desired theme (or build a custom one) from jQueryUI site 9 | (www.jqueryui.com) and point in your link tag in head section the path to the 10 | theme css 11 | 12 | 13 | 14 | where the path_to_ui_css_file is a valid path to the ui theme file 15 | 16 | Extract the jqGrid package and copy the ui.jqgrid.css from css directory to 17 | your webserver directory. It is not necessary that the jqgrid css file is in 18 | the same directory as those of the jquery ui css. 19 | 20 | 21 | 22 | Starting with this version, jqGrid does not use a loader (which loads the 23 | needed files one by one), but all the needed code is contained in one file. 24 | The desired modules can be built using the jqGrid download manager from the 25 | site pointed above. In order to use this, first a language file should be 26 | loaded and then the jqgrid file. 27 | 28 | Copy the desired language file from js/i18n directory to your web server 29 | directory where you store the java script files. Every language file is 30 | named grid.locale-XX.js, where XX is a two-letter code for the language. 31 | Copy the jquery.jqGid.min.js file to the same or other valid directory in 32 | your web server 33 | 34 | Include both the files in script tags in the head section 35 | 36 | 37 | 38 | 39 | For debugging purposes, I have created a grid.loader.js which does the same 40 | loading of the files as in previous versions. The location of the file is in 41 | src directory of the package. In order to use this, the variable pathojsfiles 42 | should be adjusted to point to the appropriate folder - see 3.4.x docs. 43 | 44 | -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/JqGrid/plugins/grid.postext.js: -------------------------------------------------------------------------------- 1 | ;(function($){ 2 | /** 3 | * jqGrid extension 4 | * Paul Tiseo ptiseo@wasteconsultants.com 5 | * 6 | * Dual licensed under the MIT and GPL licenses: 7 | * http://www.opensource.org/licenses/mit-license.php 8 | * http://www.gnu.org/licenses/gpl-2.0.html 9 | **/ 10 | $.jgrid.extend({ 11 | getPostData : function(){ 12 | var $t = this[0]; 13 | if(!$t.grid) { return; } 14 | return $t.p.postData; 15 | }, 16 | setPostData : function( newdata ) { 17 | var $t = this[0]; 18 | if(!$t.grid) { return; } 19 | // check if newdata is correct type 20 | if ( typeof(newdata) === 'object' ) { 21 | $t.p.postData = newdata; 22 | } 23 | else { 24 | alert("Error: cannot add a non-object postData value. postData unchanged."); 25 | } 26 | }, 27 | appendPostData : function( newdata ) { 28 | var $t = this[0]; 29 | if(!$t.grid) { return; } 30 | // check if newdata is correct type 31 | if ( typeof(newdata) === 'object' ) { 32 | $.extend($t.p.postData, newdata); 33 | } 34 | else { 35 | alert("Error: cannot append a non-object postData value. postData unchanged."); 36 | } 37 | }, 38 | setPostDataItem : function( key, val ) { 39 | var $t = this[0]; 40 | if(!$t.grid) { return; } 41 | $t.p.postData[key] = val; 42 | }, 43 | getPostDataItem : function( key ) { 44 | var $t = this[0]; 45 | if(!$t.grid) { return; } 46 | return $t.p.postData[key]; 47 | }, 48 | removePostDataItem : function( key ) { 49 | var $t = this[0]; 50 | if(!$t.grid) { return; } 51 | delete $t.p.postData[key]; 52 | }, 53 | getUserData : function(){ 54 | var $t = this[0]; 55 | if(!$t.grid) { return; } 56 | return $t.p.userData; 57 | }, 58 | getUserDataItem : function( key ) { 59 | var $t = this[0]; 60 | if(!$t.grid) { return; } 61 | return $t.p.userData[key]; 62 | } 63 | }); 64 | })(jQuery); -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/JqGrid/plugins/searchFilter.css: -------------------------------------------------------------------------------- 1 | .ui-searchFilter { display: none; position: absolute; z-index: 770; overflow: visible;} 2 | .ui-searchFilter table {position:relative; margin:0em; width:auto} 3 | .ui-searchFilter table td {margin: 0em; padding: 1px;} 4 | .ui-searchFilter table td input, .ui-searchFilter table td select {margin: 0.1em;} 5 | .ui-searchFilter .ui-state-default { cursor: pointer; } 6 | .ui-searchFilter .divider hr {margin: 1px; } -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/JqGrid/plugins/ui.multiselect.css: -------------------------------------------------------------------------------- 1 | /* Multiselect 2 | ----------------------------------*/ 3 | 4 | .ui-multiselect { border: solid 1px; font-size: 0.8em; } 5 | .ui-multiselect ul { -moz-user-select: none; } 6 | .ui-multiselect li { margin: 0; padding: 0; cursor: default; line-height: 20px; height: 20px; font-size: 11px; list-style: none; } 7 | .ui-multiselect li a { color: #999; text-decoration: none; padding: 0; display: block; float: left; cursor: pointer;} 8 | .ui-multiselect li.ui-draggable-dragging { padding-left: 10px; } 9 | 10 | .ui-multiselect div.selected { position: relative; padding: 0; margin: 0; border: 0; float:left; } 11 | .ui-multiselect ul.selected { position: relative; padding: 0; overflow: auto; overflow-x: hidden; background: #fff; margin: 0; list-style: none; border: 0; position: relative; width: 100%; } 12 | .ui-multiselect ul.selected li { } 13 | 14 | .ui-multiselect div.available { position: relative; padding: 0; margin: 0; border: 0; float:left; border-left: 1px solid; } 15 | .ui-multiselect ul.available { position: relative; padding: 0; overflow: auto; overflow-x: hidden; background: #fff; margin: 0; list-style: none; border: 0; width: 100%; } 16 | .ui-multiselect ul.available li { padding-left: 10px; } 17 | 18 | .ui-multiselect .ui-state-default { border: none; margin-bottom: 1px; position: relative; padding-left: 20px;} 19 | .ui-multiselect .ui-state-hover { border: none; } 20 | .ui-multiselect .ui-widget-header {border: none; font-size: 11px; margin-bottom: 1px;} 21 | 22 | .ui-multiselect .add-all { float: right; padding: 7px;} 23 | .ui-multiselect .remove-all { float: right; padding: 7px;} 24 | .ui-multiselect .search { float: left; padding: 4px;} 25 | .ui-multiselect .count { float: left; padding: 7px;} 26 | 27 | .ui-multiselect li span.ui-icon-arrowthick-2-n-s { position: absolute; left: 2px; } 28 | .ui-multiselect li a.action { position: absolute; right: 2px; top: 2px; } 29 | 30 | .ui-multiselect input.search { height: 14px; padding: 1px; opacity: 0.5; margin: 4px; width: 100px; } -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/JqGrid/src/css/ui.jqgrid-bootstrap-ui.css: -------------------------------------------------------------------------------- 1 | /* 2 | To change this license header, choose License Headers in Project Properties. 3 | To change this template file, choose Tools | Templates 4 | and open the template in the editor. 5 | */ 6 | /* 7 | Created on : Mar 16, 2015, 10:24:01 AM 8 | Author : tony 9 | */ 10 | 11 | .ui-jqgrid tr.jqgrow td { height: 26px;} 12 | .ui-jqgrid .ui-pg-input,.ui-jqgrid .ui-jqgrid-toppager .ui-pg-input { height:20px } 13 | .ui-state-hover 14 | { 15 | border: .15em solid; 16 | border-color: inherit; 17 | 18 | } 19 | .ui-jqdialog .ui-jqdialog-titlebar { 20 | height:29px; 21 | border-color: inherit; 22 | } 23 | 24 | .ui-jqdialog-content input.FormElement { 25 | padding: 0.25em; 26 | } 27 | 28 | .fm-button { 29 | height:30px; 30 | } 31 | #nData, #pData { height:20px; width:18px; } -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/JqGrid/src/css/ui.multiselect.css: -------------------------------------------------------------------------------- 1 | /* Multiselect 2 | ----------------------------------*/ 3 | 4 | .ui-multiselect { border: solid 1px; font-size: 0.8em; } 5 | .ui-multiselect ul { -moz-user-select: none; } 6 | .ui-multiselect li { margin: 0; padding: 0; cursor: default; line-height: 20px; height: 20px; font-size: 11px; list-style: none; } 7 | .ui-multiselect li a { color: #999; text-decoration: none; padding: 0; display: block; float: left; cursor: pointer;} 8 | .ui-multiselect li.ui-draggable-dragging { padding-left: 10px; } 9 | 10 | .ui-multiselect div.selected { position: relative; padding: 0; margin: 0; border: 0; float:left; } 11 | .ui-multiselect ul.selected { position: relative; padding: 0; overflow: auto; overflow-x: hidden; background: #fff; margin: 0; list-style: none; border: 0; position: relative; width: 100%; } 12 | .ui-multiselect ul.selected li { } 13 | 14 | .ui-multiselect div.available { position: relative; padding: 0; margin: 0; border: 0; float:left; border-left: 1px solid; } 15 | .ui-multiselect ul.available { position: relative; padding: 0; overflow: auto; overflow-x: hidden; background: #fff; margin: 0; list-style: none; border: 0; width: 100%; } 16 | .ui-multiselect ul.available li { padding-left: 10px; } 17 | 18 | .ui-multiselect .ui-state-default { border: none; margin-bottom: 1px; position: relative; padding-left: 20px;} 19 | .ui-multiselect .ui-state-hover { border: none; } 20 | .ui-multiselect .ui-widget-header {border: none; font-size: 11px; margin-bottom: 1px;} 21 | 22 | .ui-multiselect .add-all { float: right; padding: 7px;} 23 | .ui-multiselect .remove-all { float: right; padding: 7px;} 24 | .ui-multiselect .search { float: left; padding: 4px;} 25 | .ui-multiselect .count { float: left; padding: 7px;} 26 | 27 | .ui-multiselect li span.ui-icon-arrowthick-2-n-s { position: absolute; left: 2px; } 28 | .ui-multiselect li a.action { position: absolute; right: 2px; top: 2px; } 29 | 30 | .ui-multiselect input.search { height: 14px; padding: 1px; opacity: 0.5; margin: 4px; width: 100px; } -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/bootstrap/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "keywords": [ 5 | "css", 6 | "js", 7 | "less", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "http://getbootstrap.com", 15 | "license": "MIT", 16 | "moduleType": "globals", 17 | "main": [ 18 | "less/bootstrap.less", 19 | "dist/js/bootstrap.js" 20 | ], 21 | "ignore": [ 22 | "/.*", 23 | "_config.yml", 24 | "CNAME", 25 | "composer.json", 26 | "CONTRIBUTING.md", 27 | "docs", 28 | "js/tests", 29 | "test-infra" 30 | ], 31 | "dependencies": { 32 | "jquery": "1.9.1 - 3" 33 | }, 34 | "version": "3.3.7", 35 | "_release": "3.3.7", 36 | "_resolution": { 37 | "type": "version", 38 | "tag": "v3.3.7", 39 | "commit": "0b9c4a4007c44201dce9a6cc1a38407005c26c86" 40 | }, 41 | "_source": "https://github.com/twbs/bootstrap.git", 42 | "_target": "v3.3.7", 43 | "_originalSource": "bootstrap", 44 | "_direct": true 45 | } -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/bootstrap/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011-2016 Twitter, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/bootstrap/dist/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/jquery-validation-unobtrusive/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-validation-unobtrusive", 3 | "homepage": "https://github.com/aspnet/jquery-validation-unobtrusive", 4 | "version": "3.2.9", 5 | "_release": "3.2.9", 6 | "_resolution": { 7 | "type": "version", 8 | "tag": "v3.2.9", 9 | "commit": "a91f5401898e125f10771c5f5f0909d8c4c82396" 10 | }, 11 | "_source": "https://github.com/aspnet/jquery-validation-unobtrusive.git", 12 | "_target": "^3.2.9", 13 | "_originalSource": "jquery-validation-unobtrusive", 14 | "_direct": true 15 | } -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) .NET Foundation. All rights reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); you may not use 4 | these files except in compliance with the License. You may obtain a copy of the 5 | License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software distributed 10 | under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 11 | CONDITIONS OF ANY KIND, either express or implied. See the License for the 12 | specific language governing permissions and limitations under the License. 13 | -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/jquery-validation/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-validation", 3 | "homepage": "https://jqueryvalidation.org/", 4 | "repository": { 5 | "type": "git", 6 | "url": "git://github.com/jquery-validation/jquery-validation.git" 7 | }, 8 | "authors": [ 9 | "Jörn Zaefferer " 10 | ], 11 | "description": "Form validation made easy", 12 | "main": "dist/jquery.validate.js", 13 | "keywords": [ 14 | "forms", 15 | "validation", 16 | "validate" 17 | ], 18 | "license": "MIT", 19 | "ignore": [ 20 | "**/.*", 21 | "node_modules", 22 | "bower_components", 23 | "test", 24 | "demo", 25 | "lib" 26 | ], 27 | "dependencies": { 28 | "jquery": ">= 1.7.2" 29 | }, 30 | "version": "1.17.0", 31 | "_release": "1.17.0", 32 | "_resolution": { 33 | "type": "version", 34 | "tag": "1.17.0", 35 | "commit": "fc9b12d3bfaa2d0c04605855b896edb2934c0772" 36 | }, 37 | "_source": "https://github.com/jzaefferer/jquery-validation.git", 38 | "_target": "^1.17.0", 39 | "_originalSource": "jquery-validation", 40 | "_direct": true 41 | } -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/jquery-validation/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | ===================== 3 | 4 | Copyright Jörn Zaefferer 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/jquery/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "main": "dist/jquery.js", 4 | "license": "MIT", 5 | "ignore": [ 6 | "package.json" 7 | ], 8 | "keywords": [ 9 | "jquery", 10 | "javascript", 11 | "browser", 12 | "library" 13 | ], 14 | "homepage": "https://github.com/jquery/jquery-dist", 15 | "version": "3.3.1", 16 | "_release": "3.3.1", 17 | "_resolution": { 18 | "type": "version", 19 | "tag": "3.3.1", 20 | "commit": "9e8ec3d10fad04748176144f108d7355662ae75e" 21 | }, 22 | "_source": "https://github.com/jquery/jquery-dist.git", 23 | "_target": "^3.3.1", 24 | "_originalSource": "jquery", 25 | "_direct": true 26 | } -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/jquery/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright JS Foundation and other contributors, https://js.foundation/ 2 | 3 | This software consists of voluntary contributions made by many 4 | individuals. For exact contribution history, see the revision history 5 | available at https://github.com/jquery/jquery 6 | 7 | The following license applies to all parts of this software except as 8 | documented below: 9 | 10 | ==== 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining 13 | a copy of this software and associated documentation files (the 14 | "Software"), to deal in the Software without restriction, including 15 | without limitation the rights to use, copy, modify, merge, publish, 16 | distribute, sublicense, and/or sell copies of the Software, and to 17 | permit persons to whom the Software is furnished to do so, subject to 18 | the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be 21 | included in all copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 27 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 28 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 29 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 30 | 31 | ==== 32 | 33 | All files located in the node_modules and external directories are 34 | externally maintained libraries used by this software which have their 35 | own licenses; we recommend you read them, as their terms may differ from 36 | the terms above. 37 | -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | @Name: layui.code 4 | @Author: 贤心 5 | @Site: http://www.layui.com 6 | 7 | */ 8 | 9 | /* 加载就绪标志 */ 10 | html #layuicss-skincodecss{display:none; position: absolute; width:1989px;} 11 | 12 | /* 默认风格 */ 13 | .layui-code-view{display: block; position: relative; margin: 10px 0; padding: 0; border: 1px solid #e2e2e2; border-left-width: 6px; background-color: #F2F2F2; color: #333; font-family: Courier New; font-size: 12px;} 14 | .layui-code-h3{position: relative; padding: 0 10px; height: 32px; line-height: 32px; border-bottom: 1px solid #e2e2e2; font-size: 12px;} 15 | .layui-code-h3 a{position: absolute; right: 10px; top: 0; color: #999;} 16 | .layui-code-view .layui-code-ol{position: relative; overflow: auto;} 17 | .layui-code-view .layui-code-ol li{position: relative; margin-left: 45px; line-height: 20px; padding: 0 5px; border-left: 1px solid #e2e2e2; list-style-type: decimal-leading-zero; *list-style-type: decimal; background-color: #fff;} 18 | .layui-code-view pre{margin: 0;} 19 | 20 | /* notepadd++风格 */ 21 | .layui-code-notepad{border: 1px solid #0C0C0C; border-left-color: #3F3F3F; background-color: #0C0C0C; color: #C2BE9E} 22 | .layui-code-notepad .layui-code-h3{border-bottom: none;} 23 | .layui-code-notepad .layui-code-ol li{background-color: #3F3F3F; border-left: none;} -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/css/modules/laydate/default/font.css: -------------------------------------------------------------------------------- 1 | /** 图标字体 **/ 2 | @font-face {font-family: 'laydate-icon'; 3 | src: url('./font/iconfont.eot'); 4 | src: url('./font/iconfont.eot#iefix') format('embedded-opentype'), 5 | url('./font/iconfont.svg#iconfont') format('svg'), 6 | url('./font/iconfont.woff') format('woff'), 7 | url('./font/iconfont.ttf') format('truetype'); 8 | } 9 | 10 | .laydate-icon{ 11 | font-family:"laydate-icon" !important; 12 | font-size: 16px; 13 | font-style: normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/css/modules/selectY.css: -------------------------------------------------------------------------------- 1 | /* selectY 样式表*/ 2 | .selectY-box{position: relative;height: 30px;} 3 | .selectY-box .show{position:relative;height:28px;line-height: 28px;padding:0 25px 0 10px;min-width:30px;display: inline-block;background-color:#fff;cursor: pointer} 4 | .selectY-box .show:after{font-family:'layui-icon'!important;content: "\e602";color:#e6e6e6;position: absolute;top:0;right:5px} 5 | .selectY-box .show i{color:#e6e6e6;padding:0 5px} 6 | .selectY-box .pop{position: absolute;z-index:99;top:29px;left:0;display: none;box-shadow: 0 2px 5px 0 rgba(0,0,0,.1);} 7 | .selectY-box .show,.selectY-box .pop ul{border:1px solid #e6e6e6;} 8 | .selectY-box .pop ul{background-color:#fff;min-width:160px;height:237px;padding:5px 0;float:left;margin-left: -1px;overflow :auto;} 9 | .selectY-box .pop ul:first-child{margin-left:0} 10 | .selectY-box .pop ul li{padding:5px 30px 5px 20px;position: relative;cursor: pointer} 11 | .selectY-box .pop ul li.child-row:after{font-family:'layui-icon'!important;content: "\e602";color:#e6e6e6;position: absolute;top:5px;right:10px} 12 | .selectY-box .pop ul li:hover{background-color:#f8f8f8} 13 | .selectY-box .pop ul li.active{color:red} -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/ext/laymd/laymd.css: -------------------------------------------------------------------------------- 1 | .layui-laymd { 2 | position: relative; 3 | display: block; 4 | border: 1px solid #e6e6e6; 5 | box-sizing: border-box; 6 | } 7 | 8 | .layui-form-item[pane] .layui-laymd { 9 | border: none; 10 | } 11 | 12 | .layui-laymd-tool { 13 | padding: 3px; 14 | border-bottom: 1px solid #e6e6e6; 15 | font-size: 0; 16 | } 17 | 18 | .layui-laymd-tool i, 19 | .layui-laymd-tool span { 20 | text-align: center; 21 | display: inline-block; 22 | vertical-align: middle; 23 | } 24 | 25 | .layui-laymd-tool i { 26 | min-width: 15px; 27 | height: 20px; 28 | line-height: 20px; 29 | padding: 3px 5px; 30 | color: #666; 31 | cursor: pointer; 32 | font-weight: bold; 33 | font-size: 16px; 34 | font-style: normal; 35 | font-family: Consolas, "Microsoft Sans Serif", sans-serif; 36 | } 37 | 38 | .layui-laymd-tool i.select, 39 | .layui-laymd-tool i:hover { 40 | background-color: #f2f2f2; 41 | } 42 | 43 | .layui-laymd-tool span { 44 | width: 1px; 45 | height: 20px; 46 | margin: 0 10px; 47 | background-color: #d2d2d2; 48 | } 49 | 50 | .layui-laymd-full { 51 | position: fixed; 52 | top: 0; 53 | left: 0; 54 | right: 0; 55 | bottom: 0; 56 | background-color: #fff; 57 | border: none; 58 | } 59 | 60 | .layui-laymd-area { 61 | position: relative; 62 | } 63 | 64 | .layui-laymd-full .layui-laymd-area { 65 | position: absolute; 66 | height: auto!important; 67 | left: 0; 68 | top: 33px; 69 | right: 0; 70 | bottom: 0; 71 | } 72 | 73 | .layui-laymd-area textarea { 74 | resize: none; 75 | width: 100%; 76 | height: 100%; 77 | box-sizing: border-box; 78 | vertical-align: middle; 79 | padding: 10px; 80 | border: none; 81 | letter-spacing: 1px; 82 | font-family: Consolas, "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif; 83 | font-size: 16px; 84 | outline: none; 85 | word-wrap: break-word; 86 | word-break: break-all; 87 | } 88 | 89 | .layui-laymd-full textarea { 90 | width: 50%; 91 | } 92 | 93 | .layui-laymd-area iframe { 94 | border: none; 95 | outline: none; 96 | width: 100%; 97 | height: 100%; 98 | box-sizing: border-box; 99 | position: absolute; 100 | left: 0; 101 | top: 0; 102 | display: none; 103 | background-color: #fff; 104 | } 105 | 106 | .layui-laymd-full iframe { 107 | display: block!important; 108 | width: 50%; 109 | left: 50%; 110 | border-left: 1px solid #e6e6e6; 111 | } 112 | -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/ext/treetable/css/frame.css: -------------------------------------------------------------------------------- 1 | html,body{height: 100%;overflow-y:hidden;} 2 | .system-top .layui-nav{height: 60px;display: inline-block;} 3 | 4 | .top-left{padding-left: 0;} 5 | .top-left .iconfont{font-size: 25px;} 6 | .top-left .layui-this:after{width: 0;} 7 | .top-right{position: absolute;right: 0;} 8 | .logo{background-color: #009688;height:60px;line-height:60px;font-size:18px;text-align:center;color:#fff;} 9 | .logo .layui-nav-img{margin-right: 0;} 10 | 11 | .system-left{height: 100%;position: fixed;z-index: 1;top: 0px;} 12 | .system-left .layui-nav .layui-nav-item{border-bottom: 1px solid #414d5c;} 13 | 14 | /** 左侧菜单展开模式 **/ 15 | .left-full .system-left,.left-full .logo{width: 200px;} 16 | .left-full .system-top,.left-full .system-content{padding-left:210px;} 17 | .left-full .text{display: block;}.left-full .image{display: none;} 18 | 19 | /** 左侧菜单收起(迷你)模式 **/ 20 | .left-mini .system-left,.left-mini .system-left .layui-nav{width: 56px;} 21 | .left-mini .system-top,.left-mini .system-content{padding-left: 66px;} 22 | .left-mini .system-left .layui-nav-item>a .title{display: none;} 23 | .left-mini .system-left dd span{display: none;} 24 | .left-mini .system-left .layui-nav-tree .layui-nav-more{right: 22px;} 25 | .left-mini .layui-nav-child dd{position: relative;} 26 | .left-mini .left-tips{position: absolute;left: 60px;top: 0;padding:0 10px;border-radius:2px;background-color: #000;} 27 | .left-mini .left-tips i{position: absolute;left: -8px;top: 5px;width: 0;height: 0;border-width: 8px;border-color: transparent;border-style: dashed;border-bottom-style: solid;border-bottom-color: #000;} 28 | .left-mini .logo .text{display: none;}.left-mini .logo .image{display: block;} 29 | 30 | .system-content .layui-tab-card{margin-bottom: 0;border: 0;} 31 | .system-content .layui-tab-card .layui-tab-title{border-top-left-radius: 15px;border-top-right-radius: 15px;position: absolute;z-index: 9;width: 100%;bottom: 0;height: 35px;} 32 | .system-content .layui-tab-card .layui-tab-title li{background: #f2f2f2;height: 35px;line-height: 35px;border-top-left-radius: 15px;border-top-right-radius: 15px;border-left: 1px solid #e2e2e2;border: 1px solid #e2e2e2;margin-right: 4px;} 33 | .system-content .layui-tab-card .layui-tab-title li .layui-tab-close{border: 1px solid #c2c2c2;border-radius: 50%;} 34 | .system-content .layui-tab-card .layui-tab-title li:first-child .layui-tab-close{display:none;} 35 | .system-content .layui-tab-card .layui-tab-title .layui-this{background-color: #009688;color: #fff;} 36 | .system-content .layui-tab-card .layui-tab-title .layui-this:after{border-style: none;} 37 | .system-content .layui-tab-card .layui-tab-title .layui-this .layui-tab-close{color:#fff;border: 1px solid #fff;} 38 | .system-content .layui-tab-card .layui-tab-content{padding: 0;} 39 | .system-content .layui-tab-card .layui-tab-content .layui-table-view{margin:0;} 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/ext/treetable/css/globle.css: -------------------------------------------------------------------------------- 1 | .hide{display: none;} 2 | .top-title{margin-bottom: 10px;position: relative;} 3 | .top-title .layui-form-select{display: inline-block;} 4 | .top-title .layui-btn-group{display: inline-block;position: absolute;right: 10px;top: 7px;font-size: 14px;} 5 | .top-title .layui-btn-group .layui-btn{margin-top: -4px;height: 36px;} 6 | .top-title .layui-form-select .layui-input{background: #009688;color:#fff;} 7 | .top-title .layui-form-select .layui-input::-webkit-input-placeholder{color:#fff;} 8 | .layui-table-page{text-align: center;} 9 | .layui-table-view{margin-bottom: 0;} 10 | 11 | .table-search-form{padding:10px;} 12 | .table-search-form .layui-form-item{margin-bottom:10px;} 13 | .table-search-form .layui-layer-btn a{width: 100%;margin: 5px 0;padding: 0;} 14 | 15 | td[data-field=action] .layui-table-cell{overflow: unset;padding: 0;} 16 | td[data-field=action] .layui-form-select{position: absolute;width: 120px;margin-left: 7px;} 17 | td[data-field=action] .layui-form-select .layui-input{height:30px;border: 0;background-color: #009688;color: #fff;} -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/ext/treetable/img/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/ext/treetable/img/header.png -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/ext/treetable/img/statistics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/ext/treetable/img/statistics.png -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/font/iconfont.eot -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/font/iconfont.woff -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/0.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/1.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/10.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/11.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/12.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/13.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/14.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/15.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/16.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/17.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/18.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/19.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/2.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/20.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/21.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/22.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/23.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/24.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/25.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/26.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/27.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/28.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/29.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/3.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/30.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/31.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/32.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/33.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/34.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/35.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/36.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/37.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/38.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/39.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/4.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/40.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/41.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/42.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/43.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/44.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/45.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/46.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/47.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/48.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/49.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/5.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/50.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/51.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/52.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/53.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/54.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/55.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/56.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/57.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/58.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/59.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/6.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/60.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/61.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/62.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/63.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/64.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/65.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/66.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/67.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/68.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/69.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/7.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/70.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/71.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/8.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/images/face/9.gif -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/lay/all-mobile.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | @Name:用于打包移动完整版 4 | @Author:贤心 5 | @License:LGPL 6 | 7 | */ 8 | 9 | layui.define(function(exports){ 10 | exports('layui.mobile', layui.v); 11 | }); 12 | -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/lay/all.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | @Name:用于打包PC完整版,即包含layui.js和所有模块的完整合并(该文件不会存在于构建后的目录) 4 | @Author:贤心 5 | @License:LGPL 6 | 7 | */ 8 | 9 | layui.define(function(exports){ 10 | var cache = layui.cache; 11 | layui.config({ 12 | dir: cache.dir.replace(/lay\/dest\/$/, '') 13 | }); 14 | exports('layui.all', layui.v); 15 | }); 16 | -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/lay/modules/code.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | @Name:layui.code 代码修饰器 4 | @Author:贤心 5 | @License:MIT 6 | 7 | */ 8 | 9 | layui.define('jquery', function(exports){ 10 | "use strict"; 11 | 12 | var $ = layui.$; 13 | var about = 'http://www.layui.com/doc/modules/code.html'; //关于信息 14 | 15 | exports('code', function(options){ 16 | var elems = []; 17 | options = options || {}; 18 | options.elem = $(options.elem||'.layui-code'); 19 | options.about = 'about' in options ? options.about : true; 20 | 21 | options.elem.each(function(){ 22 | elems.push(this); 23 | }); 24 | 25 | layui.each(elems.reverse(), function(index, item){ 26 | var othis = $(item), html = othis.html(); 27 | 28 | //转义HTML标签 29 | if(othis.attr('lay-encode') || options.encode){ 30 | html = html.replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&') 31 | .replace(//g, '>').replace(/'/g, ''').replace(/"/g, '"') 32 | } 33 | 34 | othis.html('
      1. ' + html.replace(/[\r\t\n]+/g, '
      2. ') + '
      ') 35 | 36 | if(!othis.find('>.layui-code-h3')[0]){ 37 | othis.prepend('

      '+ (othis.attr('lay-title')||options.title||'code') + (options.about ? 'layui.code' : '') + '

      '); 38 | } 39 | 40 | var ol = othis.find('>.layui-code-ol'); 41 | othis.addClass('layui-box layui-code-view'); 42 | 43 | //识别皮肤 44 | if(othis.attr('lay-skin') || options.skin){ 45 | othis.addClass('layui-code-' +(othis.attr('lay-skin') || options.skin)); 46 | } 47 | 48 | //按行数适配左边距 49 | if((ol.find('li').length/100|0) > 0){ 50 | ol.css('margin-left', (ol.find('li').length/100|0) + 'px'); 51 | } 52 | 53 | //设置最大高度 54 | if(othis.attr('lay-height') || options.height){ 55 | ol.css('max-height', othis.attr('lay-height') || options.height); 56 | } 57 | 58 | }); 59 | 60 | }); 61 | }).addcss('modules/code.css', 'skincodecss'); -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/lay/modules/mobile.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | @Name:layui 移动模块入口 | 构建后则为移动模块集合 4 | @Author:贤心 5 | @License:MIT 6 | 7 | */ 8 | 9 | 10 | if(!layui['layui.mobile']){ 11 | layui.config({ 12 | base: layui.cache.dir + 'lay/modules/mobile/' 13 | }).extend({ 14 | 'layer-mobile': 'layer-mobile' 15 | ,'zepto': 'zepto' 16 | ,'upload-mobile': 'upload-mobile' 17 | ,'layim-mobile': 'layim-mobile' 18 | }); 19 | } 20 | 21 | layui.define([ 22 | 'layer-mobile' 23 | ,'zepto' 24 | ,'layim-mobile' 25 | ], function(exports){ 26 | exports('mobile', { 27 | layer: layui['layer-mobile'] //弹层 28 | ,layim: layui['layim-mobile'] //WebIM 29 | }); 30 | }); -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/lay/modules/mobile/layim-mobile-open.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | @Name:layim mobile 开源包 4 | @Author:贤心 5 | @License:MIT 6 | 7 | */ 8 | 9 | layui.define(function(exports){ 10 | exports('layim-mobile', layui.v); 11 | }); -------------------------------------------------------------------------------- /src/FsCms.Web/wwwroot/lib/layui/lay/modules/treeTable.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/wwwroot/lib/layui/lay/modules/treeTable.js -------------------------------------------------------------------------------- /src/FsCms.Web/xxxtb.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hejiyong/fscms/f3eabaacbb997499bedc32fc5a34c9ba5b28fcd8/src/FsCms.Web/xxxtb.db -------------------------------------------------------------------------------- /src/FsCms.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.28010.2003 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FsCms.Service", "FsCms.Service\FsCms.Service.csproj", "{A64A1362-0616-4F7F-81FC-94668E3CCD24}" 7 | EndProject 8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FsCms.Web", "FsCms.Web\FsCms.Web.csproj", "{41967E51-5078-48D2-939B-B63561CD25D1}" 9 | EndProject 10 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FsCms.Entity", "FsCms.Entity\FsCms.Entity.csproj", "{E256FCED-9EDE-418F-A34E-A222B689526B}" 11 | EndProject 12 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestConsole", "..\test\TestConsole\TestConsole.csproj", "{D129319B-D2E7-47B6-9416-EB2BD08DEA2F}" 13 | EndProject 14 | Global 15 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 16 | Debug|Any CPU = Debug|Any CPU 17 | Release|Any CPU = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 20 | {A64A1362-0616-4F7F-81FC-94668E3CCD24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {A64A1362-0616-4F7F-81FC-94668E3CCD24}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {A64A1362-0616-4F7F-81FC-94668E3CCD24}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {A64A1362-0616-4F7F-81FC-94668E3CCD24}.Release|Any CPU.Build.0 = Release|Any CPU 24 | {41967E51-5078-48D2-939B-B63561CD25D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 25 | {41967E51-5078-48D2-939B-B63561CD25D1}.Debug|Any CPU.Build.0 = Debug|Any CPU 26 | {41967E51-5078-48D2-939B-B63561CD25D1}.Release|Any CPU.ActiveCfg = Release|Any CPU 27 | {41967E51-5078-48D2-939B-B63561CD25D1}.Release|Any CPU.Build.0 = Release|Any CPU 28 | {E256FCED-9EDE-418F-A34E-A222B689526B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 29 | {E256FCED-9EDE-418F-A34E-A222B689526B}.Debug|Any CPU.Build.0 = Debug|Any CPU 30 | {E256FCED-9EDE-418F-A34E-A222B689526B}.Release|Any CPU.ActiveCfg = Release|Any CPU 31 | {E256FCED-9EDE-418F-A34E-A222B689526B}.Release|Any CPU.Build.0 = Release|Any CPU 32 | {D129319B-D2E7-47B6-9416-EB2BD08DEA2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 33 | {D129319B-D2E7-47B6-9416-EB2BD08DEA2F}.Debug|Any CPU.Build.0 = Debug|Any CPU 34 | {D129319B-D2E7-47B6-9416-EB2BD08DEA2F}.Release|Any CPU.ActiveCfg = Release|Any CPU 35 | {D129319B-D2E7-47B6-9416-EB2BD08DEA2F}.Release|Any CPU.Build.0 = Release|Any CPU 36 | EndGlobalSection 37 | GlobalSection(SolutionProperties) = preSolution 38 | HideSolutionNode = FALSE 39 | EndGlobalSection 40 | GlobalSection(ExtensibilityGlobals) = postSolution 41 | SolutionGuid = {668A57C2-8A6B-4588-B7CB-9875398F039F} 42 | EndGlobalSection 43 | EndGlobal 44 | -------------------------------------------------------------------------------- /test/TestConsole/App1.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | -------------------------------------------------------------------------------- /test/TestConsole/TestConsole.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | netcoreapp3.1 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | --------------------------------------------------------------------------------