由于最近工作上有些变动,已经快一个月没有写博客了。上一篇博客[React]全自动数据表格组件——BodeGrid介绍了全自动数据表格的设计思路以及分享了一个react.js的实现。但是现实情况中为了节约开发成本,很多中小型企业是很难做到前后端完全分离的,加上目前国内使用react.js的公司可能是太少了吧,于是又折腾着写了一个JQuery版本的,结合mvc的模板页也达到了相同的效果(代码量方面),有兴趣的小伙伴也可以尝试写一写angular或者vue版本的,用起来真的能少写很多代码的。
 
使用到的js库:
layer弹出层:http://layer.layui.com/
 

效果图-列表页:
 
效果图-弹出框:
 
 
视图页全部代码:
@{
ViewBag.Title = "Table";
Layout = "~/Areas/Admin/Views/Shared/_GridLayout.cshtml";
} @section customScript{
<script type="text/javascript">
var enums = @Html.Raw(Json.Encode(@ViewBag.Enums));
url = {
read: "/api/services/product/products/GetProductPagedList",
add: "/api/services/product/products/CreateProduct",
edit: "/api/services/product/products/UpdateProduct",
delete: "/api/services/product/products/DeleteProduct"
};
columns = [
{ data: "id", title: "编号" },
{ data: "name", title: "商品名称", type: "text", query: true, editor: {} },
{ data: "brief", title: "商品简介", type: "textarea", query: true, editor: {} },
//{ data: "detail", title: "商品详情", type: "richtext", query: true, editor: {} },
{ data: "price", title: "价格", type: "number", query: true, editor: {} },
{ data: "cover2", title: "封面", type: "img", editor: {} },
{ data: "isOnShelf", title: "是否上架", type: "switch", editor: {} },
{ data: "enumTest", title: "枚举测试", type: "dropdown", editor: {},source:{data:enums} },
{ data: "onShelfTime", title: "上架时间", type: "timepicker", editor: {} },
{
title: "操作选项",
type: "command",
actions: [
{
name: "操作",
icon: "fa-trash-o",
onClick: function (d) {
alert(d["id"]);
}
}
]
}
];
</script>
}
 
服务端代码:
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;
using Abp.Application.Services;
using Abp.Application.Services.Dto;
using Abp.Application.Services.Query;
using Abp.AutoMapper;
using Abp.Domain.Repositories;
using BodeAbp.Product.Products.Dtos; namespace BodeAbp.Product.Products
{
/// <summary>
/// 商品 应用服务
/// </summary>
public class ProductsAppService : ApplicationService, IProductsAppService
{
private readonly IRepository<Domain.Product,long> _productRepository; /// <summary>
/// 构造函数
/// </summary>
/// <param name="productRepository"></param>
public ProductsAppService(IRepository<Domain.Product, long> productRepository)
{
_productRepository = productRepository;
} /// <inheritdoc/>
public async Task<PagedResultOutput<GetProductListOutput>> GetProductPagedList(QueryListPagedRequestInput input)
{
int total;
var list = await _productRepository.GetAll().Where(input, out total).ToListAsync();
return new PagedResultOutput<GetProductListOutput>(total, list.MapTo<List<GetProductListOutput>>());
} /// <inheritdoc/>
public async Task CreateProduct(CreateProductInput input)
{
var product = input.MapTo<Domain.Product>();
await _productRepository.InsertAsync(product);
} /// <inheritdoc/>
public async Task UpdateProduct(UpdateProductInput input)
{
var product = await _productRepository.GetAsync(input.Id);
input.MapTo(product);
await _productRepository.UpdateAsync(product);
} /// <inheritdoc/>
public async Task DeleteProduct(IdInput input)
{
await _productRepository.DeleteAsync(input.Id);
}
}
}
表格请求Json格式:
{
"pageIndex":,
"pageSize":,
"sortConditions":[
{
"sortField":"name",
"listSortDirection":
}
],
"filterGroup":{
"rules":[
{
"field":"displayName",
"operate":"contains",
"value":"a"
}
]
}
}

服务端响应Json格式:

