Known是一个基于.NET开发的快速开发框架,前后端分离,使用极少的第三方组件,开发简单快速,大部分代码可通过代码生成工具自动生成,非常适合单兵作战和小团队开发。前端UI是一个基于JQuery开发的框架,支持单页和多Tab页的iframe应用程序,有PC端和移动端两个版本,支持目前主流的基于Chromium项目的浏览器。后端使用ASP.NET MVC框架,三层(Controller、Service、Repository)。

主界面预览

前端主要组件

后端主要组件

增删改查示例代码

中后台功能界面

移动端界面

主界面预览


前端主要组件


  1. Layer:弹出层,支持Modal对话框、alert、confirm、tips、loading等。
  2. Router:路由,支持多级路由,回退等。
  3. ListBox:列表框,支持data和url绑定和单击回调等。
  4. Tree:树,依赖ztree,支持data和url绑定,支持简单list数据等。
  5. Tabs:标签页。
  6. Query:查询组件,支持查询条件字段绑定和查询按钮等。
  7. Form:表单组件,支持普通表单和多Tab页表单、栏位字段绑定、非空栏位验证和操作按钮等。
  8. Input:输入组件,支持hidden、text、textarea、select、date、radio、checkbox、editor、picker等,其中date依赖datepicker,editor依赖wangEditor。
  9. Picker:弹出选择组件,支持查询和选择回调等。
  10. Grid:网格组件,支持toolbar、query、import、export等,支持编辑。
  11. Chart:图表组件,依赖echarts。
  12. View:视图组件,支持左右布局,栏位一次定义,多处使用(Query、Grid、Form)。

后端主要组件


  1. Database:数据库访问组件,支持MySql、SQLite、SqlServer、Oracle等。
  2. Container:对象容器,用于缓存注册的对象实例。
  3. Config:配置组件,提供App相关配置信息。
  4. Logger:日志组件,提供Info、Error和远传运维api。
  5. Platform:平台组件,提供用户登录、日志、数据字典、配置、编号生成、产品激活等功能。
  6. Flow:工作流组件,提供提交、通过、退回、撤回、指派等流程功能。
  7. Job:定时作业组件,提供多线程和Timer作业,定时作业调度。
  8. IoT:IoT组件,提供物联网设备在线实时数据监测。

增删改查示例代码


前端代码

function SysDemo() {
//fields
var url = {
QueryModels: baseUrl + '/System/QueryDemos',
DeleteModels: baseUrl + '/System/DeleteDemos',
SaveModel: baseUrl + '/System/SaveDemo'
}; var view = new View('Demo', {
url: url,
columns: [
{ field: 'Id', type: 'hidden' },
{ title: '隐藏字段', field: 'Hidden', type: 'hidden', required: true },
{ title: '文本字段', field: 'Text', query: true, sort: true, import: true, export: true, type: 'text', required: true },
{ title: '整型字段', field: 'IntVal', import: true, export: true, type: 'text', required: true },
{ title: '数值字段', field: 'DecVal', import: true, export: true, type: 'text' },
{ title: '日期字段', field: 'Date', placeholder: 'yyyy-MM-dd HH:mm:ss', import: true, export: true, type: 'date' },
{ title: '单选字段', field: 'Radio', import: true, export: true, type: 'radio', code: 'YesNo' },
{ title: '复选字段', field: 'Check', import: true, export: true, type: 'checkbox', code: 'YesNo' },
{ title: '下拉字段', field: 'Select', import: true, export: true, type: 'select', code: ['暂存','已发布'] },
{ title: '备注字段', field: 'Note', import: true, export: true, type: 'textarea' }
]
}); //methods
this.render = function(dom) {
view.render().appendTo(dom);
} this.mounted = function() {
view.load();
}
}

后端代码

