AdminLTE模板

在接触新模板之前,需要对bootstrap有初步了解,文档戳这里  主要是了解有哪些控件、样式、元素 可以直接follow使用(形成需要什么的时候直接去查文档的意识,而不是都自己创造)。 AdminLTE是基于bs 搭建的前端样式框架,完全遵循bs的前端规范。

AdminLTE有完善的Demo及文档说明,已部署到本地,戳这里。另外在新版的后台中也附带了链接

小图标

AdminLTE采用fonticon来作为默认的小图标,默认的FontIcon库(字体图标,这种方式的图标其实是字体,因此可以用css控制颜色,大小,甚至加动画,比单纯使用图片的方式更加灵活可控,是目前前端流行技术之一。),请参看Demo文档戳这里。模板附带了两套FontIcon,用法分别如下:

  1. font awesome字体

    1. <i class="fa fa-dashboard"></i> 前面的fa是固定的 后面的是对应的图标
  2. glyphicons
    1. <i class="glyphicon glyphicon-adjust"></i>

标准文档结构

这节的内容基于原版文档(全部的请戳详细文档),针对Razor引擎,做了相应修改。

  1. 页头部分

    一个页面有3个Title,分别是html head里的title、文档结构正文中的大标题和副标题。针对Razor,需要在页面上对以下三个参数赋值:

    (1) ViewBag.Title => 页面大标题, (请设置)

    (2) ViewBag.PageTitle => 显示在页面里的标题 (请设置)

    (3) VIewBag.SubTitle => 显示在页面里的小标题 (可不设)

  1. 菜单部分

    左侧的菜单经过修改之后,添加了小图标,在api设置页可以设置特定的小图标,一定是模板附带的font icon。 还有一个菜单是右上的面包屑菜单,这个菜单整体是个ul,请使用razor语法:

    1. @section headernav{ //section是Razor 预定义节,这里headernav被声明为必须

    2. <li><a href="#">Charts</a></li>

    3. <li class="active">ChartJS</li>

    4. }

    ATT:这部分等空了再改成配置,前期请自行添加!!!

  1. 正文

    这里的正文指的是html文档结构右边的正文部分,在模板里必须是在div.content底下(bootstrap标准, 也可以采用其他允许的class,详细参考BootStrap 格栅系统),下面以一个标准的表格页面作为例子:

  1. <section class="content"> //正文定义
  2. <div class="row"> //bs格栅 定义一个行
  3. <div class="col-xs-12"> //bs格栅 定义一个12格占位的列
  4. <div class="box box-default"> //模板控件 BOX,详见下面的说明
  5. <div class="box-header with-border">
  6. <h3 class="box-title">搜索条件</h3>
  7. <div class="box-tools pull-right">
  8. <button class="btn btn-box-tool" data-tooltip="tooltip" title="隐藏" data-widget="collapse"><i class="fa fa-minus"></i></button> // 这个box附带隐藏按钮
  9. </div><!-- /.box-tools -->
  10. </div><!-- /.box-header -->
  11. <div class="box-body">
  12. <div class="form-inline"> //form-inline 定义一行多列的表单
  13. <div class="form-group"> //form-group 定义div内元素为一个行组
  14. <block>
  15. <label for="userId">客户编号:</label>
  16. <input id="userId" type="text" style="width:90px;" placeholder="客户编号" />
  17. </block>
  18. </div>
  19. <button class="btn btn-info btn-flat btn-sm" id="search">搜索</button>
  20. </div>
  21. </div><!-- /.box-body -->
  22. </div>
  23. <!-- /.box -->
  24.  
  25. <div class="box">
  26. <div class="box-header">
  27. <h3 class="box-title">数据</h3>
  28. </div><!-- /.box-header -->
  29. <div class="box-body">
  30. <table id="example2" class="table table-bordered table-hover"> //定义表格
  31. 。。。。
  32. </table>
  33. </div><!-- /.box-body -->
  34. <div id="processingIndicator" class="overlay" style="display:none"> //一个loading层, 见下面的说明
  35. <i class="fa fa-refresh fa-spin"></i>
  36. </div>
  37. </div><!-- /.box -->
  38. </div>
  39. </div>
  40. </section>