{
"success": true,
"result": {
"totalCount": ,
"items": [
{
"name": "名称222",
"brief": "简介222",
"detail": "<p>描述222</p>",
"price": 3.33,
"cover2": "xx",
"isOnShelf": true,
"onShelfTime": "1899-12-03T03:00:00+08:00",
"enumTest": ,
"id":
}
]
},
"error": null,
"unAuthorizedRequest": false
}

items中的字段应与视图页中列配置一一对应,这样很少的代码就能完全实现数据的展示、分页、新增、编辑、删除、查询、排序等功能,并且还统一了编码方式,方便质量把控和后期维护。数据表格核心文件:bode.grid.js。在BodeAbp项目中可以看到源码以及一个比较完善的demo。整个demo依然遵循前后端分离的模式,只用到了MVC的视图页作为前端展示。BodeAbp项目地址:https://github.com/liuxx001/BodeAbp


 
bode.grid.js源码这里就不过多介绍了,思路和上一篇博客所说一致,只是换了一种实现方式而已。JQuery版表格与React.js版的api还是有一些出入,不过总体来说功能是增强了,具体介绍如下:
 
初始化方式:
var table=new $.bode.grid("#dataTable", {...});
 
表格api:
参数 类型 说明 默认值
url object

远程接口配置,示例:{read:"",add:"",edit:"",delete:""}

其中add、edit、delete属于功能项,不配置url相关功能不会显示

 
columns array[object] 列配置,下文会详细介绍  
actions array[object]

右上角操作按钮,默认添加"搜索";

如果url配置了add,则添加"新增"选项

 
imgSaveUrl string img类型图片上传地址 "/api/File/UploadPic"
formId string 弹出框id "bode-grid-autoform"
formWidth string 弹出框宽度,支持px与百分数

无富文本编辑器时:40%;

有富文本编辑器时:60%

pageIndex number 页序号 1
pageSize number 每页数量 15
beforeInit function 初始化前执行  
initComplete function 初始化后执行  
loadDataComplete function 每次数据重新加载后执行  
 
column属性详细介绍:
title string 表头显示标题  
data string 从数据源获取对应的字段名  
type string

该列的类型,现支持的类型有:

text、textarea、richtext、number、switch、dropdown、

img、datepicker、timepicker、hide、command

 
query boolean 是否允许查询 false
editor object 编辑相关配置,还可以继续完善  
source object

dropdown类型下拉数据源,格式:

{data:[{value:"xx",text:"vv"}],textField:"xx",valueField:"xx" }

textField默认"text";

valueField默认"value"

sortDisable boolean 是否禁止排序 false
render function(v,d) 自定义列渲染事件,v表示当前单元格的数据,d表示当前行的数据  
editor object

{ap:"hide",ep:"disabled"};ap:新增模式,ep:编辑模式;'hide'表示

隐藏该列,'disabled'表示该列不可编辑

 

目前整个bode.grid.js还有很多需要完善地方,我会在以后的使用过程中继续完善修改,本次分享仅供交流,如要使用,要做好填坑的准备。其实整个源码还是比较简单的,只有600行代码,有兴趣的小伙伴可以看看,欢迎交流。

