今天给大家推荐一个开源项目,基于.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前后端分离的开源项目

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

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

  1. 开源一套后台管理系统框架,远离996

    前言 作为一个程序员,最苦逼的就是老板随口就给你提的需求:"小田啊,这几天你给我弄一个管理系统给客户用". ​老板的一句话总是害得我们天天加班,更可怕的是,每次开个新项目,总是要从 ...

  2. 写开源项目到底究竟有多赚钱?

    精品连载丨安卓 App 逆向课程之三 frida 注入 Okhttp 抓包上篇 选自calebporzio 机器之心编译 参与:张倩.蛋酱 如果提到靠打赏生活的人,我们首先想到的会是主播.但现实情况是 ...

  3. electron+vue3全家桶+vite项目搭建【一】使用开源项目快速搭建基础工程

    文章目录 指引 1.创建工程 2.安装依赖 3.运行工程 4.打包工程 指引 项目地址 视频讲解 1.创建工程 直接用开源的electron构建脚手架:https://github.com/elect ...

  4. dva开源项目_后台前端管理系统,基于react、typescript、antd、dva及一些特别优秀的开源库实现...

    react-antd-admin

  5. 高并发服务器开源项目,高并发服务器框架详解 - osc_qgfjs4a5的个人空间 - OSCHINA - 中文开源技术交流社区...

    1)如何设计如何扩展 2)什么是高并发 (1)任务:完成某个功能的一个一个目标任务,服务器程序也是不例外的. (2)CPU核心:完成具体任务的,是CPU核心 + 周围的外设(读写磁盘IO.网络IO) ...

  6. 3个开源的快速开发平台,前后端都有,项目经验又有着落了!

    来源:我是程序汪 经常性逛github,发现了一些优秀的开源项目,其中的框架及代码非常不错,现在给大家推荐三个快速开发平台. 第一套系统:Jeecg-boot快速开发平台 前端采用阿里的ant-des ...

  7. 开源项目-毕设打车后台管理系统

    哈喽,大家好,今天给大家带来一个开源项目-打车后台管理系统 打车后台管理系统主要功能包括指挥中心,司机注册,司机信息修改,查看司机信息,司机注销,车辆注册,车辆查询,司机出勤情况等模块 登录 指挥中心 ...

  8. Android 开源项目集合

    2019独角兽企业重金招聘Python工程师标准>>> 上百个Android开源项目分享,希望对android开发有帮助. Android PDF 阅读器 http://source ...

  9. 众多Android 开源项目推荐,给力工作给力学习

    http://terryblog.blog.51cto.com/1764499/547777 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.h ...

最新文章

  1. jmeter 导入java_8. Jmeter导入jar包
  2. java多线程封装_Java 多线程处理任务的封装
  3. oddo docker 安装
  4. 转换环境与执行环境、宿主环境与独立环境、宿主实现与独立实现
  5. 对手机支付安全机制的思考
  6. 数据埋点太难!知乎的做法有何可借鉴之处?
  7. oracle中的输入 amp,Oracle之SQL学习
  8. Cable--新虚拟网络架构介绍
  9. 常用的比较排序算法总结
  10. fastDFS 命令笔记
  11. 掌阅电子书全系列安装第三方app教程(无需破解)
  12. css3实现缺角四边形_CSS3实现缺角矩形与折角矩形以及缺角边框代码实例
  13. 主板电源开关接口图解_图解:主板电线接法(电源开关、重启等)
  14. java满天星星代码_纯Java代码实现流星划过天空
  15. 能力值的计算:一年 365 天,以第 1 天的能力值为基数,记为 1.0,当每天好好学习时能力值相比前一天提高 1‰,当没有学习时由于遗忘等原因能力值相比前一天下降 1‰
  16. 电路仿真软件详谈(九),proteus电路仿真软件及版本问题
  17. EastWave应用案例:同轴线仿真
  18. springboot集成easyExcel实现文件导入导出
  19. 计算机调剂怎么准备复试,终于明白考研调剂复试如何准备
  20. java助教面试自我介绍,助教面试自我介绍

热门文章

  1. 计算机组成原理branch,处理器结构--分支预测(Branch Prediction)
  2. 【C语言】将非负整数转换为二进制输出(用递归函数实现)
  3. bvs是什么意思_电磁场中的B和H是什么意思?
  4. FRN+TLU,小batch size训练的福音
  5. python爬取豆瓣小组_Python 爬虫实例+爬取豆瓣小组 + wordcloud 制作词云图
  6. Android深入--02--下载源码
  7. INS-35178错误,AMM及ASMM区别
  8. 邻接表实现的有向带权图 及 图算法(C++)
  9. java之定时器Timer
  10. fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include stdafx.h”