NetCore多租户开源项目,快速后台开发企业框架,赚钱就靠她了

今天给大家推荐一个开源项目,基于.NetCore开发的、多租户的企业开发框架。

项目简介

这是一个基于.Net和Layui、基于多数据库的多租户,敏捷开发优选框架。系统自带权限功能、数据权限、系统日志、流程表单设计、内容管理、以及系统UI组件,系统基础功能非常完善,让开发者更注重业务的开发。

框架支持代码生成、表单设计,可以极大地提升开发效率。

采用都是目前主流的技术,该项目非常适合用于Crm、OA、ERP、CMS、WMS、BI等管理型的系统。

技术架构

1、跨平台:这是基于.Net Core开发的系统,可以部署在Docker, Windows, Linux, Mac。

2、数据库支持:MySQL、Sqlserver。

3、技术栈:ASP.NET 6.0、WEB API、QuartZ、SqlSugar、Reids、RabbitMq、Jaina、Swagger、AutoFac、LayUI。

4、开发环境:Visual Studio 2022。

项目结构

8b99566091557469a6daa8d501edd396.png

系统功能

1、首页:快捷入口、数据统计、报表、系统公告

2、单位组织:系统公告、租户设置、机构管理、数据权限、角色管理、岗位管理、用户管理

3、系统管理:系统设置、系统菜单、代码生成、数据字典、区域管理、表单设计、流程设计、条码规则、打印模块、条码生成记录

4、系统安全:系统日志、操作日志、访问控制、定时任务、服务器监控

5、流程中心:我的流程、待处理流程、已处理流程

6、文件中心:文件管理

7、信息中心:通知管理

8、内容管理:新闻类别、新闻管理

9、订单管理:订单信息

10、组件管理:图表列表、图标选择、颜色选择、下拉选择、文件上传、富文本编辑器、省市县区选择器、卡片表格

11、大屏幕报表

代码生成器

1、选择表

863465eb5da78a23d26e83765828e731.png

2、选择列表展示字段、搜索字段、排序字段、页面样式等配置

39ff6a62501d52118eb82a7f87389c7d.png

3、表单页面字段设置

22de99632e77d3ad0b8dfeb03b754950.png

4、代码生成

dcfd54519596c51e380fcbb59bdeeeb0.png

部分代码预览

实体

using System;
using System.ComponentModel.DataAnnotations;
using SqlSugar;