全自动数据表格JQuery版的更多相关文章

  1. 【bird-front】全自动数据表格组件bird-grid

    bird-grid是bird-front前端框架中实现的全自动数据表格组件.组件内部处理数据加载.分页.排序.查询.新增.编辑等一系列操作.让业务表格的开发从繁复的增删查改中脱离出来,编码简洁却又功能 ...

  2. [React]全自动数据表格组件——BodeGrid

    表格是在后台管理系统中用的最频繁的组件之一,相关的功能有数据的新增和编辑.查询.排序.分页.自定义显示以及一些操作按钮.我们逐一深入进行探讨以及介绍我的设计思路:   新增和编辑 想想我们最开始写新增 ...

  3. JQuery Easy Ui dataGrid 数据表格

    数据表格 - DataGrid 英文文档:http://www.jeasyui.com/documentation/index.php# 继承$.fn.panel.defaults,使用$.fn.da ...

  4. JQuery Easy Ui dataGrid 数据表格 ---制作查询下拉菜单

    JQuery Easy Ui dataGrid 数据表格 数据表格 - DataGrid 继承$.fn.panel.defaults,使用$.fn.datagrid.defaults重载默认值.. 数 ...

  5. JQuery Easy Ui dataGrid 数据表格 -->转

    转至: http://www.cnblogs.com/cnjava/archive/2013/01/21/2869876.html#events 数据表格 - DataGrid 内容 概况 使用方法 ...

  6. jquery easyui DataGrid 数据表格 属性

    用法 1.  <table id="tt"></table> 1.  $('#tt').datagrid({ 2.      url:'datagrid_d ...

  7. Jquery EasyUI datagrid后台数据表格生成及分页详解

    由于项目原因,网站后台需要对用户信息进行各种操作,有时还需要进行批量操作,所以首先需要将用户信息展示出来,查了不少资料.发现Jquery EasyUI确实是一个不错的选择,功能强大,文档也比较全面,而 ...

  8. 第二百二十四节,jQuery EasyUI,ComboGrid(数据表格下拉框)组件

    jQuery EasyUI,ComboGrid(数据表格下拉框)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解 EasyUI 中 ComboGrid(数据表格下拉框)组件的 ...

  9. 第二百二十二节,jQuery EasyUI,DataGrid(数据表格)组件

    jQuery EasyUI,DataGrid(数据表格)组件 学习要点: 1.加载方式 2.分页功能 本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于 Pa ...

随机推荐

  1. Expect 安装 on centos7

    本文演示如何在CentOS7上安装和使用Expect. 使用场景 在主机A上编写并且执行Shell脚本,Shell脚本中需要ssh到主机B上执行交互命令. 安装 在主机A上安装expect: yum ...

  2. [20171113]修改表结构删除列相关问题3.txt

    [20171113]修改表结构删除列相关问题3.txt --//维护表结构删除字段一般都是先ALTER TABLE <table_name> SET UNUSED (<column_ ...

  3. C++中cin.clear()的用法

    我们谈谈cin.clear的作用,第一次看到这东西,很多人以为就是清空cin里面的数据流,而实际上却与此相差很远,首先我们看看以下代码: #include <iostream>  usin ...

  4. 视频截图Util

    ​​ VideoToPicUtil.java package com.zhwy.util; import java.io.File; import java.util.ArrayList; impor ...

  5. Linux运维之每日小技巧-检测网站状态以及PV、UV等介绍

    [root@ELK-chaofeng07 httpd]# curl -o /dev/null -w %{http_code}\\n -s www.baidu.com 状态码为200表示成功. PV.U ...

  6. parallels Desktop解决无法压缩硬盘的问题

    使用pd12新建的win7虚拟机仅仅使用了四十个G,但在本地硬盘中的体现却是占用了一百左右:尝试压缩提示: 无法编辑硬盘属性,因为该硬盘有一个或多个快照. 该硬盘属于某一带有一个或多个快照的虚拟机.请 ...

  7. Burp Suite 抓取http、https流量配置+CA证书安装

    HTTPS协议是为了数据传输安全的需要,在HTTP原有的基础上,加入了安全套接字层SSL协议,通过CA证书来验证服务器的身份,并对通信消息进行加密.基于HTTPS协议这些特性,我们在使用Burp Pr ...

  8. January 31st, 2018 Week 05th Wednesday

    Real love is not just instinct, but intent. 真正的爱不是身体上的一见钟情,而是要用心去经营. What is real love? Honestly, I ...

  9. Android Studio 学习Demo内容及一些bug处理技巧 -----个人技术文档,两次冲刺总结

    实现的基本内容 1.基本界面的注册(包括转换界面,隐式,显式注册,主界面的入口注册) 2.匿名内部类实现Button按钮的监听事件,并通过Toast进行显示 3.界面切换(显式.隐式) 4.调用浏览器 ...

  10. 随机生成&部门匹配

    整体概况 1.完整程序概况 (1)程序整体构架 (2)生成程序模型 (3)匹配算法模型 (4)生成结果评估 (5)命名规范 (6)先期和后期分工 2.心路历程与对全新的java认识(心得体会篇) (1 ...