这个页面的完整例子,请查看CRM-客户列表页面(请戳详细页面

上面的例子中使用了一些特殊的组件:

(1) Box, Box作为AdminLTE模板附带的块组件,是最常用的排版组建,应该作为基础牢记,Box有多种样式及用法(原文档)。 我们的页面结构里,content里一定是以Box为基础的!

(2)Loading组件, 模板中提供了非常方便的Loading使用方式,只要在Box的body块之下添加一段loading html即可,html见上面的代码,如果要控制loading显示隐藏,请使用js配合处理

DataTable.js (表格控件)

官方文档,请戳这里,可能需要翻墙,实在翻不出去,找Gondar吧 - -!

这里只讲最常见的通用用法,直接上代码

  1. var srtable = $('#example2').on('processing.dt', function (e, settings, processing) {
  2. //自定义loading,就是控制上面提到的loading html组件 这段照抄就好
  3. $('#processingIndicator').css('display', processing ? 'block' : 'none');
  4. }).DataTable({ //开始声明Table
  5. processing: false,//禁掉原生的loading,你也可以扔掉上面的代码用这个
  6. paging: true, //是否分页,要是!
  7. serverSide: true,//是否服务器端处理数据,要是! 否则分页、排序之类会针对本地数据缓存
  8. ajax: { //和jquery ajax一样
  9. url: '@Url.Action("GetCustomerList")',
  10. type: 'POST',
  11. data: function (d) {
  12. return $.extend({}, d, {
  13. //自定义参数, 此处非常要注意,d是 datatable的默认ajax参数,最好带着吧,除非你真的不需要。 采用jquery 复制函数来扩展自定义参数~!
  14. "UserId": $('#userId').val(),
  15. });
  16. }
  17. },
  18. columns: [
  19. { data: 'UserId' },//列的映射, datatable的好用之处是,他会记录下完整的后台json数据,即使列不显示,数据还是在的,至于如何取一会讲。
  20. 。。。
  21. ],
  22. columnDefs: [
  23. { "render": function ( data, type, row ) {
  24. return '<a target="_blank" href="http://www.@CurrentShareDomain/hpsc/hpfcl-' + row.ID +'.html">查看</a>'
  25. }, "targets": 4 } //列定义 这里扩展了一个操作列,用来查看,注意看 row就是一行的元数据,是个JSON
  26. ],
  27. "lengthChange": true,//每页大小
  28. "searching": true,//搜索
  29. "ordering": true,//排序
  30. "info": true,//?
  31. "autoWidth":true,//自动列宽, 这里顺带提一提,列多的时候thead的字体可以设置小一些
  32. sDom: 'lrtip'//dom结构 该语句 隐藏filter搜索条 我们这默认搜索应该不需要,有些页面只有一个搜索条,那直接使用这个 删掉这句话
  33. });
  34.  
  35. //这里开始最强大的交互部分,注意一定on去挂一个事件委托,否则因为html是动态的 事件要丢的,而on是基于事件冒泡,遍历了当前元素的委托而响应的。
  36. $('#example2').on('click', 'tr', function (event) {
  37. var data = srtable.row(this).data();//看行数据就是这么取到的!!! 这句话一定要记住啊!!!千万!!
  38. if (data != null && data.UserId != null && data.UserId > 0) {
  39. //跳转
  40. window.location = '@Url.Action("userdetail")?userid=' + data.UserId;
  41. }
  42.  
  43. }).on('dblclick', 'td', function (event) {
  44. //$(this).css('background', '#000');
  45. });

上面提到的是非常非常基本的用法,而深入用法,用到的时候自行查看API,如果看不到那就只好找Gondar 翻墙看。 另外与knockoutjs等mvvm框架的交互,可以粗糙的使用事件手动挂接的方式,参考CRM-用户详情页-访问记录里的增删改。有更强大的框架支持的话,请post给gondar!

由于DataTable的ajax参数众多,因此我封装了部分参数,如果没有封装进去,而需要使用的请找Gondar!

对DataTable Request的参数,封装成了JQDataTableModel类,使用时先集成此类,然后再Action参数处,声明自定义Bind

例如:

  1. [ModelBinder(typeof(JQTBinder))]UserListJQTModel viewModel // 这里需要特别注意的是SortColumn参数,对应的是列序号

Response参数, 封装成了JQDataTableResponse, 使用如下

  1. var response = new JQDataTableResponse<OpUserDetail>
  2. {
  3. recordsTotal = (int)total,
  4. recordsFiltered = (int)total,
  5. data = data.ToList(),
  6. draw = viewModel.Draw
  7. };
  8. return response.ToJsonResult();

日期范围选择控件

在模板里看到这个控件,文档戳这

组建依赖 moment.js 文档戳这

  1. $('#daterange-btn').daterangepicker(
  2. {
  3. ranges: { //声明快速选择按钮
  4. '今天': [moment(), moment().add(1, 'days')],
  5. '昨天': [moment().subtract(1, 'days'), moment()],
  6. '最近7天': [moment().subtract(6, 'days'), moment()],
  7. '最近30天': [moment().subtract(29, 'days'), moment()],
  8. '本月': [moment().startOf('month'), moment().endOf('month')],
  9. '上月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
  10. },
  11. startDate: moment().subtract(29, 'days'),
  12. endDate: moment()
  13. },
  14. function (start, end) {//应用按钮的响应事件,这里格式化
  15. $('#startDate').html(start.format('YYYY-MM-DD'));
  16. $('#endDate').html(end.format('YYYY-MM-DD HH:mm:ss'))
  17. }
  18. );

Messenger提示框

文档

这里只说明最简单的用法,已集成到模板,使用页面直接调用如下代码

  1. $.message = {
  2. error: function (msg) {
  3. Messenger().post({ message: msg, type: "error", hideAfter: 5, showCloseButton: true });
  4. },
  5. info: function (msg) {
  6. Messenger().post({ message: msg, type: "info", hideAfter: 5, showCloseButton: true });
  7. },
  8. success: function (msg) {
  9. Messenger().post({ message: msg, type: "success", hideAfter: 5, showCloseButton: true });
  10. }};
  11.  
  12. //上面的代码已写到模板页,调用页调用如下:
  13. $.message.error('保存失败!');

ArtDialog(弹出框)

这个组建提供了丰富的弹出功能,我们这里使用alter、confirm这些功能, 文档在这里

  1. $.message = {
  2. confirm: function (msg, okf, canf) {
  3. var d = dialog({
  4. title: '提示',
  5. content: msg,
  6. okValue: '确定',
  7. ok: function () {
  8. if (okf != null)
  9. okf();
  10. },
  11. cancelValue: '取消',
  12. cancel: function () {
  13. if (canf != null)
  14. canf();
  15. },
  16. width: '20em'
  17. });
  18. d.show();
  19. }
  20. }
  21. //以上代码同样写到模板页了,调用如下:
  22. $.meesage.confirm('确认删除?',function(){
  23. //...删除
  24. });

Tab

Tab控件是模板自带的,使用上非常简单,只要定义如下的Html结构:(具体的参考CRM-用户详情页)

  1. <ul class="nav nav-tabs ui-sortable-handle"> // Nav导航 其中active指的是当前激活的tab, 默认应该填上一个
  2. <li class="active"><a href="#company-info" data-toggle="tab" aria-expanded="true">公司信息</a></li>
  3. <li class=""><a href="#buyerdemands" data-toggle="tab">发布的货盘</a></li>
  4. </ul>
  5. <div class="tab-content no-padding"> //文档内容
  6. <!-- Morris chart - Sales -->
  7. <div class="box box-solid tab-pane active" id="company-info" style="position: relative; height: 600px;">
  8. <div class="box-body">
  9. // 看这里又实用了Box组件
  10. </div>
  11. <div class="overlay">
  12. <i class="fa fa-refresh fa-spin"></i>
  13. </div>
  14. </div>
  15.  
  16. </div>

复杂表单弹出(Modal)

这个Modal是bootstrap自带的弹出框,术语模态框。 用于弹出显示复杂的自定义的html内容, 完整的api请见文档

这里不贴Html代码了,只讲用法,代码见CRM-用户详情.

  1. $('#md-visit-record .modal-title').text('添加访问记录');//修改title
  2. $('#md-visit-record').modal('show');//弹窗

Modal其实也可以用来做为ArtDialog的功能,只不过比较不同样,所以和argDialog的使用场合,请大家自行区别!

其他组件

模板里附带了很多控件,尤其是在DashBoard页面,大家自行参考,有需要统一说明的可以找Gondar一起。我们使用控件的原则是,简单,方便,不与模板冲突。最重要的是方便大家开发。

MVVM

关于MVVM,我建议大家自行学习,这对前端的建模和写法有很大的启发,传统的依赖Jquery的写法在大型数据交互的情景下,效率非常差,代码可维护性也非常低!这部分下次再详细写。参考Knockoutjs.

上面提到的点,很粗略,大家在使用过程中,还是要养成一定要记得文档和询问,不要简单的Copy就用了,一知半解也许就埋下了BUG点了。而且只用了解熟悉了之后,才能充分发挥控件对我们工作效率的提升。

后台UI模板开发规范的更多相关文章

  1. 后台管理UI模板

    一.EasyUI easyui是一种基于jQuery的用户界面插件集合. easyui为创建现代化,互动,JavaScript应用程序,提供必要的功能. 使用easyui你不需要写很多代码,你只需要通 ...

  2. yii2-basic后台管理功能开发之一:引入模板

    前景:哎没想到用php的yii2框架写了官网……自己选择的框架,跪着也要码完,当年用yii2-basic搭建了官网,原是想偷懒的,没想到还要写后台.... 需求:实现一个可编辑页面图片及新闻内容的后台 ...

  3. Kendo UI开发教程(7): Kendo UI 模板概述

    Kendo UI 框架提供了一个易用,高性能的JavaScript模板引擎.通过模板可以创建一个HTML片段然后可以和JavaScript数据合并成最终的HTML元素. Kendo 模板侧重于UI显示 ...

  4. Metronic – 超赞!基于 Bootstrap 的响应式后台管理模板

    Metronic 是一套精美的响应式后台管理模板,基于强大的 Twitter Bootstrap 框架实现.Metronic 拥有简洁优雅的 Metro UI 风格界面,6 种颜色可选,76 个模板页 ...

  5. 【转】Android开发规范

    转自:https://github.com/Blankj/AndroidStandardDevelop 摘要 1 前言 2 AS 规范 3 命名规范 4 代码样式规范 5 资源文件规范 6 版本统一规 ...

  6. 【转】Android 开发规范(完结版)

    摘要 1 前言 2 AS 规范 3 命名规范 4 代码样式规范 5 资源文件规范 6 版本统一规范 7 第三方库规范 8 注释规范 9 测试规范 10 其他的一些规范 1 前言 为了有利于项目维护.增 ...

  7. 后端不会写页面怎么办?推荐几个好用的前端UI模板、组件对比

    前言 下面推荐并对比几个好用的前端UI模板 推荐给以下的人使用: 1.不想重复造轮子的后端 2.不想学bootstrap的后端 3.后端开发想自己写简单页面的 4.偷懒的前端 本文注重手机端,对web ...

  8. Bootstrap后台管理模板调研

    Bootstrap后台管理模板调研 SB Admin 2(推荐) SB Admin 2是一款开源的基于Bootstrap搭建的后台管理模板,简约,易用.没有复杂的组件和花炫的设计,很质朴,但较为美观. ...

  9. Android 你应该注意的开发规范

    本文由Blankj投稿. Blankjd的博客地址: http://www.jianshu.com/u/46702d5c6978 为了利于项目维护以及规范开发,促进成员之间Code Review的效率 ...

随机推荐

  1. django系列3.4-- request对象和response对象(未完待续)

    一.request对象 详细信息可以查阅django官方文档 共有五种请求相关的常用值 request.path_info 返回用户访问的url不包括域名 request.method 请求中使用的H ...

  2. java下载文件注意点

    前台: 不建议使用ajax,可以使用window.location.href 后台: 三个参数--> response path filename--filename如果要防止乱码,可以用Str ...

  3. luoguP4647 [IOI2007] sails 船帆

    https://www.luogu.org/problemnew/show/P4647 首先发现答案与顺序无关,令 $ x_i $ 表示高度为 $ i $ 的那一行帆的个数,第 $ i $ 行对答案的 ...

  4. var 是 Java 开发的好朋友啊!

    简评:Java var != JavaScript var. Java 10 中引入了新的语法用于局部变量类型推断,很多开发者有所疑惑,希望这篇文章能帮到你. 什么是类型推断 其实在 Java 中类型 ...

  5. 利用python 学习数据分析 (学习三)

    内容学习自: Python for Data Analysis, 2nd Edition         就是这本 纯英文学的很累,对不对取决于百度翻译了 前情提要: 各种方法贴: https://w ...

  6. js的window对象

    js的window对象 1.子窗口方法 function testOpen(){ window.open('son.html','newwindow','height=400, width=600, ...

  7. 图的最短路径---迪杰斯特拉(Dijkstra)算法浅析

    什么是最短路径 在网图和非网图中,最短路径的含义是不一样的.对于非网图没有边上的权值,所谓的最短路径,其实就是指两顶点之间经过的边数最少的路径. 对于网图,最短路径就是指两顶点之间经过的边上权值之和最 ...

  8. POJ 2192

    #include <iostream> #include <string> #define MAXN 500 using namespace std; bool dp[MAXN ...

  9. Thread.Sleep(1000) 、Task.Delay(1000).Wait() 区别

    public static Task Delay(int millisecondsDelay, CancellationToken cancellationToken){    if (millise ...

  10. BZOJ_3224 Tyvj 1728 普通平衡树 【离散化+权值线段树】

    一 题面 Tyvj 1728 普通平衡树 二 分析 比较明显是可以用平衡二叉搜索树(splay)做的. 用权值线段树做,前提就是要先离散化,因为权值线段树维护的值域信息. 板子. 三 AC代码 #in ...