//Controller
public class DemoController : BaseController
{
private DemoService Service => new DemoService(); [HttpPost]
public ActionResult QueryDemos(CriteriaData data)
{
return QueryPagingData(data, c => Service.QueryDemos(c));
} [HttpPost]
public ActionResult DeleteDemos(string data)
{
return PostAction<string[]>(data, d => Service.DeleteDemos(d));
} [HttpPost]
public ActionResult SaveDemo(string data)
{
return PostAction<dynamic>(data, d => Service.SaveDemo(d));
}
} //Service
class DemoService : BaseService
{
private IDemoRepository Repository => Container.Resolve<IDemoRepository>(); internal PagingResult<SysDemo> QueryDemos(PagingCriteria criteria)
{
return Repository.QueryDemos(Database, criteria);
} internal Result DeleteDemos(string[] ids)
{
var entities = Database.QueryListById<SysDemo>(ids);
if (entities == null || entities.Count == 0)
return Result.Error("请至少选择一条记录进行操作!"); return Database.Transaction("删除", db =>
{
foreach (var item in entities)
{
db.Delete(item);
}
});
} internal Result SaveDemo(dynamic model)
{
var entity = Database.QueryById<SysDemo>((string)model.Id);
if (entity == null)
entity = new SysDemo(); entity.FillModel(model);
var vr = entity.Validate();
if (!vr.IsValid)
return vr; Database.Save(entity);
return Result.Success("保存成功!", entity.Id);
}
} //Repository
public interface IDemoRepository
{
PagingResult<SysDemo> QueryDemos(Database db, PagingCriteria criteria);
} class DemoRepository : IDemoRepository
{
public PagingResult<SysDemo> QueryDemos(Database db, PagingCriteria criteria)
{
var sql = "select * from SysDemo";
db.SetQuery(ref sql, criteria, QueryType.Contain, "Text");
return db.QueryPage<SysDemo>(sql, criteria);
}
}

中后台功能界面


个人中心

资源管理

代码生成



数据字典

组织架构

角色管理

用户管理

编号规则

移动端界面


Known快速开发框架的更多相关文章

  1. CRL快速开发框架系列教程十三(嵌套查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  3. CRL快速开发框架系列教程十一(大数据分库分表解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  4. CRL快速开发框架系列教程十(导出对象结构)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. CRL快速开发框架系列教程九(导入/导出数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  6. CRL快速开发框架系列教程七(使用事务)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  7. CRL快速开发框架系列教程六(分布式缓存解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. CRL快速开发框架系列教程五(使用缓存)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. CRL快速开发框架系列教程三(更新数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  10. CRL快速开发框架系列教程一(Code First数据表不需再关心)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

随机推荐

  1. AFNetWorking 丢失数据

    问题描述: 使用AFNetWorking请求数据,请求成功,但是拿不到所需要的数据,但是使用其他平台都可以拿到数据. 原因分析: AFNetWorking无法解析. 解决方式: AFJSONRespo ...

  2. centos7 ping: baidu.com: Name or service not known

    虚拟机 centos7配置ip后 ping 网关可以ping 通,但是ping不通外网 baidu.com 报错为: ping: baidu.com: Name or service not know ...

  3. iOS中如何使定时器NSTimer不受UIScrollView滑动所影响

    以下是使用 scheduledTimerWithTimeInterval 方法来实现定时器 - (void)addTimer { NSTimer scheduledTimerWithTimeInter ...

  4. 【ACwing 98】分形之城——分形

    (题面来自ACwing) 城市的规划在城市建设中是个大问题. 不幸的是,很多城市在开始建设的时候并没有很好的规划,城市规模扩大之后规划不合理的问题就开始显现. 而这座名为 Fractal 的城市设想了 ...

  5. 精尽MyBatis源码分析 - 文章导读

    该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...

  6. Mybatis入门及第一个Mybatis程序

    Mybatis笔记整理 所需要的基础知识 JDBC Mysql Java基础 Maven Junit 框架:是有配置文件的.最好的方式:看官网文档 1.简介 1.1.什么是MyBatis 简介 什么是 ...

  7. VUE中,@click后边( ) 有无括号的区别

    在使用的时候,两种方式结果效果差不多是一样. @click="Login()" @click="Login"而唯一的区别就是,有括号的可以在括号里写传递的参数. ...

  8. 关于java链接装载的思考

    遇到个bug,noClassFoundEx,很常见. 但是问题来了. 比如我的服务器目录是 /opt/tomcat/webapps/ROOT/WEB-INF/classes/cn/controller ...

  9. 第8.33节 Python中__getattr__以及__getattr__与__ getattribute__的关系深入剖析

    一. 引言 前面几节分别介绍了Python中属性操作捕获的三剑客:__ getattribute__方法.__setattr__方法.__delattr__方法,为什么__ getattribute_ ...

  10. 软件工程团队作业-测试与发布(Alpha版本)

    Alpha版本测试报告 功能测试报告 概述 测试阶段:alpha验收测试 测试方法:手动功能测试 测试环境(测试矩阵) Windows操作系统(win10)附带"Windows讲述人&quo ...