基础介绍

FastAdmin的前端部分使用或涉及到主要是RequireJS,jQuery,AdminLTE,Bower,Less,CSS,其中

RequireJS主要是用于JS的模块化加载

Bower主要用于管理第三方插件。

Less主要是用于我们编写LESS和编译成CSS代码

在阅读接下来的文档之前最好先简单的了解下RequireJSBower,而jQuery是我们必须要掌握的工具库

FastAdmin中前端的最常用的第三方插件有Layer,ToastrLayer用于弹窗,Toastr用于提示。

目录结构

  1. public
  2. ├── assets
  3. ├── addons
  4. ├── css
  5. ├── fonts
  6. ├── img
  7. ├── js
  8. ├── backend
  9. ├── frontend
  10. ├── less
  11. └── libs

assets主要存在我们框架所需要使用到的静态资源

assets/js/backend主要存在后台控制器所对应的JS模块

assets/libs主要存在第三方的插件

assets/less主要存在Less文件

assets/img主要存在图片相关文件

assets/css主要存在CSS样式相关文件

assets/addons主要存放插件的相关静态资源

标准模块

在控制器章节我们有提到每个控制器都对应一个JS模块,控制器名称和JS中模块名称是一一对应的。

比如我们的控制器是application/admin/controller/Article.php,则我们JS中对应的JS模块是public/assets/js/backend/article.js

如果我们的控制器是application/admin/controller/Member/Teacher.php,则我们JS中对应的JS模块是public/assets/js/backend/member/teacher.js

每一个控制器请求的方法对应JS模块中一个方法

比如控制器Article.php中的index方法,对应的是JS的article模块中的Controller.index方法,如果我们添加了自己的方法detail方法,则对应Controller.detail方法。

一个JS标准控制器模块的写法如下:

  1. define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
  2. var Controller = {
  3. index: function () {
  4. // 初始化表格参数配置
  5. Table.api.init({
  6. extend: {
  7. index_url: 'category/index',
  8. add_url: 'category/add',
  9. edit_url: 'category/edit',
  10. del_url: 'category/del',
  11. multi_url: 'category/multi',
  12. dragsort_url: '',
  13. table: 'category',
  14. }
  15. });
  16. var table = $("#table");
  17. // 初始化表格
  18. table.bootstrapTable({
  19. url: $.fn.bootstrapTable.defaults.extend.index_url,
  20. escape: false,
  21. pk: 'id',
  22. sortName: 'weigh',
  23. pagination: false,
  24. commonSearch: false,
  25. columns: [
  26. [
  27. {checkbox: true},
  28. {field: 'id', title: __('Id')},
  29. {field: 'type', title: __('Type')},
  30. {field: 'name', title: __('Name'), align: 'left'},
  31. {field: 'nickname', title: __('Nickname')},
  32. {field: 'flag', title: __('Flag'), operate: false, formatter: Table.api.formatter.flag},
  33. {field: 'image', title: __('Image'), operate: false, formatter: Table.api.formatter.image},
  34. {field: 'weigh', title: __('Weigh')},
  35. {field: 'status', title: __('Status'), operate: false, formatter: Table.api.formatter.status},
  36. {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
  37. ]
  38. ]
  39. });
  40. // 为表格绑定事件
  41. Table.api.bindevent(table);
  42. },
  43. add: function () {
  44. Controller.api.bindevent();
  45. },
  46. edit: function () {
  47. Controller.api.bindevent();
  48. },
  49. api: {
  50. bindevent: function () {
  51. Form.api.bindevent($("form[role=form]"));
  52. }
  53. }
  54. };
  55. return Controller;
  56. });

我们可以看到该模块第一行为RequireJS标准语法,意思是此模块依赖'jquery', 'bootstrap', 'backend', 'table', 'form'几个模块,同时将它们加载为$, undefined, Backend, Table, Form这几个对应,我们就可以放心大胆在其中使用这几个对象了。

其中有定义一个Controller 对象,它有index/add/ediit/api四个方法,这四个方法分别与我们控制器中的方法一一对应。

工具模块

在FastAdmin中我们封装了非常多实用的模块类便于我们使用。以下做详细介绍

表单(Form)

表单模块主要用于框架表单组件元素的渲染和事件绑定,当我们自定了一个表单后,必须使用表单模块中Form.api.bindevent进行绑定表单,否则不会有任何作用。

引入方式

  1. require(['form'], function(Form){});

内部方法

  1. //为表单绑定事件,将自动绑定上传/富文本/下拉框/selectpage/表单验证等功能,FastAdmin中最常用的方法,
  2. Form.api.bindevent(form, success, error, submit);
  3. //表单自定义事件存储对象
  4. Form.api.custom
  5. //提交表单的方法,在表单完成验证后进行提交
  6. Form.api.submit(form, success, error, submit);
  7. //以下事件为具体第三方插件实现的方法,可以在调用`Form.api.bindevent`之前修改对应的方法来修改相应功能
  8. Form.events.bindevent(form)
  9. Form.events.citypicker(form)
  10. Form.events.cxselect(form)
  11. Form.events.datetimepicker(form)
  12. Form.events.faselect(form)
  13. Form.events.fieldlist(form)
  14. Form.events.plupload(form)
  15. Form.events.selectpage(form)
  16. Form.events.selectpicker(form)
  17. Form.events.validator(form, success, error, submit)

