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

简介: 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。

项目结构


系统功能


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


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


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


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


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


6、文件中心:文件管理


7、信息中心:通知管理


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


9、订单管理:订单信息


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


11、大屏幕报表

代码生成器

1、选择表


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


3、表单页面字段设置



4、代码生成

部分代码预览

实体

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
    }
}

部分功能截图

系统公告


租户设置


机构管理

数据权限


系统菜单

区域管理


表单设计

流程设计



系统日志

操作日志


访问控制

定时任务

服务器监控

图表列表

通知管理


大屏幕报表

项目地址

https://gitee.com/qian_wei_hong/WaterCloud


- End -


推荐阅读


用C#自己动手写个操作系统,爽!


C#程序采用AOT发布,真的可以避免被反编译?


盘点5个C#实用的Word、PPT、Excel、Mail第三方库


盘点6个.NetCore+Vue前后端分离的开源项目


推荐一个数据可视化大屏幕报表开源系统



相关文章
|
7月前
|
缓存 前端开发 中间件
Apollo:前端开发者的全栈探索之旅
Apollo:前端开发者的全栈探索之旅
GitHub最火的成熟私活利器:基于微服务架构的前后端分离博客系统
博客使用了一些监控的 SpringCloud 组件,但是并不一定都需要部署,必须启动的服务包含 nacos,nginx,rabbitmq, redis,mysql,mogu-gateway,mogu-sms,mogu-picture, mogu-web, mogu-admin 其它的服务都可以不启动,也不影正常使用,可以根据自身服务器配置来启动 最低配置:1核2G 【需开启虚拟内存】【容易宕机】
|
Cloud Native IDE Java
阿里巴巴正式开源云原生应用脚手架
12 月 3 日,微服务 x 容器开源开发者 Meetup 上海站上,阿里云智能技术专家,云原生应用脚手架项目负责人良名宣布阿里巴巴云原生应用脚手架项目正式开源,并在现场做了相关内容介绍。
635 16
阿里巴巴正式开源云原生应用脚手架
|
数据可视化 JavaScript 前端开发
低代码平台名声臭,用起来却真香——60%开发者不敢承认
低代码平台名声臭,用起来却真香——60%开发者不敢承认
110 0
|
开发者
开发者投身开源项目的能够获得什么?
作为开发者,编程不仅是工作和饭碗,也是兴趣爱好的体现。虽然说有一部分是为了生活才选择了编程开发,但是大部分开发者是因为兴趣和爱好才加入编程队伍中的。不知不觉IT互联网行业已经发展了二十多年,基于开源的软件及应用也是有了快速的发展,越来越多的开发者投入到了开源项目的贡献中来,这让开发者和开源项目建立了很好的连接。
384 1
开发者投身开源项目的能够获得什么?
|
Cloud Native 开发者
KubeVela 获得 2022 “开源新锐”和“开发者最喜爱”双料年度项目
在 InfoQ 最新公布的 2022 中国技术力量年度榜单中,KubeVela 获得了 “十大开源新锐项目” 和 “开发者最喜爱的十大开源项目” 两个大奖。
KubeVela 获得 2022 “开源新锐”和“开发者最喜爱”双料年度项目
技术开发、产品开发和平台开发的区别
技术开发、产品开发和平台开发的区别
1145 0
|
存储 人工智能 安全
Web3.0元宇宙链游项目系统开发方案(技术成熟)
Web3.0元宇宙链游项目系统开发方案(技术成熟)
343 0
|
存储 资源调度 自然语言处理
浅谈前端工程化的发展以及相关工具介绍
随着发展的逐步发展,作为工程师除了需要关注需要写的⻚面,样式和逻辑之外,还需要面对日益复杂 的系统性问题,比如模块化文件的组织、ES6 JS 文件的编译、打包压缩所有的 JS 代码、优化和合并图片静态资源等等事情。
|
开发框架 数据可视化 BI
低代码快速开发平台将是未来软件开发的主流模式
如果软件开发一直处于手工阶段,大家都从零开始开发,岂不是浪费?低代码开发的主要想法,就是将软件的技术门槛降下来,同时将大家重复的工作消除掉,提高开发效率。低代码快速开发平台是未来软件开发的主流模式,美国有数据预测,到2021年75%的软件应用都将在低代码开发平台中完成,到2025免这个数据将会变成90%。
低代码快速开发平台将是未来软件开发的主流模式