namespace WaterCloud.Domain.GeneralManage
{
/// <summary>
/// 创 建:超级管理员
/// 日 期:2022-11-28 20:01
/// 描 述:Articlecategory实体类
/// </summary>
    [SugarTable("cms_articlecategory")]
public class ArticlecategoryEntity : IEntity<ArticlecategoryEntity>,ICreationAudited,IModificationAudited,IDeleteAudited
    {
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_Id", ColumnDescription = "",ColumnDataType = "text(50)",IsPrimaryKey = true)]
public string F_Id { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_FullName", ColumnDescription = "",ColumnDataType = "text(100)", IsNullable = true)]
public string F_FullName { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_ParentId", ColumnDescription = "",ColumnDataType = "text(50)", IsNullable = true)]
public string F_ParentId { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_SortCode", ColumnDescription = "",ColumnDataType = "integer")]
public int F_SortCode { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_Description", ColumnDescription = "",ColumnDataType = "text", IsNullable = true)]
public string F_Description { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_LinkUrl", ColumnDescription = "",ColumnDataType = "text(255)", IsNullable = true)]
public string F_LinkUrl { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_ImgUrl", ColumnDescription = "",ColumnDataType = "text(255)", IsNullable = true)]
public string F_ImgUrl { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_SeoTitle", ColumnDescription = "",ColumnDataType = "text(255)", IsNullable = true)]
public string F_SeoTitle { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_SeoKeywords", ColumnDescription = "",ColumnDataType = "text(255)", IsNullable = true)]
public string F_SeoKeywords { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_SeoDescription", ColumnDescription = "",ColumnDataType = "text(255)", IsNullable = true)]
public string F_SeoDescription { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_IsHot", ColumnDescription = "",ColumnDataType = "integer", IsNullable = true)]
public int? F_IsHot { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_EnabledMark", ColumnDescription = "",ColumnDataType = "integer", IsNullable = true)]
public int? F_EnabledMark { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_DeleteMark", ColumnDescription = "",ColumnDataType = "integer", IsNullable = true)]
public int? F_DeleteMark { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_CreatorTime", ColumnDescription = "",ColumnDataType = "text", IsNullable = true)]
public string F_CreatorTime { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_CreatorUserId", ColumnDescription = "",ColumnDataType = "text(50)", IsNullable = true)]
public string F_CreatorUserId { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_LastModifyTime", ColumnDescription = "",ColumnDataType = "text", IsNullable = true)]
public string F_LastModifyTime { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_LastModifyUserId", ColumnDescription = "",ColumnDataType = "text(50)", IsNullable = true)]
public string F_LastModifyUserId { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_DeleteTime", ColumnDescription = "",ColumnDataType = "text", IsNullable = true)]
public string F_DeleteTime { get; set; }
/// <summary>
/// 
/// </summary>
        [SugarColumn(ColumnName="F_DeleteUserId", ColumnDescription = "",ColumnDataType = "text(50)", IsNullable = true)]
public string F_DeleteUserId { get; set; }
    }
}

控制器

using System;
using System.Linq;
using System.Threading.Tasks;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using WaterCloud.Code;
using WaterCloud.Domain.GeneralManage;
using WaterCloud.Service;
using Microsoft.AspNetCore.Authorization;
using WaterCloud.Service.GeneralManage;


namespace WaterCloud.Web.Areas.GeneralManage.Controllers
{
    /// <summary>
    /// 创 建:超级管理员
    /// 日 期:2022-11-28 20:26
    /// 描 述:Articlecategory控制器类
    /// </summary>
    [Area("GeneralManage")]
    public class ArticlecategoryController :  BaseController
    {
        public ArticlecategoryService _service {get;set;}


        #region 获取数据
        [HandlerAjaxOnly]
        [IgnoreAntiforgeryToken]
        public async Task<ActionResult> GetGridJson(SoulPage<ArticlecategoryEntity> pagination, string keyword)
        {
            if (string.IsNullOrEmpty(pagination.field))
            {
                pagination.field = "F_Id";
                pagination.order = "desc";
            }
            var data = await _service.GetLookList(pagination,keyword);
            return Content(pagination.setData(data).ToJson());
        }


        [HttpGet]
        [HandlerAjaxOnly]
        public async Task<ActionResult> GetListJson(string keyword)
        {
            var data = await _service.GetList(keyword);
            return Content(data.ToJson());
        }


        [HttpGet]
        [HandlerAjaxOnly]
        public async Task<ActionResult> GetFormJson(string keyValue)
        {
            var data = await _service.GetLookForm(keyValue);
            return Content(data.ToJson());
        }
        #endregion


        #region 提交数据
        [HttpPost]
        [HandlerAjaxOnly]
        public async Task<ActionResult> SubmitForm(ArticlecategoryEntity entity, string keyValue)
        {
            try
            {
                await _service.SubmitForm(entity, keyValue);
                return await Success("操作成功。", "", keyValue);
            }
            catch (Exception ex)
            {
                return await Error(ex.Message, "", keyValue);
            }
        }


        [HttpPost]
        [HandlerAjaxOnly]
        [HandlerAuthorize]
        public async Task<ActionResult> DeleteForm(string keyValue)
        {
            try
            {
                await _service.DeleteForm(keyValue);
                return await Success("操作成功。", "", keyValue, DbLogType.Delete);
            }
            catch (Exception ex)
            {
                return await Error(ex.Message, "", keyValue, DbLogType.Delete);
            }
        }
        #endregion
    }
}

部分功能截图

系统公告

70a9ab1bcc831ac85ac8308a83088c3a.png

租户设置

0c9bc274857f977a28b4516ccf4fc2b8.png

机构管理

5a0ff18acb5a8efc54c3964bd1c13890.png

数据权限

fbb851f5ceb638ab4a4da921608bd98b.png

系统菜单

213df1fb69edafa4da6d1dcc7c4d9e1f.png

区域管理

ef27ea764dc0a123e25ca458380acc77.png

表单设计

a75c6ed82b44ebd3e57f68281bd729f8.png

流程设计

cfa8b7e79ecb98d5802347f53b9c134e.png

系统日志

5cb4627755b771c16788d19c32f70d33.png

操作日志

d2bc32f44bda8b9ea50213c12f805b89.png

访问控制

d70d4218d057db59b6b8430dbdc2762d.png

定时任务

d78ca5b6318a4a5af77656078ed80253.png

服务器监控

52371e02fbb4cc6f8498193fb5e01fa7.png

图表列表

b34659ef1c2bf2883f8a6e3dcbce2e3f.png

通知管理

8d3e6a7614a073ac5e61a59e3722d69e.png

大屏幕报表

c45f1438f9f231ed332b0a6965c7e851.png

项目地址

https://gitee.com/qian_wei_hong/WaterCloud

- End -

-

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenAuth.Core是一个.Net Core快速应用开发框架、好用的权限工作流系统。基于经典领域驱动设计的权限管理及快速开发框架,源于Martin Fowler企业级应用开发思想及最新技术组合(IdentityServer、EF core、Quartz、AutoFac、WebAPI、Swagger、Mock、NUnit、VUE、Element-ui等)。已成功在docker/jenkins中实施。核心模块包括:组织机构、角色用户、权限授权、表单设计、工作流等。它的架构精良易于扩展,是中小企业的首选。 OpenAuth.Core特点: 1、支持.net core sdk 3.1.100 2、超强的自定义权限控制功能,可灵活配置用户、角色可访问的数据权限。请参考:通用权限设计与实现 3、完整的字段权限控制,可以控制字段可见及API是否返回字段值 4、可拖拽的表单设计 5、可视化流程设计 6、基于Quartz.Net的定时任务控制,可随时启/停,可视化配置Cron表达式功能 7、基于CodeSmith的代码生成功能,可快速生成带有头/明细结构的页面 8、支持sqlserver、mysql数据库,理论上支持所有数据库 9、集成IdentityServer4,实现基于OAuth2的登录体系 10、建立三方对接规范,已有系统可以无缝对接流程引擎 11、前端采用vue + layui + elementUI + ztree + gooflow + leipiformdesign 12、后端采用.net core +EF core+ autofac + quartz +IdentityServer4 + nunit + swagger 13、设计工具PowerDesigner + Enterprise Architect 系统工程结构: 1、Infrastructure 通用工具集合 2、OpenAuth.Repository 系统仓储层,用于数据库操作 3、OpenAuth.App 应用层,为界面提供接口 4、OpenAuth.Mvc Web站点 5、OpenAuth.WebApi 为企业版或其他三方系统提供接口服务 6、OpenAuth.Identity 基于IdentityServer4的单点登录服务   OpenAuth.Core 更新日志: v3.2 增加在swagger界面查看接口调用时间及SQL执行时间;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值