使用示例

  1. Form.api.bindevent($("form[role=form]"), function(data, ret){
  2. Toastr.success("成功");
  3. }, function(data, ret){
  4. Toastr.success("失败");
  5. });

以上代码表格当表单提交处理成功后提示成功,处理失败提示失败

上传(Upload)

上传模块主要用于框架JS端的上传逻辑,默认采用plupload进行上传,也可以采用Ajax的方法进行上传,plupload的方法上传支持上传进度展示。

引入方式

  1. require(['upload'], function(Upload){});

内部方法

  1. //为表单中的上传按钮绑定plupload上传事件
  2. Upload.api.plupload(element, onUploadSuccess, onUploadError);
  3. //上传自定义事件存储对象
  4. Upload.api.custom
  5. //采用Ajax的方法进行上传文件
  6. Upload.api.send(file, onUploadSuccess, onUploadError);
  7. //plupload上传组件配置
  8. Upload.config.classname
  9. Upload.config.container
  10. Upload.config.previewtpl
  11. //upload上传事件配置
  12. Upload.event.onBeforeUpload(up, file);
  13. Upload.event.onFileAdded(up, files);
  14. Upload.event.onPostInit(up);
  15. Upload.event.onUploadError(ret, onUploadError, button);
  16. Upload.event.onUploadResponse(response);
  17. Upload.event.onUploadSuccess(ret, onUploadSuccess, button);

使用示例

  1. //使用Plupload上传
  2. Upload.api.plupload($(".plupload"), function(data, ret){
  3. Toastr.success("成功");
  4. }, function(data, ret){
  5. Toastr.success("失败");
  6. });
  7. //使用Ajax上传
  8. Upload.api.send(file, function(data, ret){
  9. Toastr.success("成功");
  10. }, function(data, ret){
  11. Toastr.success("失败");
  12. });

以上代码表格当表单提交处理成功后提示成功,处理失败提示失败

表格(Table)

表格模块主要用于渲染数据列表,对数据列表进行排序、过滤、筛选、绑定事件、增删改查等等操作。我们在CRUD一键生成后看到的列表就是使用表格模块进行完成的。

引入方式

  1. require(['table'], function(Table){});

内部方法

  1. //为渲染的表格绑定上增删改查等事件
  2. Table.api.bindevent(table);
  3. //生成按钮链接
  4. Table.api.buttonlink(column, buttons, value, row, index, type);
  5. //表格格式化对象集,包含多个格式化数据的方法
  6. Table.api.formatter
  7. //根据行获取行数据
  8. Table.api.getrowdata(table, index)
  9. //初始化表格配置
  10. Table.api.init(defaults, columnDefaults, locales)
  11. //表格指量操作的方法
  12. Table.api.multi
  13. //替换URL链接中的{变量名}
  14. Table.api.replaceurl
  15. //获取选中的ID
  16. Table.api.selectedids
  17. //Bootstrap-table表格默认列的配置
  18. Table.columnDefaults
  19. //表格相关DOM元素类配置
  20. Table.config
  21. //Bootstrap-table默认config配置
  22. Table.defaults
  23. //已经渲染的表格对象
  24. Table.list

使用示例

  1. // 初始化表格参数配置
  2. Table.api.init({
  3. extend: {
  4. index_url: 'category/index',
  5. add_url: 'category/add',
  6. edit_url: 'category/edit',
  7. del_url: 'category/del',
  8. multi_url: 'category/multi',
  9. dragsort_url: '',
  10. table: 'category',
  11. }
  12. });
  13. var table = $("#table");
  14. // 初始化表格
  15. table.bootstrapTable({
  16. url: $.fn.bootstrapTable.defaults.extend.index_url,
  17. escape: false,
  18. pk: 'id',
  19. sortName: 'weigh',
  20. pagination: false,
  21. commonSearch: false,
  22. columns: [
  23. [
  24. {checkbox: true},
  25. {field: 'id', title: __('Id')},
  26. {field: 'type', title: __('Type')},
  27. {field: 'name', title: __('Name'), align: 'left'},
  28. {field: 'nickname', title: __('Nickname')},
  29. {field: 'flag', title: __('Flag'), operate: false, formatter: Table.api.formatter.flag},
  30. {field: 'image', title: __('Image'), operate: false, formatter: Table.api.formatter.image},
  31. {field: 'weigh', title: __('Weigh')},
  32. {field: 'status', title: __('Status'), operate: false, formatter: Table.api.formatter.status},
  33. {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
  34. ]
  35. ]
  36. });
  37. // 为表格绑定事件
  38. Table.api.bindevent(table);

表格的详细介绍可以查看一张图解表格:https://forum.fastadmin.net/d/323